98
журнал для cистемных администраторов, вебмастеров и программистов №11(12) ноябрь 2003 подписной индекс 81655 Виртуальный полигон для разработчика и администратора на основе Linux и VMWare Архитектура файловой системы ext2 Аудит учетных записей пользователей в Active Directory Windows Server 2003: взгляд системного администратора Удобнее, эффективнее, лучше: snort + MySQL Fusebox в помощь веб-программисту Виртуальный полигон для разработчика и администратора на основе Linux и VMWare Архитектура файловой системы ext2 Аудит учетных записей пользователей в Active Directory Windows Server 2003: взгляд системного администратора Удобнее, эффективнее, лучше: snort + MySQL Fusebox в помощь веб-программисту №11(12) ноябрь 2003

012 Системный Администратор 11 2003

Embed Size (px)

DESCRIPTION

№11(12) ноябрь 2003 журнал для cистемных администраторов, вебмастеров и программистов подписной индекс 81655 №11(12) ноябрь 2003 50 Виртуальный полигон для разработчика и администратора на основе Linux и VMWare Коды Рида-Соломона в практических реализациях, или Информация, воскресшая из пепла III Интеграция SQUID + LDAP Использование бездисковых маршрутизаторов Файловые системы Linux ПОЛЕЗНЫЕ СОВЕТЫ 4 1

Citation preview

Page 1: 012 Системный Администратор 11 2003

журнал для cистемных администраторов,вебмастеров и программистов

11(12) ноябрь 2003подписной индекс 81655

Виртуальный полигондля разработчикаи администраторана основе Linux и VMWare

Архитектура файловойсистемы ext2

Аудит учетных записейпользователейв Active Directory

Windows Server 2003: взглядсистемного администратора

Удобнее, эффективнее, лучше:snort + MySQL

Fusebox в помощьвеб-программисту

Виртуальный полигондля разработчикаи администраторана основе Linux и VMWare

Архитектура файловойсистемы ext2

Аудит учетных записейпользователейв Active Directory

Windows Server 2003: взглядсистемного администратора

Удобнее, эффективнее, лучше:snort + MySQL

Fusebox в помощьвеб-программисту

11

(12)

ноя

брь

2003

Page 2: 012 Системный Администратор 11 2003
Page 3: 012 Системный Администратор 11 2003

111(12), ноябрь 2003

оглавление

Удобнее, эффективнее, лучше:snort + MySQL

Павел Закляков[email protected] 62

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

Защитник сети

Сергей Яремчук[email protected] 56

ОБРАЗОВАНИЕ

Коды Рида-Соломонав практических реализациях,или Информация, воскресшая из пепла III

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

Кто предупрежден – тот вооружен

Михаил Торчинский[email protected] 90

Файловые системы Linux

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

Архитектура файловой системы ext2

Владимир Мешков[email protected] 26

4

Интеграция SQUID + LDAP

Марк Кричмар[email protected] 34

Аудит учетных записей пользователейв Active Directory

Максим Костышин[email protected] 44

18

BUGTRAQ 2, 33

Сергей Яремчук[email protected]

Использование бездисковыхмаршрутизаторов

Андрей Мозговой[email protected] 38

Виртуальный полигондля разработчика и администраторана основе Linux и VMWare

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

Windows Server 2003:взгляд системного администратора

Алексей ДоляМихаил Мельников[email protected] 50

ПОЛЕЗНЫЕ СОВЕТЫ

Fusebox в помощь веб-программисту

Андрей Уваров[email protected]Дмитрий Горяинов[email protected] 76

WEB

Воспоминания замечательных дней:заря компьютеризации России и борцыс железными конями той эпохи...

Алексей Костромин[email protected] 89

КАК ЭТО БЫЛО

Page 4: 012 Системный Администратор 11 2003

2

bugtraq

Удаленный DoS против OpenBSD pf(4)Программа: OpenBSD 3.2, 3.3.Опасность: Критическая.Описание: Уязвимость обнаружена в пакетном фильтреOpenBSD pf(4). Удаленный пользователь может аварий-но завершить работу приложения.

Сообщается, что приложение может обратиться к па-мяти, которая предварительно была освобождена. В этомслучае, если используются активные scrub-правила, уда-ленный пользователь может аварийно завершить работуза приложения.URL производителя: http://www.openbsd.orgРешение: Установите соответствующие исправления:ftp://ftp.openbsd.org/pub/OpenBSD/patches/3.3/common/006_pfnorm.patchftp://ftp.openbsd.org/pub/OpenBSD/patches/3.2/common/019_pfnorm.patch

Множественные уязвимости в Novell iChainПрограмма: Novell iChain 2.2.Опасность: Критическая.Описание: Novell выпустил support pack для iChain. В немустраняются несколько уязвимостей, которые могут ис-пользоваться злонамеренным пользователем, чтобы вне-дриться в сессию другого пользователя, вызвать отказ вобслуживании и скомпрометировать систему. Пользователь может внедриться в сессию другого

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

Удаленный пользователь может завершить работу сер-вера, используя WGET.

iChain подвержен к OpenSSL-уязвимостям в ASN.1-об-работчике.

URL производителя: http://support.novell.com/cgi-bin/search/searchtid.cgi?/2967175.htmРешение: Установите соответствующие исправления:Apply iChain 2.2 Support Pack 2 beta: http://support.novell.com/servlet/filedownload/sec/ftf/b1ic22sp2.exeiChain 2.2 Support Pack 2 beta – TID2967175: http://support.novell.com/cgi-bin/search/searchtid.cgi?/2967175.htm

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

Удаленное переполнение буферав Messenger Serviceв Microsoft Windows NT/2000/XP/2003Программа: Microsoft Windows 2000 (Advanced Server,Datacenter Server, Professional, Server), Microsoft WindowsNT 4.0 (Server, Terminal Server Edition, Workstation), MicrosoftWindows Server 2003 (Datacenter Edition, Enterprise Edition,Standard Edition, Web Edition), Microsoft Windows XP (HomeEdition, Professional).Опасность: Критическая.Описание: Переполнение буфера обнаружено в MessengerService в Microsoft Windows. Удаленный атакующий можетвыполнить произвольный код на уязвимой системе.

Проблема связана с тем, что Messenger Service не про-веряет длину сообщения. В результате злонамеренныйпользователь может послать сообщение, которое пере-полнит буфер и выполнит произвольный код на уязвимойсистеме с привилегиями системы. Messenger Service от-ключен по умолчанию в Microsoft Windows 2003.URL производителя: http://www.microsoft.comРешение: Фильтруйте Netbios и RPC-трафик. Установитесоответствующие обновления:Microsoft Windows NT Workstation 4.0, Service Pack 6a;Microsoft Windows NT Server 4.0, Service Pack 6a;Microsoft Windows NT Terminal Server Edition, Service Pack 6;Microsoft Windows 2000, Service Pack 2;Microsoft Windows 2000, Service Pack 3, Service Pack 4;Microsoft Windows XP Gold, Service Pack 1;Microsoft Windows XP 64-bit Edition;Microsoft Windows XP 64-bit Edition Version 2003;Microsoft Windows Server 2003;Microsoft Windows Server 2003 64-bit Edition.

Переполнение буфера в функции User32.dllв Microsoft Windows 4.0/2000/XP/2003Программа: Microsoft Windows XP (Professional, HomeEdition), Microsoft Windows Server 2003 (Web Edition, StandardEdition, Enterprise Edition, Datacenter Edition), MicrosoftWindows NT 4.0 (Workstation, Terminal Server Edition, Server),Microsoft Windows 2000 (Server, Professional, DatacenterServer, Advanced Server).Опасность: Критическая.Описание: Уязвимость обнаружена в Microsoft Windows4.0/2000/XP/2003. Злонамеренный локальный пользова-тель может поднять свои привилегии.

Проблема связана с тем, что ListBox- и ComboBox-уп-равления вызывают функцию User32.dll, которая содер-жит переполнение буфера. В результате злонамеренныйпользователь может эксплуатировать эту уязвимость че-рез интерактивный или привилегированный процесс, ко-торый использует ListBox- и ComboBox-управления, что-бы выполнить произвольный код с привилегиями этогопроцесса. Уязвимость может эксплуатироваться черезUtility Manager в Windows 2000. Также возможна эксплуа-тация и через другие приложения сторонних фирм.

Переполнение происходит, когда передается LB_DIR-сообщение к ListBox или CB_DIR-сообщение к ComboBoxс чрезмерно длинным параметром pathname. Подробнос-ти в источнике сообщения.URL производителя: http://www.microsoft.comРешение: Установите соответствующее исправление:Microsoft Windows NT Workstation 4.0, Service Pack 6a;Microsoft Windows NT Server 4.0, Service Pack 6a;Microsoft Windows NT Terminal Server Edition, Service Pack 6;Microsoft Windows 2000, Service Pack 2;Microsoft Windows 2000 Service Pack 3, Service Pack 4;Microsoft Windows XP Gold, Service Pack 1;Microsoft Windows XP 64 bit Edition;Microsoft Windows XP 64 bit Edition Version 2003;Microsoft Windows Server 2003;Microsoft Windows Server 2003 64 bit Edition.

Page 5: 012 Системный Администратор 11 2003
Page 6: 012 Системный Администратор 11 2003

4

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

АНДРЕЙ БЕШКОВ

ВИРТУАЛЬНЫЙДЛЯ РАЗРАБОТЧИКА

НА ОСНОВЕ LINUX

ПОЛИГОНИ АДМИНИСТРАТОРАИ VMWARE

Page 7: 012 Системный Администратор 11 2003

511(12), ноябрь 2003

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

В первой статье этого цикла, опубликованной в сентябрь-ском номере журнала «Системный администратор», я до-вольно подробно описал, что такое технология виртуаль-ных машин VMWare Workstation и каково ее предназна-чение. Также мы изучили теоретические основы функ-ционирования, способы и возможные цели практичес-кого применения VMWare Workstation в повседневной де-ятельности администратора. Свою точку зрения на воп-рос, для решения каких задач стоит применять подоб-ный комплекс программного обеспечения, я высказывалв предыдущей статье. Ну а для тех, кто присоединился кнам только сейчас, кратко повторим содержание сказоктысячи и одной ночи, прозвучавших раньше. Таким об-разом, тем, кто еще не в курсе, я намекаю, что она былапосвящена установке, настройке и опыту успешного при-менения VMWare Workstation на платформе Windows.Господам линуксоидам просьба перестать плеваться ивсе же найти в себе силы прочесть вышеуказанную ста-тью. Сделать это необходимо хотя бы по той простойпричине, что в данной статье я сознательно буду гово-рить только о необходимом минимуме теории функцио-нирования VMWare Workstation. Вместо этого мы обсу-дим особенности дизайна виртуальных машин и множе-ство прочих полезных вещей. Думаю, лучше потратитьвремя на изложение новых знаний, чем на повторениепройденного материала.

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

Операционная система, под управлением которой ра-ботает программа VMWare Workstation, называется «ос-новной» системой. Такие системы, в свою очередь, де-лятся на официально поддерживаемые и те, кому не по-везло. Начнем с перечисления имен титулованных особиз рода Linux: Mandrake Linux 8.2, 9.0 Red Hat Advanced Server 2.1 Red Hat Linux 7.0, 7.1, 7.2, 7.3, 8.0 SuSe Linux Enterprise Server 7,8 SuSe Linux 7.3, 8.0, 8.1

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

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

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

Теперь перейдем ко второму виду систем. Системы,запущенные внутри контейнера виртуальной машиныVMWare Workstation, называются «гостевыми».

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

На приведенной выше схеме мы видим, что в сетяхVMnet3 и VMnet2 находятся машины, работающие подуправлением операционных систем Windows 98SE иWindows 2000, символизирующие обычные рабочиестанции. Машина Windows 98SE имеет статическийадрес 192.168.120.15, а Windows 2000 получает адрес192.168.80.128 динамически с помощью DHCP. СетьVmnet1 используется нами как демилитаризованнаязона (DMZ). Внутри нее обитает машина со статичес-ким адресом 192.168.40.32 под управлением LinuxMandrake 9.0. На ней для демонстрации работы сете-вых служб установлен веб-сервер Apache. Между со-бой все три сети, перечисленные выше, соединены спомощью шлюза, как ни странно, имеющего также трисетевых интерфейса и функционирующего под управ-лением FreeBSD 4.7. Я надеюсь, всем понятно, что дляоблегчения стыковки наших сетей все три интерфейсамашины FreeBSD должны иметь фиксированные адре-са. Ну и в роли нашего последнего героя выступаетмашина NetBSD с двумя интерфейсами. Первый из нихс адресом 192.168.40.57 смотрит в демилитаризован-ную зону, а второй является шлюзом в Интернет. Навтором интерфейсе 192.168.32.128 работает механизмпреобразования сетевых адресов (NAT), это, в свою оче-

Page 8: 012 Системный Администратор 11 2003

6

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

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

С точки зрения VMWare Workstation наши тестовыесети будут выглядеть так.

На первый взгляд схема сетевых взаимодействий выг-лядит устрашающе сложно, но на самом деле это не так,и через несколько минут вы будете с легкостью ориенти-роваться в топологии наших сетей. Итак, на рисунке мывидим все перечисленные ранее хосты и их интерфейсы.Присмотревшись внимательно, легко разобраться в со-ответствии между IP-адресами и интерфейсами. Далееизображены три виртуальных коммутатора для сетей host-only VMnet1 (192.168.40.0), VMnet2 (192.168.80.0), VMnet3(192.168.120.0). Соответственно для работы с устройствомNAT (192.168.32.2) предназначена сеть VMnet8, для кото-рой по умолчанию используется адресное пространство192.168.32.0.

Также обратите внимание на тот факт, что виртуаль-ные DHCP-сервера работают только в сетях VMnet2 иVMnet8. Исходя из того факта, что в сетях VMnet1 и VMnet3используются статические IP-адреса, DHCP-сервера этихсетей отключены за ненадобностью.

Итак, приступим к установке. На сайте производителязаказываем себе тестовый серийный номер для Linux. Всеподобные лицензии действуют в течение 30 дней с мо-мента заказа. Таким образом, мы получаем в свое распо-ряжение на целый месяц полнофункциональную версиюпрограммы. Через несколько минут в наш ящик электрон-ной почты упадет два письма с серийными номерами дляразных платформ. Запрашивать новые тестовые лицен-зии можно неограниченное количество раз, но на разныепочтовые ящики. Таким образом, можно использоватьVMWare Workstation, не нарушая никаких законов, сколь-ко угодно долго. Подобная лояльная политика персоналаVMWare.inc вызывает искреннее уважение.

Дело в том, что дистрибутив VMWare Workstation дляLinux распространяется в двух форматах – rpm и tar.gz.Скачать их можно тут: http://www.vmware.com/download/workstation.html. Также не забудьте взять фирменную до-кументацию в формате pdf. Я расскажу о процедуре ус-тановки каждого из этих дистрибутивов VMWare

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

Первым делом давайте рассмотрим наиболее простойспособ. Для установки из rpm нужно выполнить всего однукоманду.

Убеждаемся, что все установилось правильно.

На этом действия с rpm можно считать законченными.Переходим к инсталляции из tar.gz:

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

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

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

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

А здесь мы будем хранить документацию для VMWareWorkstation в формате man.

Скрипт предложил поместить документацию в форма-те txt в директорию /usr/share/doc/vmware/. Пусть будет так,я не против, да и места на жестком диске не жалко.

Жалуется на то, что директории /usr/share/doc/vmware

# rpm -i VMware-workstation-4.0.0-4460.i386.rpm

# rpm -qa | grep VMwareVMwareWorkstation-4.0.0-4460

# tar zxvf VMware-workstation-4.0.0-4460.tar.gz

# cd vmware-distrib# ./vmware-install.pl

In which directory do you want to install the binary files?[/usr/bin]

In which directory do you want to install the library files?[/usr/lib/vmware]

In which directory do you want to install the manual files?[/usr/share/man]

In which directory do you want to install the documentationfiles?[/usr/share/doc/vmware]

The path "/usr/share/doc/vmware" does not exist currently.This program is going to create it, including needed parentdirectories. Is this what you want?[yes]

Page 9: 012 Системный Администратор 11 2003

711(12), ноябрь 2003

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

не существует, и спрашивает, создавать ли ее. Отвеча-ем «yes». Кстати, после инсталляции, сходив в директо-рию /usr/share/doc/vmware/, видим, что кроме лицензийи инструкций по установке там больше ничего нет. Всето же самое можно увидеть внутри директории doc дис-трибутива VMWare Workstation. Ну что же, не будем ос-танавливаться и продолжим настройку.

Тут нужно указать, где находится директория со скрип-тами для разных уровней загрузки системы. Для исполь-зуемого мною дистрибутива это директория /etc/rc.d/.

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

Можно считать инсталляцию завершенной. Скриптспрашивает, нужно ли приступить к конфигурированию.Оно производится с помощью скрипта /usr/bin/vmware-config.pl. Теперь к нам присоединяются те, кто произво-дили установку из rpm. Они должны запустить этот скриптвручную.

Узнаем версию ядра. Чуть позже эти знания обязатель-но пригодятся нам.

Запускаем скрипт конфигурирования:

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

Отвечаем «yes» и движемся дальше.

Система рапортует о том, что не смогла найти моду-ли, подходящие к нашему ядру. Список доступных моду-лей можно увидеть в директории /usr/lib/vmware/modules/

binary. Далее система хочет убедиться в том, что у насустановлен работоспособный компилятор языка C.

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

Теперь посмотрим в списке установленных пакетов:

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

Вставляем в привод первый диск дистрибутива и пе-реходим в директорию с пакетами.

Ставим make:

Те, у кого под рукой нет дисков с Alt Linux, но есть по-стоянное подключение к Интернету, могут воспользовать-ся репозитарием пакетов сайта altlinux.ru. Устанавливатьпакеты в этом случае можно с помощью программы apt-get или synaptic.

После инсталляции make прерываем сценарий vmware-config нажатием клавиш Ctrl+C и запускаем его опять.

Скрипт снова спрашивает о наличии компилятора, наэто мы ему вновь отвечаем «yes».

И в ответ получаем вот такую неприятную ошибочку.

Начинаем разбираться с проблемой.

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

What is the directory that contains the init directories(rc0.d/ to rc6.d/)?[/etc/rc.d]

What is the directory that contains the init scripts?[/etc/rc.d/init.d]

Before running VMware Workstation for the first time, youneed to configure it by invoking the following command: "/usr/bin/vmware-config.pl". Do you want this program to invokethe command for you now? [yes]

# uname -aLinux tigroid.net 2.4.20-alt5-up #1 Sun Feb 16 16:46:13 ↵

MSK 2003 i686 unknown unknown GNU/Linux

/usr/bin/vmware-config.pl

You must read and accept the End User License Agreement tocontinue. Press enter to display it.

Do you accept? (yes/no) yes

Trying to find a suitable vmmon module for your running kernel.

None of VMware Workstation's pre-built vmmon modules issuitable for your running kernel. Do you want this programto try to build the vmmon module for your system (you needto have a C compiler installed on your system)? [yes]

# which makewhich: no make in (/root/bin:/sbin:/usr/sbin:/usr/local/ ↵

sbin:/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin)

# rpm -qa | grep make

# cd /mnt/cdrom/auto/ALTLinux/RPMS

# rpm -i make-3.79.1-ipl6mdk.i586.rpm

Using compiler "/usr/bin/gcc". Use environment variable CCto override.

i586-alt-linux-gcc: No such file or directoryYour compiler "/usr/bin/gcc" is not supported by this versionof VMware Workstation.

Unable to continue.

For more information on how to troubleshoot module-relatedproblems, please visit our Web site at "http://www.vmware.com/download/modules/modules.html" and "http://www.vmware.com/support/reference/linux/prebuilt_modules_linux.html".

Execution aborted.

# rpm -qa | grep gcclibgcc3.2-3.2.1-alt2gcc-common-1.2.1-alt2

Setup is unable to find the "make" program on your machine.Please make sure it is installed. Do you want to specifythe location of this program by hand?[yes]

Page 10: 012 Системный Администратор 11 2003

8

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

В ALT Linux для удобства администрирования исполь-зуется концепция альтернатив. Это означает, что все наи-более важные системные утилиты должны иметь ссылкина свои бинарные файлы из каталога /etc/alternatives:

Таким образом, мы видим, что файл /etc/alternatives/gcc указывает на файл /usr/bin/gcc_wrapper, который неявляется полноценным компилятором. А служит лишь длятого, чтобы выводить сообщение об ошибке на случай,если пользователь попытается запустить его.

Такая вот своеобразная заглушка. Ну что же, значит,придется снова ставить все самому. Переходим на диск 3дистрибутива и пытаемся устанавливать пакет gcc2.96-2.96-alt3.i586.rpm. Внимательный читатель может задатьвопрос, почему мы используем gcc именно этой версии,когда нам доступна гораздо более новая версия 3.2. От-вет очень прост: ядро, на котором работает система, со-брано версией 2.96 компилятора gcc. Так что если попы-таться поставить что-то другое, скрипт инсталляцииVMWare Workstation наотрез откажется работать.

Итак, судя по результатам работы команды rpm, у наснеудовлетворенные зависимости между пакетами. Нач-нем разрешение конфликтов. Как всегда, ехидно замеча-ем, что счастливчики, пользующиеся apt-get или synaptic,подобных проблем не почувствуют. Мое нежелание ис-пользовать apt-get связано с тем, что я предпочитаю де-лать все самостоятельно. Каким из перечисленных спо-собов добавлять программное обеспечение в систему,оставляю на ваше усмотрение. Ну а я займусь увлека-тельной игрой, суть которой сводится к поиску и установ-ке следующих пакетов.

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

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

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

Судя по всему, это директория /usr/lib/kernel/2.4.20-alt5/include/. Пишем ее в ответ на приглашение и снова жмем«Enter». Система начнет компиляцию, и на экране начнутпоявляться надписи вроде:

Система закончит сборку модуля vmmon и перейдет кследующему модулю по имени vmnet. В результате сборкикаждого модуля должна появляться вот такая надпись: «Themodule loads perfectly in the running kernel», говорящая, чтосозданный модуль загружается в ядро без конфликтов.

Далее отвечаем на вопрос, хотим ли мы, чтобы нашивиртуальные машины могли работать с сетью.

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

Сеть vmnet0 используется для работы с устройствамитипа мост и конфигурируется автоматически, поэтому намо правильности ее настроек заботиться нет нужды.

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

#ll /etc/alternatives/gcclrwxrwxrwx 1 root rpm 20 Aug 29 00:39 ↵

/etc/alternatives gcc -> /usr/bin/gcc_wrapper

# ./gcc_wrapperi586-alt-linux-gcc: No such file or directory

# rpm -i gcc2.96-2.96-alt3.i586.rpmerror: failed dependencies:

cpp2.96 = 2.96-alt3 is needed by gcc2.96-2.96-alt3binutils >= 1:2.13.90.0.4-alt2 is needed by gcc2.96-2.96-alt3glibc-devel is needed by gcc2.96-2.96-alt3

# rpm -i cpp2.96-2.96-alt3.i586.rpm# rpm -i kernel-headers-common-1.0-alt2.noarch.rpm# rpm -i kernel24-headers-2.4.20-alt5.i586.rpm# rpm -i glibc-devel-2.2.6-alt0.6.i586.rpm# rpm -i libbfd-2.13.90.0.4-alt2.i586.rpm# rpm -i binutils-2.13.90.0.4-alt2.i586.rpm# rpm -i gcc2.96-2.96-alt3.i586.rpm

Using compiler "/usr/bin/gcc". Use environment variable CCto override.

What is the location of the directory of C header files thatmatch your running kernel?[/usr/src/linux/include]

# rpm -qpl kernel24-headers-2.4.20-alt5.i586.rpm

Extracting the sources of the vmmon module.

Building the vmmon module.

make: Entering directory /root/tmp/vmware-config0/vmmon-only'make[1]: Entering directory ↵

`/root/tmp/vmware-config0/vmmon-only'make[2]: Entering directory ↵

`/root/tmp/vmware-config0/vmmon-only/driver-2.4.20-alt5-up'make[2]: Leaving directory ↵

`/root/tmp/vmware-config0/vmmon-only/driver-2.4.20-alt5-up'make[2]: Entering directory ↵

`/root/tmp/vmware-config0/vmmon-only/driver-2.4.20-alt5-up'make[2]: Leaving directory ↵

`/root/tmp/vmware-config0/vmmon-only/driver-2.4.20-alt5-up'make[1]: Leaving directory ↵

`/root/tmp/vmware-config0/vmmon-only'make: Leaving directory /root/tmp/vmware-config0/vmmon-only'

Do you want networking for your virtual machines? (yes/no/help) [yes]

Configuring a bridged network for vmnet0.

Configuring a NAT network for vmnet8.

Do you want this program to probe for an unused privatesubnet? (yes/no/help)[yes] no

What will be the IP address of your host on the privatenetwork?[172.16.252.1] 192.168.32.1

Page 11: 012 Системный Администратор 11 2003

911(12), ноябрь 2003

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

Соответственно описываем нужную нам для NAT-сетьи ее маску.

Нажав «Enter», приступаем к изучению лицензии наусеченной версии сервера DHCP, поставляющегося в ком-плекте с VMWare Workstation.

Разрешаем использовать сети типа host-only. Что это засети и каково их предназначение, читайте в первой статье.

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

Вот так мы создали сеть Vmnet1 с адресным простран-ством 192.168.40.0 и маской сети 255.255.255.0.

Повторяем те же действия для сетей vmnet2 и vmnet3.Только теперь в качестве адресов сетей используем со-ответственно 192.168.80.0 и 192.168.120.0.

Cкрипт рапортует об успешном создании сетей vmnet1,vmnet2, vmnet3. В ответ на вопрос, не хотим ли мы на-строить еще несколько сетей, отвечаем «no».

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

Мне такая возможность показалось полезной, и я раз-решил ее включение. Кстати, в фирменной документа-ции сказано, что если на вашей машине уже работаетSamba, то в этом случае нужно в ответ на вопрос сказать«no», потому что иначе в системе начнутся конфликтымежду полной и усеченной версиями Samba.

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

Ну что же, вернемся обратно к установке. Как всегда,сначала рассказали о лицензии на сервер Samba, с по-мощью которого будет идти обмен файлами, а затем уве-домили, что Samba у нас функционирует нормально. За-тем прошел автоматический запуск демона VMWareWorkstation.

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

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

Мне показалось, что создавать еще одного пользова-

The version of DHCP used in this version of VMware Workstationis licensed as described in the "/usr/share/doc/vmware/DHCP-COPYRIGHT" file.

Hit enter to continue.

Do you want to be able to use host-only networking in yourvirtual machines?[no] yes

Do you want this program to probe for an unused privatesubnet? (yes/no/help)[yes] no

What will be the IP address of your host on the privatenetwork? 192.168.40.0

What will be the netmask of your private network? 255.255.255.0

The following hostonly networks have been defined:

. vmnet1 is a host-only network on private subnet 192.168.40.0.

The following hostonly networks have been defined:

. vmnet1 is a host-only network on private subnet 192.168.40.0.

. vmnet2 is a host-only network on private subnet 192.168.80.0.

. vmnet3 is a host-only network on private subnet 192.168.120.0.

Do you want this program to automatically configure yoursystem to allow your virtual machines to access the host'sfilesystem? (yes/no/help) [no]

This system appears to have a CIFS/SMB server (Samba)configured for normal use. If this server is intended torun, you need to make sure that it will not conflict withthe Samba server setup on the private network (the one thatwe use to share the host's filesystem). Please check your /etc/samba/smb.conf file so that:

. The "interfaces" line does not contain"192.168.40.1/255.255.255.0". There is a "socket address" line that contains only yourreal host IP address

# rpm -qa | grep sambasamba-client-2.2.7-alt3samba-2.2.7-alt3samba-client-cups-2.2.7-alt3samba-common-2.2.7-alt3

Starting VMware services:Virtual machine monitor [ OK ]Virtual ethernet [ OK ]Bridged networking on /dev/vmnet0 [ OK ]Host-only networking on /dev/vmnet1 (background) [ OK ]Host-only networking on /dev/vmnet2 (background) [ OK ]Host-only networking on /dev/vmnet3 (background) [ OK ]Host-only networking on /dev/vmnet8 (background) [ OK ]NAT networking on /dev/vmnet8 [ OK ]

# ps -ax | grep -v grep | grep mbd 1260 ? S 0:00 /usr/bin/vmware-nmbd -D ↵

-l /dev/null -s /etc/vmware/vmnet1/smb/smb.conf ↵

-f /var/run/vmware-nmbd-vmnet1.pid 1280 ? S 0:00 /usr/bin/vmware-smbd -D ↵

-l /dev/null -s /etc/vmware/vmnet1/smb/smb.conf ↵

-f /var/run/vmware-smbd-vmnet1.pid

You have successfully configured VMware Workstation to allowyour virtual machines to access the host's filesystem. Wouldyou like to add a username and password for accessing yourhost's filesystem at this time? (yes/no/help)[yes] no

What will be the netmask of your private network?[255.255.255.0]

Page 12: 012 Системный Администратор 11 2003

10

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

теля только для того, чтобы разграничить доступ к файламосновной системы, нецелесообразно. Особенно учитываятот факт, что я пользуюсь этой машиной единолично. Та-ким образом, Samba будет работать от имени пользовате-ля root, запустившего серверную часть VMWare Workstation.

Проверить, как функционируют подсистемы VMWareWorkstation и какой у каждой из них статус, можно с по-мощью следующей команды:

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

Теперь проверим, какие процессы работают в систе-ме от имени VMWare Workstation

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

Все настройки VMWare Workstation хранятся внутрикаталога /etc/vmware. Каждая из сетей имеет свою папкувнутри вышеназванного каталога. Для наглядности давай-те посмотрим на содержимое папки /etc/vmware/vmnet1,в которой хранятся настройки для сети vmnet1. Как вымогли бы догадаться, /etc/vmware/vmnet1/dhcpd/ содержитнастройки сервера dhcp, а /etc/vmware/vmnet1/smb/ соот-ветственно является местом хранения конфигурационныхфайлов усеченной версии сервера Samba.

Для того чтобы остановить сервера DHCP, обслужи-вающие сети vmnet1 и vmnet3, нужно удалить каталоги/etc/vmware/vmnet1/dhcpd/ и /etc/vmware/vmnet3/dhcpd/. Нуи напоследок стоит убедиться, что в файле /etc/vmware/vmnet2/dhcpd/dhcpd.conf есть вот такая секция:

Иногда скрипт конфигурирования сети VMWareWorkstation забывает дописать в эту секцию строку optionrouters, отвечающую за адрес шлюза по умолчанию. Со-ответственно клиенты при работе с DHCP-сервером ус-пешно получают IP-адреса, но дальше своей родной сетипойти не могут, потому что не знают адреса маршрутиза-тора. Осталось подправить одну крохотную, но в то жевремя очень важную настройку. Если мы хотим, чтобылюди из внешнего мира видели наш виртуальный веб-сер-вер, работающий на машине Linux Mandrake, то нам нуж-но организовать проброс входящих соединений. Получа-ется, что все соединения, приходящие на 80-й порт ре-альной машины, нужно заворачивать на 80-й порт вирту-ального веб-сервера. Делается это очень просто, хотя ине так элементарно, как если бы VMWare Workstation ра-ботала под управлением Windwos. Нужно добавить в файл/etc/vmware/vmnet8/nat/nat.conf внутрь секции [incomingtcp]следующие строки.

# service vmware statusAt least one instance of VMware Workstation is still running.

vmnet-bridge (pid 1165) is running...vmnet-dhcpd (pids 1373 1287 1273 1239) are running...vmnet-netifup (pids 1308 1251 1208 1182) are running...Module vmmon installedModule vmnet installed

# ifconfiglo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0UP LOOPBACK RUNNING MTU:16436 Metric:1RX packets:2 errors:0 dropped:0 overruns:0 frame:0TX packets:2 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:92 (92.0 b) TX bytes:92 (92.0 b)

vmnet1 Link encap:Ethernet HWaddr 00:50:56:C0:00:01inet addr:192.168.40.1 Bcast:192.168.40.255 ↵

Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:65 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:100RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

vmnet2 Link encap:Ethernet HWaddr 00:50:56:C0:00:02inet addr:192.168.80.1 Bcast:192.168.80.255 ↵

Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:100RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

vmnet3 Link encap:Ethernet HWaddr 00:50:56:C0:00:03inet addr:192.168.120.1 Bcast:192.168.120.255 ↵

Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:100RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

vmnet8 Link encap:Ethernet HWaddr 00:50:56:C0:00:08inet addr:172.16.252.1 Bcast:172.16.252.255 ↵

Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:100RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

subnet 192.168.80.0 netmask 255.255.255.0 range 192.168.80.128 192.168.80.254; option broadcast-address 192.168.80.255; option domain-name-servers 192.168.80.1; option domain-name "localdomain"; option routers 192.168.80.2;

# ps -ax | grep -v grep | grep vm 7398 ? S 0:00 /usr/bin/vmnet-dhcpd ↵

-cf /etc/vmware/vmnet1/dhcpd/dhcpd.conf ↵

-lf /etc/vmware/vmnet1/dhcpd/dhcpd.leases ↵

-pf /var/run/vmnet-dhcpd-vmnet1.pid vmnet1 7411 ? S 0:00 /usr/bin/vmware-nmbd -D ↵

-l /dev/null -s /etc/vmware/vmnet1/smb/smb.conf ↵

-f /var/run/vmware-nmbd-vmnet1.pid 7431 ? S 0:00 /usr/bin/vmware-smbd -D ↵

-l /dev/null -s /etc/vmware/vmnet1/smb/smb.conf ↵

-f /var/run/vmware-smbd-vmnet1.pid 7434 ? S 0:00 /usr/bin/vmnet-dhcpd ↵

-cf /etc/vmware/vmnet2/dhcpd/dhcpd.conf ↵

-lf /etc/vmware/vmnet2/dhcpd/dhcpd.leases ↵

-pf /var/run/vmnet-dhcpd-vmnet2.pid vmnet2 7493 ? S 0:00 /usr/bin/vmnet-dhcpd ↵

-cf /etc/vmware/vmnet8/dhcpd/dhcpd.conf ↵

-lf /etc/vmware/vmnet8/dhcpd/dhcpd.leases ↵

-pf /var/run/vmnet-dhcpd-vmnet8.pid vmnet8 7516 ? S 0:00 /usr/bin/vmnet-natd ↵

-d /var/run/vmnet-natd-8.pid ↵

-m /var/run/vmnet-natd-8.mac ↵

-c /etc/vmware/vmnet8/nat/nat.conf 7543 ? S 0:00 /usr/bin/vmnet-dhcpd ↵

-cf /etc/vmware/vmnet3/dhcpd/dhcpd.conf ↵

-lf /etc/vmware/vmnet3/dhcpd/dhcpd.leases ↵

-pf /var/run/vmnet-dhcpd-vmnet3.pid vmnet3

Page 13: 012 Системный Администратор 11 2003

1111(12), ноябрь 2003

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

Затем необходимо перезапустить серверную частьVMWare Workstation, заставив применить внесенные из-менения.

Судя по выводу скрипта, DHCP-сервера отключилисьво всех виртуальных сетях разом. На самом деле это нетак. Давайте проверим наличие демонов VMWareWorkstation в памяти. Делать это нужно все той же доб-рой старой командой ps:

Затаив дыхание, рассматриваем вывод команды. И –о чудо! – судя по надписям, демоны DHCP-сервера впол-не нормально обслуживают сети vmnet2 и vmnet8. С на-чальной настройкой покончено, можно двигаться дальше.

Также стоит посмотреть, что появилось в директории/usr/bin/ после инсталляции: vmnet-bridge – программа для создания устройств

«мост»; vmnet-dhcpd – усеченная версия демона dhcp; vmnet-natd – демон, реализующий функции устройства

NAT; vmnet-netifup – программа для создания виртуальных

сетевых интерфейсов;

vmnet-sniffer – перехватчик трафика для виртуальныхинтерфейсов, например, прослушивать данные, переда-ваемые через сеть vmnet3, можно с помощью командыvmnet-sniffer -e /dev/vmnet3. Это бывает очень полезнодля отладки разных проблем сетевой подсистемы;

vmstat – показывает состояние виртуальной машины; vmware – собственно главный исполняемый файл си-

стемы VMWare Workstation; vmware-config.pl – наш старый знакомый скрипт на-

стройки; vmware-loop – программа для экспорта данных из вир-

туальной файловой системы в реальную; vmware-mount.pl – инструмент для управления монти-

рованием разделов виртуальных дисков; vmware-nmbd – усеченная версия сервера имен NETBIOS; vmware-ping – служит для проверки виртуальных сетей; vmware-smbd – усеченная версия демона для работы

с SMB/CIFS (Samba); vmware-smbpasswd – программа управления пользо-

вателями и паролями из комплекта Samba; vmware-uninstall.pl – скрипт деинсталляции VMWare

Workstation; vmware-wizard – программа, используемая внутри VMWare

Workstation для создания новых виртуальных машин.

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

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

Программа должна отработать нормально, и на экранепоявится главное окно клиентской части VMWare Workstation.Пользуясь меню Help → Enter Serial Number, активируем ус-тановленное программное обеспечение с помощью тесто-вого серийного номера, присланного нам по почте.

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

# incoming www from outside on port 8080 = 192.168.40.32:80

# service vmware restartStopping VMware services:

Virtual machine monitor [ OK ]Bridged networking on /dev/vmnet0 [ OK ]DHCP server on /dev/vmnet1 [ OK ]SMB share server on /dev/vmnet1 [ OK ]SMB name server on /dev/vmnet1 [ OK ]Host-only networking on /dev/vmnet1 [ OK ]DHCP server on /dev/vmnet2 [ OK ]Host-only networking on /dev/vmnet2 [ OK ]DHCP server on /dev/vmnet3 [ OK ]Host-only networking on /dev/vmnet3 [ OK ]DHCP server on /dev/vmnet8 [ OK ]NAT networking on /dev/vmnet8 [ OK ]Host-only networking on /dev/vmnet8 [ OK ]Virtual ethernet [ OK ]

Starting VMware services:Virtual machine monitor [ OK ]Virtual ethernet [ OK ]Bridged networking on /dev/vmnet0 [ OK ]Host-only networking on /dev/vmnet1 (background) [ OK ]Host-only networking on /dev/vmnet2 (background) [ OK ]Host-only networking on /dev/vmnet3 (background) [ OK ]Host-only networking on /dev/vmnet8 (background) [ OK ]NAT networking on /dev/vmnet8

# ps -ax | grep -v grep | grep vm 4515 pts/1 S 0:00 /usr/bin/vmnet-bridge ↵

-d /var/run/vmnet-bridge-0.pid /dev/vmnet0 eth0 4531 pts/1 S 0:00 /usr/bin/vmnet-netifup ↵

-d /var/run/vmnet-netifup-vmnet1.pid /dev/vmnet1 vmnet1 4555 pts/1 S 0:00 /usr/bin/vmnet-netifup ↵

-d /var/run/vmnet-netifup-vmnet2.pid /dev/vmnet2 vmnet2 4586 ? S 0:00 /usr/bin/vmnet-dhcpd

-cf /etc/vmware/vmnet2/dhcpd/dhcpd.conf ↵

-lf /etc/vmware/vmnet2/dhcpd/dhcpd.leases ↵

-pf /var/run/vmnet-dhcpd-vmnet2.pid vmnet2↵

4595 pts/1 S 0:00 /usr/bin/vmnet-netifup ↵

-d /var/run/vmnet-netifup-vmnet3.pid /dev/vmnet3 vmnet3 4645 pts/1 S 0:00 /usr/bin/vmnet-netifup ↵

-d /var/run/vmnet-netifup-vmnet8.pid /dev/vmnet8 vmnet8 4675 ? S 0:00 /usr/bin/vmnet-natd ↵

-d /var/run/vmnet-natd-8.pid ↵

-m /var/run/vmnet-natd-8.mac ↵

-c /etc/vmware/vmnet8/nat/nat.conf 4686 ? S 0:00 /usr/bin/vmnet-dhcpd ↵

-cf /etc/vmware/vmnet8/dhcpd/dhcpd.conf ↵

-lf /etc/vmware/vmnet8/dhcpd/dhcpd.leases ↵

-pf /var/run/vmnet-dhcpd-vmnet8.pid vmnet8

$ /usr/bin/vmware

Page 14: 012 Системный Администратор 11 2003

12

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

Теперь необходимо проверить, правильно ли сработа-ла активация лицензии. Для этой цели нам пригодитсяменю Help → About

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

Особое внимание cтоит обратить на дату, расположив-шуюся за надписью Expiration. Она указывает, до какойдаты мы сможем пользоваться лицензией, а значит, и са-мой программой VMWare Workstation.

Итак, закончив с первоначальной настройкой VMWareWorkstation, перейдем к созданию наших виртуальных ма-шин. Этот процесс очень подробно описывался в первойстатье данного цикла. Если есть желание, можете выпол-нить его снова. Хотя я думаю, что ничего нового вы для себяне откроете. Ну а я как человек, искренне верящий в слова«лень – двигатель прогресса», поступлю иначе. Если выпомните, от предыдущей статьи нам в наследство осталиськомплекты файлов виртуальных машин, созданных подWindows. Сейчас мы займемся их переносом под Linux. Ма-шина, на которой происходят все безобразия, описанные вэтой статье, имеет на борту две операционных системы –ALT Linux и Windows 2000 Professional. Таким образом, намнужно примонтировать файловую систему Windows к дере-ву Linux в директорию /mnt/win_d/VirtualMachines. Выполнивэту задачу, мы получим доступ к файлам наших виртуаль-ных машин. Итак, давайте посмотрим, из каких файлов со-стоит любая виртуальная машина. В качестве примеравозьмем машину Windows 98.

Файлы win98-f001.vmdk и win98.vmdk отвечают за ра-боту с жестким диском. Первый из них содержит образдиска, а второй – его конфигурацию. Далее идет файл

nvram, в котором хранится образ и настройки BIOS дан-ной виртуальной машины. Как вы, наверное, уже догада-лись по названию, vmware.log хранит протоколы работы.Поэтому в случае возникновения каких-либо сбоев в фун-кционировании гостевой системы, устранение неполадоклучше всего начать с просмотра именно этого файла. Инаконец, мы подходим к самому интересному из всей кол-лекции – файлу win98.vmx. Именно он хранит в себе на-бор необходимых для работы виртуальной машины дан-ных. В качестве таких данных могут выступать: список устройств и их характеристики; количество виртуальных жестких дисков; соответствие между файлами виртуальных жестких

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

В случае если VMWare Workstation в данный момент про-изводит какие-либо действия с нашей виртуальной маши-ной, в директории появится еще и файл блокировки досту-па win98.vmx.WRITELOCK. Ну а если вдобавок ко всемуеще и гостевая система выполняется, то для каждого фай-ла виртуального диска создается дополнительный файлблокировки win98.vmdk.WRITELOCK. Также внутри дирек-тории можно встретить файлы вида win98.vmss иwin98.vmsn. Соответственно первый из них содержит дан-ные, полностью описывающие состояние виртуальной ма-шины на тот момент, когда ее функционирование былоприостановлено с помощью команды Power → Suspend. Нуа второй хранит данные моментального снимка виртуаль-ной машины, получаемого с помощью команды Snapshot →Save Snapshot. Время от времени внутри директории сфайлами гостевой системы на короткие промежутки вре-мени будут появляться различные служебные файлы, новы их, скорее всего, никогда не увидите.

Разобравшись с устройством виртуальной машины нафайловом уровне, перейдем от теории к действиям. Длятого чтобы мы могли работать с выбранной машиной, нуж-но объяснить VMWare Workstation, где находятся необхо-димые нам файлы.

Используем меню File → Open, получаем следующуюкартинку.

Page 15: 012 Системный Администратор 11 2003

1311(12), ноябрь 2003

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

Выбираем файл win98.vmx и обязательно используемпо прямому назначению кнопку «ОК». После того, какVMWare Workstation выполнит открытие всех нужных фай-лов, можно запускать виртуальную машину с полученнойтолько что гостевой системой.

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

Итак, тут мы видим конфликтную ситуацию, возник-шую внутри подсистемы сетевого оборудования. А еслиговорить точнее, то VMWare Workstation сообщает, что унее отсутствует сетевой адаптер VMnet3. Нажимаем «OK»и переходим к следующей ошибке.

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

В связи с разницей в имени гибкого диска междуWindows и Linux, диск A:\ тоже не хочет работать.

Совсем не понравилась VMWare Workstation моя ps/2мышь glidepoint. Но это не беда, доктор сказал, что на этомсвете почти все неприятности поправимы.

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

Эта ошибка единственная, с которой я не смог спра-виться, но она некритична. Дело в том, что моя устарев-шая видеокарта и установленный на машину X-сервер неподдерживают аппаратную акселерацию режима DGA, по-этому во время работы гостевой системы в полноэкран-ном режиме возможны проблемы с быстродействием. Радиинтереса я проверил, так ли это. Невооруженным глазомзаметить какое-либо замедление не удалось.

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

Первым делом беремся за настройку сетевого адап-тера. Проходим через меню Edit → Virtual Machine Settingsи выбираем устройство Network Adapter. Точно такого жеэффекта можно добиться с помощью меню Edit →Removable Devices → Ethernet0 → Edit.

Итак, нам нужно вместо VMnet3 выбрать из ниспада-ющего меню /dev/vmnet3. Затем с помощью переключа-теля «Connect» подключить устройство к работающей го-стевой системе. Дело в том, что VMWare Workstation по-зволяет подключать и отключать многие устройства пря-мо на ходу. В качестве таких устройств могут выступать

Page 16: 012 Системный Администратор 11 2003

14

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

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

Теперь займемся лечением устройства CD-ROM. Сра-зу же после переноса гостевой системы с Windows на Linuxэто виртуальное устройство представляет собой следую-щую совокупность настроек.

Для начала указываем, что нужное нам физическое уст-ройство называется /dev/cdrom/. И обязательно устанавли-ваем переключатель опции «Legacy emulation». Таким обра-зом, включается режим совместимости со старыми образ-цами устройств CD-ROM. Это дает дополнительную стабиль-ность функционирования. Затем выбираем один из двухпутей: либо приказываем работать с виртуальным CD-ROMв формате IDE-устройства, либо маскируем его под SCSI-устройство. В результате должна получиться одна из двухизображенных ниже комбинаций настроек.

Выбрав тот или иной путь для разрешения проблемыс CD-ROM устройством, идем дальше. Теперь нужно ра-зобраться с PS/2 мышью, установленной на основной си-стеме. Запускаем программу настройки общесистемныхпараметров (для моего дистрибутива это drakconf ) и вы-бираем в качестве мыши устройство «Стандартная PS2мышь с колесом (IMPS2)».

Настраивать мышь можно и вручную: для этого нужнооткрыть файл /etc/X11/XF86Config-4, в котором находят-ся настройки X-сервера. Ищем внутри него секцию, отве-чающую за работу мыши, и вносим вместо нее следую-щие строки:

Вешаем на стену скальп еще одной решенной пробле-мы и переходим к следующей. Сейчас нам нужно почи-нить устройство для работы с гибкими дисками. ПодWindows оно называется A:\ , ну а под Linux это будет одноиз устройств семейства /dev/fd. В моей системе это уст-ройство называется /dev/fd0.

Section "InputDevice"Identifier "Mouse1"Driver "mouse"Option "Protocol" "IMPS/2"Option "Device" "/dev/psaux"Option "ZAxisMapping" "4 5"

EndSection

Page 17: 012 Системный Администратор 11 2003

1511(12), ноябрь 2003

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

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

Неудивительно, что оно не работает при таком стран-ном названии «-1». Вместо этого, слегка задумавшись,но ничуть не сомневаясь, выбираем /dev/dsp:

Разобравшись со всеми проблемами, закрываемVMWare Workstation и все остальные приложения. Те-перь нужно перезапустить X-сервер для того, чтобы из-менения в настройках мыши вступили в действие. На-жимаем комбинацию кнопок Ctrl+Alt+BackSpace. Пос-ле перезагрузки X-сервера снова входим в систему изапускаем VMWare Workstation и внутри нее гостевуюмашину Windows 98. Уж теперь-то все должно зарабо-тать на ура.

Используя вышеописанную методику, чиним все ос-тальные гостевые системы. Таким образом, у нас появят-ся работоспособные виртуальные машины с FreeBSD,NetBSD, Linux, Windows 2000. Кстати, перед запуском каж-дой из них вы будете видеть вот такую картинку, предуп-реждающую о том, что в системе работает несколько го-стевых систем, и совместный доступ к аппаратным уст-ройствам может работать некорректно.

К таким устройствам можно отнести CD-ROM, гиб-кие диски и таймер реального времени. Если не хоти-те, чтобы подобные надписи впредь появлялись на эк-ране, воспользуйтесь переключателем «Never show thishint again». Хотя такой подход все равно не спасет отконфликтов, зато избавит от постоянного лицезренияданной надписи. Загрузив первую гостевую систему,сразу же запускаем вторую и моментально получаемпервый конфликт.

Судя по всему, гостевая система, запущенная первой,заблокировала устройство /dev/fd0, и теперь ни одна дру-гая система не сможет работать с ним до тех пор, покаоно не будет освобождено. Дабы избежать подобных кол-лизий в будущем, сделайте так, чтобы переключатели«Connected» и «Connected at power on» были отключены.

Таким образом, устройство для работы с гибкимидисками будет отключено по умолчанию. Мы сможемвключить его обратно в любой момент, когда нам нуж-но будет поработать с ним. А затем, когда необходи-мость в его услугах отпадет, будем возвращать его впервозданное состояние. Самый простой способ вклю-чить или выключить устройство – это воспользоватьсяменю Edit → Removable Devices, а затем выбрать нуж-ное устройство и вид действия, производимого над ним.Например, для отключения обсуждавшего выше дис-ковода гибких дисков нужно пройти через следующуюцепочку меню Edit → Removable Devices → floppy0 →Disconnect.

Разобравшись с первым конфликтом, переходим кследующему. Тут мы видим, что таймер реального вре-мени, в качестве которого выступает устройство /dev/rtc,также заблокирован первой гостевой системой.

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

Page 18: 012 Системный Администратор 11 2003

16

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

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

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

На следующей картинке можно увидеть одновремен-ную работу всех систем, на импортирование которых мыпотратили столько труда. Для наглядности каждая из нихзапущена в отдельном окне. Конечно, можно было запус-тить их внутри разных вкладок родительского окна, но ярешил, что так картинка будет выглядеть недостаточноэффектно. Добиться подобного вида можно, используяменю File → New → New Window. Во вновь появившемсяокне, следуя укоренившейся привычке, выбираем File →Open. Внимательный читатель может спросить, зачем всеэти сложности. Мой ответ будет довольно прост. Такойподход позволяет разложить виртуальные машины в нуж-ном порядке по виртуальным столам оконного менедже-ра. Лично мне это кажется весьма удобным.

У подобной методики работы есть один щекотливыймомент. Если внутри любого окна создана вкладка с гос-тевой операционной системой, то эта система становит-ся не доступна для запуска из другого окна. Все дело втом, что VMWare Workstation в момент открытия конфигу-рации виртуальной машины создает файл эксклюзивнойблокировки. Называется такой файл обычно «имя госте-вой системы.vmx.WRITELOCK». Причем файл создаетсяеще до запуска гостевой системы и остается до тех пор,пока не будет закрыта вкладка гостевой системы или за-вершится работа VMWare Workstation. Получается, чтоконфигурация гостевой системы будет заблокирована влюбом случае, вне зависимости от того, работает госте-вая система или нет. Если попытаться открыть эту госте-вую систему еще раз, то получим по рукам.

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

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

Мы немного отвлеклись от темы нашего повествова-ния. После переноса и успешного запуска всех гостевыхсистем настал момент проверить, насколько правильноработает наш макет. Для этого на Windows-машинах вы-полняем команду ipconfig /all и смотрим, какие настройкиу нашей сетевой подсистемы. Например, на следующемснимке можно увидеть результат выполнения вышеука-занной команды на машине Win2000.

Page 19: 012 Системный Администратор 11 2003

1711(12), ноябрь 2003

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

Так как все остальные системы, используемые в на-шем макете, являются диалектами Unix, то для просмот-ра состояния их сетевых интерфейсов нужно использо-вать команду ifconfig. Например, для машины FreeBSDвывод команды выглядел вот так:

lnc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX, ↵

MULTICAST> mtu 1500inet 192.168.40.2 netmask 0xffffff00 ↵

broadcast 192.168.40.255inet6 fe80::20c:29ff:fec7:b430%lnc0 ↵

prefixlen 64 scopeid 0x1ether 00:0c:29:c7:b4:30

lnc1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX, ↵

MULTICAST> mtu 1500inet 192.168.80.2 netmask 0xffffff00 ↵

broadcast 192.168.80.255inet6 fe80::20c:29ff:fec7:b43a%lnc1 ↵

prefixlen 64 scopeid 0x2ether 00:0c:29:c7:b4:3a

lnc2: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX, ↵

MULTICAST> mtu 1500inet 192.168.120.2 netmask 0xffffff00 ↵

broadcast 192.168.120.255inet6 fe80::20c:29ff:fec7:b444%lnc2 ↵

prefixlen 64 scopeid 0x3ether 00:0c:29:c7:b4:44

lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> ↵

mtu 1500faith0: flags=8002<BROADCAST,MULTICAST> mtu 1500lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> ↵

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

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

mtu 16384inet6 ::1 prefixlen 128inet6 fe80::1%lo0 prefixlen 64 scopeid 0x6inet 127.0.0.1 netmask 0xff000000

ppp0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500sl0: flags=c010<POINTOPOINT,LINK2,MULTICAST> mtu 552

Page 20: 012 Системный Администратор 11 2003

18

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

ФАЙЛОВЫЕ СИСТЕМЫ LINUX

СЕРГЕЙ ЯРЕМЧУК

Page 21: 012 Системный Администратор 11 2003

1911(12), ноябрь 2003

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

Что мне нравится в OС GNU/Linux, так это гибкость вовсем, практически можно собрать систему под опреде-ленные задачи, выбрав необходимое из множества ком-понентов. Кроме патчей к ядру, различных версий биб-лиотек и компиляторов, есть возможность выбора и фай-ловой системы, на которой будет работать ОС. В даннойстатье я предлагаю пробежаться по многообразию и оп-ределиться с выбором, узнать о достоинствах и недостат-ках предлагаемых файловых систем.

Под файловой системой понимается физический спо-соб организации данных на дисковом разделе, т.е. воз-можность их хранения, нахождения и манипулированияими (запись, стирание). Думаю, такого простенького оп-ределения вполне достаточно, чтобы понять, какие тре-бования выдвигаются к файловой системе. До недавнеговремени в Linux предлагалась для использования факти-чески только одна файловая система ext2fs. Да, возмож-но было, конечно, и установить ее в раздел FAT, но заня-тие это кажется мне крайне нездоровым, да и производи-тельность и стабильность при таком размещении толькострадает. Также изначально в ядре поддерживается воз-можность взаимодействовать с файловыми системамидругих ОС, расположенных на одном диске. Их можно по-смотреть, набрав:

и зайдя в пункт меню File system, все я их перечислять небуду, для включения их поддержки ядром его необходи-мо иногда пересобрать, активировав необходимый пункт.Да и то для наиболее распространенных, таких как NTFSWindows NT и UFS (FFS) FreeBSD, запись в них помеченакак DANGEROUS, плюс еще не забыта даже MINIX (стоитли говорить о позавчерашнем дне).

Но сейчас предлагаемый ассортимент несколько увели-чился, в современных ядрах добавилась возможность рабо-ты с так называемыми журналируемыми файловыми сис-темами – ext3fs, ReiserFS, XFS и JFS. Не говоря уж о под-держке технологий Soft-RAID и LVM. Но и это еще не все,для тех, кому нужна повышенная конфиденциальность ин-формации, хранимой на компьютере, вполне подойдет CFS,свободная криптографическая файловая система от МаттаБлейза (Mutt Blaze) для Unix/Linux (http://www.crypto.com/software/) или TCFS (Transparent Cryptographic File System)(http://www.tcfs.it/). В данной статье будут рассмотренытолько классические файловые системы как наиболеечасто применяемые на компьютерах, об остальных пого-ворим как-нибудь отдельно в следующий раз. Итак, постаршинству.

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

серверах, то она уже не удовлетворяет обычным тре-бованиям – большие разделы жесткого диска, быстроевосстановление после сбоев, высокопроизводительныеоперации ввода/вывода, потребность в хранении тысячи тысяч файлов, представляющих терабайты данных.Все это уже превышает возможности данной файловойсистемы. Еще одной особенностью этой файловой си-стемы является тройная косвенная адресация для ука-зания расположения блоков больших файлов. Выгля-дит это примерно так. Вся информация о расположе-нии блоков данных, принадлежащих данному файлу,хранится в inode. Если файл маленький, то в его мета-данных хватает места для размещения нужной инфор-мации, и туда помещаются прямые ссылки на ячейки(логические блоки), в которых хранятся данные, – пря-мая адресация. При увеличении же объема файла, таккак отведенное место уже не может адресовать зани-маемое пространство, то блоки метаданных указыва-ют уже на косвенные блоки, в которых содержатся ад-реса с данными, определенными в файле (простая кос-венная адресация), или опять же указатели на следую-щие косвенные блоки (тройная косвенная адресация).То есть если файл увеличивается в размере и дляпользователя это проходит как единичная операция,внутри выглядит несколько иначе: поначалу распреде-ляются новые блоки, для того чтобы содержать новыеданные, затем модифицируется inode, чтобы сделатьзапись о новых указателях и новых размерах, а затем,в конце концов, производится запись данных. Вот те-перь представьте, что будет, если при записи файлапроизойдет сбой. Возможно несколько вариантов. На-пример, запись уже произведена или еще не начина-лась – это самый оптимистичный вариант, в первом слу-чае после перезагрузки вы так и будете работать с до-кументом, ничего не заметив, а во втором случае про-сто теряется пара часов работы, но с файловой систе-мой ничего такого страшного не произойдет. А вот еслисистема «упала» именно в момент сохранения файла,то это худшее из того, что могло произойти. Если за-пись производилась в зону метаданных, то теперь ин-формация, содержащаяся в них, не будет соответство-вать реальному расположению файлов на диске. Ситу-ация несколько усугубляется еще и тем, что Linux, вотличие от Windows, не обязательно записывает обнов-ленный файл поверх старого, при записи во избежа-ние фрагментации выбирается место, чтобы он влезполностью и на соседние блоки. Поэтому-то в этой си-стеме нет программ дефрагментаторов, мне доводи-лось видеть фрагментацию данных максимум 1-2 %, даи то на переполненном диске, что, согласитесь, оченьмало (вообще на переполненных дисковых разделах су-щественно падает скорость операций IO, что характер-но для всех Unix-файловых систем). Так вот, а еслиданные заносились в каталог (а ведь это тоже файл),то после перезагрузки мы можем недосчитаться одно-го каталога или, что хуже, вообще целого раздела. Нуа если произошел сбой при записи в область данных,то, что он будет потом содержать, зависит от вашеговезения, особенно в случае, если производилась запись

#make xconfig

Page 22: 012 Системный Администратор 11 2003

20

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

поверх старого варианта файла. Конечно, ситуация нетак плачевна, как я обрисовал. За то время, что я ак-тивно эксплуатирую систему, и пройдя вместе с ней неодно выключение электропитания, случаев из ряда вонвыходящих не было. Естественно, чтобы избежать та-кое рассогласование, для данной файловой системыбыли разработаны утилиты, помогающие восстановитьее после сбоев. За несколько лет их алгоритм, в отли-чие от всеми любимого Scandisk, не поленились довес-ти практически до совершенства. Так как проверять прикаждой перезагрузке все диски, установленные на ком-пьютере, согласитесь, накладно по времени, нашли та-кой простой выход. После того как все данные согласо-ваны, непосредственно перед самым ее размонтирова-нием устанавливается бит чистого размонтирования –clean bit (в Windows также используется аналогичнаятехнология). И перед загрузкой системы перед ее мон-тированием программа fsck (FileSystem ChecK) простопроверяет его наличие, если бит установлен, то дела-ется вполне разумное предположение, что файловая си-стема находится в непротиворечивом состоянии, а еслинет, то запускается изрядно всем надоевшая утилитаfsck. В связи с тем, что ext2fs создает избыточные ко-пии критически важных метаданных, вероятность пол-ной потери данных чрезвычайно мала, система опре-деляет местонахождение поврежденных метаданных ипотом либо восстанавливает данные, копируя их изрезервных копий, либо просто удаляет файл или фай-лы, чьи метаданные пострадали. Точнее, не удаляет, апереносит их в каталог /lost+found. Правда, в большин-стве дистрибутивов и определение корректности завер-шения работы также немного упростили. Так, чтобы негонять fsck индивидуально для каждого раздела, привключении компьютера стартовыми скриптами прове-ряется наличие файла /.autofsck, который должен уда-ляться в /etc/rc.d/init.d/halt. Его наличие указывает нанекорректность выключения питания, и fsck отрабаты-вает по полной программе, а если такой файл не обна-руживается, то делается вполне справедливое предпо-ложение о нормальном завершении работы, и дискипроверяются по минимуму, тем самым ускоряя загруз-ку системы.

Но вот не всегда удается нормально завершить ра-боту, и fsck отрывается, что говорится, по полной про-грамме. Вот тут-то и кроется очевидное неудобство, со-гласитесь, что чем больше файловая система, тем доль-ше длится процесс проверки. На дисковом разделе раз-мером в несколько десятков гигабайт, что давно ужеперестало быть редкостью и тенденция к увеличениюразмеров разделов только растет, с большим количе-ством файлов и каталогов процедура проверки мета-данных во время загрузки может очень сильно затянуть-ся. Может, для домашнего компьютера это всего лишьраздражает пользователя (сколько отказываются отпроверки Scandisk при загрузке, а потом удивляются,почему в свойствах неправильно указано свободноепространство). А вот если выбило главный производ-ственный сервер и теперь пользователи вынужденыждать, пока он перегрузится? Вот так плавно челове-

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

Что такое журнал?Все колдовство журнала заключается в механизметранзакций, термин известен тем, кто работал с база-ми данных. Точно так же, как и в них, механизм тран-закций вместо отслеживания модификаций к таблицами данным рассматривает операцию записи на диск какатомарную, а не разделенную на несколько этапов, чтопозволяет отследить, прошла ли запись вообще, и всвою очередь гарантировать, что все или ни одно из-менение файловой системы не сделано. Поясню ска-занное на примере. При создании нового файла изме-няются несколько структур метаданных (inodes, спискисвободных блоков, список файлов каталога и др.).Прежде чем файловая система сделает изменения,создается транзакция, в которой описывается то, чтоона собирается сделать. Как только транзакция будетзарегистрирована (на диске), файловая система при-ступает непосредственно к изменению метаданных. Тоесть фактически журнал в journaling файловой систе-ме – просто список производимых операций. В случаесистемного сбоя файловая система будет восстанов-лена к непротиворечивому состоянию путем повторно-го запуска журнала и отката к предыдущему состоя-нию. К тому же в таком случае файловая система ос-матривает только те участки диска, в которых изменя-лись метаданные, т.е. она уже «знает», на каком учас-тке произошел сбой. Это намного быстрее, чем при тра-диционной проверке всего диска при помощи fsck. Ичто самое существенное, время восстановления, полу-чается, совсем не зависит от размера раздела, а ско-рее зависит от интенсивности операций ввода/выводана момент сбоя. Можно выделить два возможных вари-анта работы журналируемой файловой системы. В пер-вом варианте в журнал заносятся только изменяемыеметаданные файла, в таком случае при сбое будет га-рантирована целостность метаструктур файловой сис-темы, а сохранность самих данных уже зависит от ве-зучести. Второй вариант предусматривает занесение вжурнал вместе с метаданными также и самих данных,как изменившихся, так и немодифицированных, в этомслучае есть вероятность, что данные после сбоя будутвосстановлены. И конечно же, «природу не обманешь,за все нужно платить». А платить теперь приходитсябыстродействием, так как самая медленная операцияв компьютере – это операции ввода/вывода на диск,количество таких операций выросло, особенно при ис-пользовании варианта с полным журналированием дан-ных. Стараются решить данную проблему разнымиухищрениями, например, размещение журнала на дру-гом физическом диске. Да и потери невелики, ведьфактически время работы с журналом намного мень-ше, чем работа непосредственно с данными. И есте-

Page 23: 012 Системный Администратор 11 2003

2111(12), ноябрь 2003

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

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

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

Также в большинстве современных journaling-фай-ловых систем поддерживаются: более быстрое распределение свободных блоков, для

этого многие из них построены на основе сбалансиро-ванных деревьев, иначе известных как B+ деревья;

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

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

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

Ext3fsХотя данная файловая система не была первой поддер-живаемой ядром Linux официально (появилась только сверсии 2.4.16), все-таки, я думаю, справедливо будет на-чать именно с нее. Разработана она в недрах компанииRed Hat (там и следует искать все новинки о ее работе)доктором Stephen Tweedie. Найти патчи для ядра можнопо адресу ftp://ftp.linux.org.uk/pub/linux/sct/fs/jfs/. Чтобы неизобретать колесо, в данном случае поступили просто,прикрутив к стандартной ext2fs журнал. Фактически толькодобавив файл журнала (в зависимости от опций монти-рования можно и не видеть, находится в ./.journal) и заме-нив драйвер ядра, отвечающий за файловую систему, по-этому она, естественно, наследует все достоинства и не-достатки, присущие ext2fs. Но что это дало? Самое глав-ное – это то, что утилиты ext2fs, которые шлифовались втечение нескольких лет, работают в ней как ни в чем не

бывало, не замечая подмены. К тому же идентичностьфайловых систем позволяет оперативно переходить какс еxt3fs на ext2fs, так и наоборот. Поясню. Мне часто при-ходится устанавливать другие дистрибутивы, в том чис-ле и со старыми ядрами, не поддерживающими новинку.Так вот все разделы, на которых используется ext3fs, ямонтирую просто как ext2fs, и никаких, повторяю, ника-ких недоразумений при использовании не происходит.Другое преимущество данной файловой системы состо-ит в том, что она, в отличие от остальных, поддерживаетрежим журналирования данных (полное или частичное).Естественно, добавление журнала, казалось, должно ухуд-шить производительность данной системы по сравнениюс «нежурнальным» вариантом. Оказалось, что за счетулучшения алгоритма движения головки жесткого дискаданная файловая система в некоторых случаях даже об-ходит ext2fs. Ext3fs имеет три режима работы: data=writeback – режим, при котором не выполняется

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

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

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

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

Например:

или в /etc/fstab:

или если режим по умолчанию, то просто:

#mount -o data=journal -t ext3 /dev/hda5 /usr/local

/dev/hda5 /usr/local ext3 data=writeback 1 0

/dev/hda5 /usr/local ext3 defaults 1 0

Page 24: 012 Системный Администратор 11 2003

22

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

Если же теперь хочется отказаться от него, то, испра-вив ext3 на ext2, можно забыть о журнале:

Для того чтобы к обычной ext2fs добавить журнал, до-статочно выполнить команду:

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

Начиная с версии 0.9.5 ext3fs, можно использовать дру-гой диск для хранения файла журнала. Подробности мож-но узнать по адресу http://www.zipworld.com.au/~akpm/linux/ext3/ext3-usage.html.

Вот и все о данной файловой системе. Что и говорить,это предсказуемая и главное – удобная файловая систе-ма. До недавнего времени добрая половина разделовжесткого диска на моем домашнем компьютере была от-форматирована именно под ext3, но эксперименты с ла-тентностью ядра при обработке музыки убедили, что порас ней красиво расставаться (хотя доводилось слышать иполностью противоположное мнение). Плюс у нее естьеще недостаток, доставшийся по наследству, которыйпрактически полностью решен в другой файловой систе-ме. Но интересно, что в дистрибутивах RedHat програм-ма установки, несмотря на наличие стольких альтерна-тив, позволяет создать только ext2 и ext3, хотя ядро под-держивает JFS и RaiserFS. Что это – упорное продвиже-ние своей файловой системы или нежелание идти в ногус прогрессом?

ReiserFSЭто первая «сторонняя» файловая система, появивша-яся в официальном ядре, начиная с версии 2.4.4, но впервое время ее работа вызывала одни только нарека-ния, и поэтому использовали ее только любители ост-рых ощущений. Данный проект начинался в 90-х годах,первый прототип носил название TreeFS. РазработанаХансом Райзером (Hans Reiser) и его компанией Namesys(http://www.namesys.com/), причем задачи они перед со-бой поставили очень, я бы сказал, революционные. Раз-работчики системы мечтают создать не только файловуюсистему, но вообще механизм иерархического именова-ния объектов. Они считают, что лучшая файловая систе-ма та, которая формирует единую общедоступную среду,названную namespace. Для достижения этого файловаясистема должна выполнять часть работы, традиционно вы-полнявшуюся приложениями, что уменьшит количествонесовместимых API узкоспециального назначения. При та-ком подходе пользователи часто могут продолжать пря-

мое использование файловой системы вместо форми-рования уровней специального назначения типа баз дан-ных и т. п. Правда, надо отметить, что они не первые,еще при создании BeFS первоначально это было сдела-но, и с большим успехом, работа filesystem как базы дан-ных, но в конечном счете вернулись назад к атрибутам ииндексированному доступу. Некоторое движение в этомнаправлении сделано и в MacOS. При этом для добав-ления новых возможностей используется plugins. А во-обще на сайте проекта наилучшая документация из всехрассматриваемых. Но предупреждаю, ее там много. Ба-зируется файловая система на оптимизированных b* сба-лансированных деревьях (одно на файловую систему),использование которых, кроме увеличения поизводитель-ности, снимает ограничение на количество каталогов,хотите – 100 000, без проблем. Но текущая на данный мо-мент версия 3.6 поддерживает журналирование толькометаданных, хотя при необходимости полного журнали-рования можно использовать патч от Chris Mason и до-полнительно в новой версии ReiserFS v.4 release, котораябудет доступна вместе с ядром 2.6. Также будет задей-ствован подобный режим.

Главное преимущество данной файловой системыпроявляется в работе с маленькими файлами. Как я ужеговорил, информация на физическом носителе хранит-ся не как попало, а отдельными блоками, размер кото-рых зависит и от размера раздела (это связано с макси-мально возможной адресацией) в том числе (устанав-ливается при форматировании), в большинстве случаевиспользуется 4 Кб. Так вот, еxt2 (и ext3, и FAT тоже) мо-гут адресовать только целое количество блоков. Ну ичто? Имеем файл 10 Кб, размер блока 4 Кб. Получает-ся, что файл займет 2 целых блока и один только напо-ловину. 4 + 4 + 2 (и 2 осталось незанятыми, это и назы-вается внутренней фрагментацией). Для единичногофайла это нестрашно, но если их несколько тысяч? Кста-ти, Fast File System (FFS), применяемая в BSD, умеетадресовать субблоки, а во всеми любимой FAT придетсямириться с неизбежной потерей места. РазработчикиReiserFS не стали решать множество противоречивыхзадач, а остановились на одной и довели ее до конца.ReiserFS может запросто упаковывать несколько малень-ких файлов в один дисковый блок (tail packing), а совсеммаленькие вообще просто запихать в inode (внутрьb*tree). По необходимости для файла может ассигновать-ся точный размер. Такой режим работы предусмотренпо умолчанию, но для повышения быстродействия естьвозможность ее отключить. Хотя показатели ReiserFSпри работе с большими файлами также высоки, имен-но работа с маленькими файлами (меньше Кб) и обслу-живание большого их количества выделяет данную ФС.По работе с ними она превосходит по быстродействиювсе представленные файловые системы (видел цифрыв 8-15 раз) и именно за счет того, что данные и мета-данные хранятся рядом, и головке диска не придетсярыскать по всему диску. Плюс, как видите, достигает-ся значительная экономия дискового пространства.Различные источники называют ReiserFS самой устой-чивой из всех рассматриваемых ФС, ее, я думаю, мож-

# /sbin/mke2fs -j /dev/hdb5

# /sbin/tune2fs -j /dev/hdà5

/dev/hda5 /usr/local ext2 defaults 1 0

Page 25: 012 Системный Администратор 11 2003

2311(12), ноябрь 2003

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

но рекомендовать для корневого раздела, который ктому же состоит из маленьких файлов. Такая себе ра-бочая лошадка. Но для работы с данной файловой си-стемой, кроме поддержки ее самим ядром, необходи-мы также свои собственные утилиты для работы и об-служивания разделов, хотя они уже входят в стандарт-ную поставку всех современных дистрибутивов, а еслинет, то возьмите по адресу ftp://ftp.namesys.com/pub/reiserfsprogs/reiserfsprogs-3.6.4.tar.gz.

Патч к ядру для обновления версии ReiserFS можновзять с ftp://ftp.namesys.com/pub/reiserfs-for-2.4, рядомлежат патчи к ядрам версии 2.2.

Если ядро уже поддерживает ReiserFS и имеются не-обходимые утилиты, то, набрав:

можно создать на ней соответствующую файловую сис-тему. Для автоматического монтирования ее при загруз-ке достаточно прописать в файле /etc/fstab:

или

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

А опция -genericread может увеличить (а может и нет)производительность при операциях поиска файлов, т.е.когда головка мало считывает, а много перемещается подиску. И, кстати, проект Reiser4, в котором не последнееместо уделено security, поддерживается DARPA (DefenseAdvanced Research Projects Agency).

XFSОснова следующей файловой системы XFS была создана вначале 90-х (1992-1993) фирмой Silicon Grapgics (сейчас SGI)для мультимедийных компьютеров с ОС Irix, заменив уже неудовлетворявшую требованиям времени EFS, но немногоочищенная от некоторого кода GPL версия 1.0 стала дос-тупна только 1 мая 2001 года. Найти всю необходимую ин-формацию можно по адресу: http://oss.sgi.com/projects/xfs.Интересно, что «любимица» всех линуксоидов, компанияSCO, и здесь засветилась, назвав выход XFS под лицензи-ей GPL «примером ярких работ нарушения авторских прав».

Эта файловая система с самого начала была ори-ентирована на очень большие файлы (9 000 петабайт –9 миллионов терабайт – 1018 байт) и файловые системы(18 000 петабайт ), это достигается тем, что она, в отли-чие от предыдущих, является полностью 64-битной, чтопозволяет адресовать большие массивы данных. Особен-ностью этой файловой системы является устройство жур-нала – в него пишется часть метаданных самой файло-

вой системы таким образом, что весь процесс восстанов-ления сводится к копированию этих данных из журнала вфайловую систему. Размер журнала задается при созда-нии системы, он должен быть не меньше 32 Мб; а боль-ше, наверное, и не надо – такое количество незакрытыхтранзакций тяжело получить. Тесты на производитель-ность показывают бесспорное преимущество XFS, осо-бенно при работе с большими и во многих случаях сред-ними файлами. Также эту файловую систему характери-зует прямолинейность падения производительности приувеличении нагрузки и предсказуемость, дополнительноона не генерирует излишнюю дисковую активность, т.к.пытается кэшировать как можно больше данных и «осно-ванием» для сброса на диск является заполнение памя-ти, а не интервал времени, как это принято в других фай-ловых системах (кроме, наверное, ReiserFS v4). Любоедисковое устройство при создании файловой системыXFS разбивается на несколько равных по размеру линей-ных областей (0.5-4 Гб), в терминологии XFS они имену-ются «allocation group». Уникальность allocation group втом, что каждая группа управляет своими собственнымиinodes и свободным местом, что превращает группы всвоего рода автономные файловые системы, сосуществу-ющие в рамках общей XFS. Такая организация позволяетэффективно организовать параллельную обработку опе-раций ввода/вывода, которая особенно проявляется намногопроцессорных системах. В каждой такой группе ис-пользуется три В+ дерева, два из которых отвечают засвободные inodes (allocation). В этой системе реализова-на очень хорошая возможность, позволяющая избежатьфрагментации файлов, называемая delayed allocation. Приэтом файловая система, получая данные для записи, по-началу лишь резервирует под них необходимое свобод-ное место, откладывая саму запись до момента факти-ческого сброса данных. Когда же такой момент наступа-ет, то XFS решает, куда необходимо их поместить. Еслиосуществляется дозапись, то подбираются соседние сек-тора. Но наибольший эффект в такой задержке получа-ется еще за счет того, что, если создается временныйфайл с малым временем жизни, то он вообще при такомслучае на диск не пишется (соответственно не приходит-ся занимать/освобождать метаданные). Для борьбы свнешней фрагментацией (против которой борятся про-граммы типа Norton Speed Disk) имеется утилита xfs_fsr.Текущим ядром серии 2.4.* данная файловая система неподдерживается (но уже имеется в тестовых ядрах 2.6),хотя в некоторых дистрибутивах (Gentoo, Lunar Linux) онауже предлагается пользователю, поэтому необходимо схо-дить на сайт разработчика за патчем (ftp://oss.sgi.com/projects/xfs/download/) и необходимыми утилитами (какминиум xfsprogs) для работы с ней. Сейчас на сайте дос-тупен релиз 1.3. Теперь, пересобрав ядро и установив не-обходимые утилиты, можно создать файловую систему:

Для увеличения производительности в некоторых слу-чаях может помочь опция -l size=32m, фиксирующая жур-нал на 32 Мб, и с помощью -d agcount=x лучше устано-

# /sbin/mkreiserfs /dev/hda2

/dev/hda4 /home reiserfs defaults 0 0

#/sbin/mount -t /reiserfs dev/hda4 /home

/dev/hda4 /home reiserfs notail 0 0

#/sbin/mkfs.xfs /dev/hdb2 èëè mkfs -t xfs /dev/hdb2

Page 26: 012 Системный Администратор 11 2003

24

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

вить минимально возможное количество allocation groups(т.е. взяв максимально возможные 4 Гб на группу), на-пример, при разделе 18 Гб устанавливаем:

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

И прервать секунд через 10-20 комбинацией Ctr+C. Смон-тировать вновь созданный раздел теперь можно командой:

или в файле /etc/fstab:

Для повышения производительности можно задать не-которые опции noatime, nodiratime, osyncisdsync, вместепомогающие добиться асинхронного вывода информации,и практически имитировать поведение ext2, а также logbufs,устанавливающий размер буфера, имеющий значение поумолчанию, равное 2 (но, например, 8 при 128 Мб опера-тивной памяти устанавливать не стоит).

Еще в документе Linux XFS FAQ, доступном на сайтеразработчика, сказано, что на данный момент загрузка сраздела XFS поддерживается полностью загрузчикомGRUB версий 0.92 и выше, LILO же позволяет загружать-ся только при установке в MBR (Master Boot Record), приустановке в корневой раздел есть вероятность, что заг-рузиться не получится. В CVS доступны утилиты xfsdumpи xfsrestore, позволяющие сохранить и при необходимос-ти восстановить образ раздела диска. Остальную инфор-мацию посмотрите в каталоге /usr/src/linux/Documentation/filesystems xfs.txt. Как установить XFS в корневой раз-дел, можно посмотреть в документе Linux+XFS-HOWTO(http://www.linuxdoc.org/HOWTO/Linux+XFS-HOWTO/).

JFS (Journaled File System)Создана фирмой IBM для своей OS/2 Warp, а затем вы-пущена по лицензии GPL и портирована под Linux. Всюнеобходимую информацию можно получить по адресуhttp://oss.software.ibm.com/jfs. По своим характеристиками архитектуре очень схожа с предыдущей, поэтому под-робно останавливаться на них не буду. Подобно преды-дущей в этой файловой системе раздел логически под-разделяется на «агрегаты», включающие, кроме данных,и отдельный журнал, и каждый из таких сегментов можномонтировать отдельно. Также имеется возможность хра-

нения маленьких файлов в пределах inode. Если каталогимеет до 8 файлов, то информация о них содержится внут-ри inode, при увеличении же их количества используютсяуже знакомые B+ деревья. Для уcтановки необходимы ути-лита jfsutils, патч к ядру jfs-2.4.х-patch и код файловой си-стемы jfs-2.4-1.0.20.tar.gz, хотя вероятно, что поддержкаданной файловой системы в ядре уже имеется. Послеустановки и компиляции всех программ для создания раз-дела достаточно выполнить команду:

и смонтировать ее:

Для возможности работы с внешним журналом необ-ходимо создать два неиспользуемых раздела, например:

или в /etc/fstab:

Напоследок хочу отметить, что все описываемые фай-ловые системы на данный момент поддерживают уста-новку на Soft-RAID и LVM, при наложении соответствую-щих патчей возможно применение ACL.

Как видите, ОС Linux предоставляет пользователю воз-можность выбрать даже файловую систему, оптимизиро-ванную под конкретные задачи. И самое главное, не обя-зательно, чтобы была установлена только одна из этихфайловых систем. Но вот однозначно сказать, что такаяфайловая система намного лучше, я не могу. Как вы по-нимаете, все зависит от конкретной задачи, ведь прило-жения, которые используются на сервере, могут отличать-ся. Но для раздела /boot лучшим решением будет ext2,для корневого раздела, состоящего из мелких файлов –ReiserFS. Для сравнения приведу результат теста Linux:Benchmarking Filesystems In 2.6.0-test2, найденный мнойна странице http://kerneltrap.org/node/view/715. Там же мож-но найти и мнения различных людей по поводу получен-ных результатов.

При записи и копировании каталога (mozilla buildtree) размером 295 Мб файловые системы показалитакой результат, который, я думаю, в комментариях ненуждается.

Литература:Серия статей Advanced filesystem implementor’s guideDaniel Robbins: http://www-106.ibm.com/developerworks/linux/library/l-fs1/, перевод которых можно найти на сай-те http://www.softerra.ru/.

# dd if=/dev/zero of=/dev/hdb2

# mount -t xfs =/dev/hdb2 /home

/dev/hdb2 /home xfs defaults 0 0

/dev/hdb2 /home xfs noatime, nodiratime, ↵osyncisdsync, logbufs=4 0 0

# mkfs.jfs /dev/hdb3

# mount -t jfs /dev/hdb3 /jfs

# mkfs.jfs -j /dev/hdb1 /dev/hda6# mount -t jfs /dev/hda6 /jfs

/dev/hda6 /jfs jfs defaults 1 2

#/sbin/mkfs.xfs -d agcount=5 -l size=32m -f /dev/hdb2

Page 27: 012 Системный Администратор 11 2003
Page 28: 012 Системный Администратор 11 2003

26

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

АРХИТЕКТУРАФАЙЛОВОЙСИСТЕМЫEXT2

ВЛАДИМИР МЕШКОВ

В статье рассматривается логическая структура ext2 – файловой системы операционной системы Linux.

Page 29: 012 Системный Администратор 11 2003

2711(12), ноябрь 2003

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

Основные компонентыфайловой системы ext2Как и в любой файловой системе UNIX, в составе файловойсистемы ext2 можно выделить следующие составляющие: блоки и группы блоков; информационный узел (information node); суперблок (superblock).

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

Информационный узелБазовым понятием файловой системы является инфор-мационный узел, information node, или inode. Это специ-альная структура, которая содержит информацию об ат-рибутах и физическом расположении файла. Атрибутамифайла являются его тип (обычный файл, каталог и т. д.),права доступа к нему, идентификатор владельца, размер,время создания. Информация о физическом расположе-нии представляет собой последовательность абсолютныхномеров блоков, содержащих данные файла.

СуперблокСуперблок – основной элемент файловой системы ext2.Он содержит следующую информацию о файловой сис-теме (список неполный): общее число блоков и inode в файловой системе; число свободных блоков и inode в файловой системе; размер блока файловой системы; количество блоков и inode в группе; размер inode; идентификатор файловой системы; номер первого блока данных.

Другими словами, это номер блока, содержащего су-перблок. Этот номер всегда равен 0, если размер блокафайловой системы больше 1024 байт, и 1, если размерблока равен 1024 байт.

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

Ранние версии файловой системы ext2 создавали ко-пии суперблока в начале каждой группы блоков. Это при-водило к большим потерям дискового пространства, по-этому позже количество резервных копий суперблокабыло уменьшено, и для их размещения были выделеныгруппы блоков 0, 1, 3, 5 и 7.

Ðèñóíîê 1. Îáîáùåííàÿ ñòðóêòóðíàÿ ñõåìà ôàéëîâîé ñèñòåìû ext2

Page 30: 012 Системный Администратор 11 2003

28

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

Формат группы блоковОбобщенная структурная схема файловой системы ext2представлена на рис. 1.

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

Битовая карта занятости блоков обычно расположенав первом блоке группы. Если в группе присутствует ре-зервная копия суперблока, битовая карта располагаетсяво втором блоке группы. Размер битовой карты – одинблок. Каждый бит этой карты обозначает состояние бло-ка. Если бит установлен (1), то блок занят, если сброшен(0) – блок свободен. Первому блоку группы соответству-ет нулевой бит карты, второму блоку – первый бит и т. д.

Inode, находящиеся в пределах одной группы, собра-ны в таблицу. В битовой карте занятости inode группыкаждый бит характеризует состояние элемента в табли-це inode группы.

Каждая группа блоков описывается при помощи деск-риптора группы блоков. Дескриптор группы – это струк-тура, которая содержит информацию об адресах битовойкарты занятости блоков, битовой карты занятости inode итаблицы inode соответствующей группы. Все дескрипто-ры групп собраны в таблицу дескрипторов групп, котораяхранится в группе блоков 0. Так же, как и для суперблока,операционная система создает резервные копии табли-цы дескрипторов групп.

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

Как было сказано выше, информация о физическомрасположении файла содержится в inode. Эта информа-ция представляет собой последовательность 32-битныхномеров блоков, содержащих данные файла (рис. 1). Пер-вые 12 номеров – это прямые ссылки на информацион-ные блоки (direct blocks number). 13-й номер является кос-венной ссылкой (indirect blocks number). В нем находитсяадрес блока, в котором хранятся адреса информацион-ных блоков. 14-й номер – двойная косвенная ссылка(double blocks number), 15-й номер – тройная косвеннаяссылка (triple blocks number).

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

КаталогиФайлы в UNIX- и POSIX-системах хранятся в древовид-ной иерархической файловой системе. Корень файло-вой системы – это корневой каталог, обозначенный сим-волом «/». Каждый промежуточный узел в дереве фай-ловой системы – это каталог. Конечные вершины дере-ва файловой системы являются либо пустыми каталога-

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

Каталог, так же как и файл, описывается при помощиinode. Содержимое каталога представляет собой массивзаписей, каждая из которых содержит информацию офайле, который находится «внутри» текущего каталога.

Запись каталога имеет следующий формат: порядковый номер inode файла; длина записи в байтах; имя файла; длина имени файла.

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

Несколько первых номеров inode зарезервированыфайловой системой, их перечень содержится в заголо-вочном файле <linux/ext2_fs.h>:

Для записи корневого каталога зарезервирован inodeпод номером 2 (root inode). Этот inode находится в группеблоков 0 и занимает вторую позицию в таблице inode этойгруппы. Номер первого незарезервированного inode хра-нится в суперблоке.

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

Номер группы блоков, в которой расположен inode,вычисляется по формуле:

где: group – искомый номер группы блоков; inode_num – порядковый номер inode, определяюще-

го файл; inodes_per_group – число inode в группе (эта инфор-

мация находится в суперблоке).

Позиция inode в таблице inode группы определяетсяпо формуле:

/* * Special inode numbers */#define EXT2_BAD_INO 1 /* Bad blocks inode */#define EXT2_ROOT_IN 2 /* Root inode */#define EXT2_ACL_IDX_IN 3 /* ACL inode */#define EXT2_ACL_DATA_INO 4 /* ACL inode */#define EXT2_BOOT_LOADER_INO 5 /* Boot loader inode */#define EXT2_UNDEL_DIR_INO 6 /* Undelete directory inode */

group = (inode_num - 1) / inodes_per_group

Page 31: 012 Системный Администратор 11 2003

2911(12), ноябрь 2003

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

где index – позиция inode в таблице.Рассмотрим пример получения содержимого файла

test.file, находящегося в корневом каталоге. Для чтенияфайла /test.file необходимо: в массиве записей корневого каталога найти запись

об этом файле; извлечь порядковый номер inode файла, вычислить но-

мер группы, в которой этот inode расположен; из дескриптора данной группы извлечь адрес табли-

цы inode группы; вычислить позицию inode в этой таблице; считать inode файла; из inode извлечь адреса информационных блоков и

осуществить чтение информации, находящейся в этихблоках.

На рис. 2 подробно показаны этапы чтения файла /test.file.Этапы 1-6 – чтение корневого каталога:

1. Из группы блоков 0 считывается таблица дескрипто-ров групп.

2. Из таблицы дескрипторов групп извлекается дескрип-тор группы блоков 0 и из него считывается адрес таб-лицы inode группы 0.

3. Из группы блоков 0 считывается таблица inode.4. Порядковый номер inode корневого каталога фик-

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

5. Из группы блоков A считывается блок, содержащийзаписи корневого каталога.

6. Выполняется поиск записи с именем «test.file». Еслитакая запись найдена, из нее извлекается порядковыйномер inode файла «test.file».

Определив номер inode, можно получить доступ к ин-формационным блокам файла (этапы 7-11):

7. Вычисляется номер группы, в которой находится данныйinode, и его позицию в таблице inode группы (предполо-жим, что номер группы равен B, а позиция в таблице – X).

8. Из таблицы дескрипторов групп извлекаем дескрип-тор группы блоков B, и из него считывается адрес таб-лицы inode этой группы блоков.

9. Из группы блоков B считывается таблица inode.10.Из таблицы inode группы блоков B считывается inode,

находящийся в позиции X.11.Из считанного inode извлекаются адреса блока с со-

держимым файла /test.file и выполняется чтение ин-формации из блока с указанным адресом.

Программная реализацияалгоритма чтения файлаИсходные данные: имеется раздел жесткого диска, на ко-тором создана файловая система ext2. Этому разделусоответствует файл устройства /dev/hda3. В корневомкаталоге раздела создан подкаталог home, а в нем нахо-дится файл test.file следующего содержания:

index = (inode_num - 1) % inodes_per_groupe

Ðèñóíîê 2. Ïîðÿäîê âûïîëíåíèÿ ïðîöåäóðû ÷òåíèÿ ôàéëà â ôàéëîâîé ñèñòåìå ext2 (íà ïðèìåðå ôàéëà /test.file)

 ÷àùàõ þãà æèë áû öèòðóñ? Äà, íî ôàëüøèâûé ýêçåìïëÿð! 1234567890-=

Page 32: 012 Системный Администратор 11 2003

30

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

Не подумайте плохого, это не бред, а тестовое упраж-нение из курса подготовки телеграфистов в войсках свя-зи бывшего СССР!

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

Наша задача – используя файл устройства /dev/hda3,осуществить чтение файла /home/test.file методом прямогодоступа к его информационным блокам.

Рассмотрим программную реализацию модуля, выпол-няющего эту операцию.

Заголовочные файлы:

В заголовочном файле <linux/ext2_fs.h> определеныструктурные типы, описывающие основные компонентыфайловой системы ext2 – суперблок, дескриптор группыблоков, информационный узел, запись каталога.

Рассмотрим кратко поля, которые входят в каждую изэтих структур:1. Структура суперблока struct ext2_super_block: __u32 s_inodes_count – общее число inode в файло-

вой системе; __u32 s_blocks_count – общее число блоков в файло-

вой системе; __u32 s_free_blocks_count – количество свободных бло-

ков; __u32 s_free_inodes_count – количество свободных inode; __u32 s_first_data_block – номер первого блока дан-

ных (номер блока, в котором находится суперблок); __u32 s_log_block_size – это значение используется для

вычисления размера блока. Размер блока определя-ется по формуле: block size = 1024 << s_log_block_size;

__u32 s_blocks_per_group – количество блоков в группе; __u32 s_inodes_per_group – количество inode в группе; __u16 s_magic – идентификатор файловой системы

ext2 (сигнатура 0xEF53); __u16 s_inode_size – размер информационного узла

(inode); __u32 s_first_ino – номер первого незарезервирован-

ного inode.

2. Структура дескриптора группы блоков structext2_group_desc:

__u32 bg_block_bitmap – битовая карта занятости бло-ков группы;

__u32 bg_inode_bitmap – битовая карта занятости inodeгруппы;

__u32 bg_inode_table – адрес таблицы inode группы.

3. Структура информационного узла struct ext2_inode: __u16 i_mode – тип файла и права доступа к нему. Тип

файла определяют биты 12-15 этого поля: 0xA000 – символическая ссылка; 0x8000 – обычный файл; 0x6000 – файл блочного устройства; 0x4000 – каталог; 0x2000 – файл символьного устройства; 0x1000 – канал FIFO.

__u32 i_size – размер в байтах; __u32 i_atime – время последнего доступа к файлу; __u32 i_ctime – время создания файла; __u32 i_mtime – время последней модификации; __u32 i_blocks – количество блоков, занимаемых фай-

лом; __u32 i_block[EXT2_N_BLOCKS] – адреса информаци-

онных блоков (включая все косвенные ссылки).

Значение EXT2_N_BLOCKS определено в файле<linux/ext2_fs.h>:

4. Структура записи каталога struct ext2_dir_entry_2:

__u32 inode – номер inode файла; __u16 rec_len – длина записи каталога; __u8 name_len – длина имени файла; char name[EXT2_NAME_LEN] – имя файла.

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

Определим несколько функций, которые нам понадо-бятся для работы:

Функция чтения суперблока:

Смещаемся на 1024 байта от начала раздела и считы-ваем суперблок в структуру struct ext2_super_block sb:

#include <stdio.h>#include <sys/types.h>#include <fcntl.h>#include <unistd.h>#include <errno.h>#include <linux/ext2_fs.h> /*

* Constants relative to the data blocks */#define EXT2_NDIR_BLOCKS 12#define EXT2_IND_BLOCK EXT2_NDIR_BLOCKS#define EXT2_DIND_BLOCK (EXT2_IND_BLOCK + 1)#define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK + 1)#define EXT2_N_BLOCKS (EXT2_TIND_BLOCK + 1)

#define EXT2_NAME_LEN 255

#define PART_NAME "/dev/hda3"

struct ext2_super_block sb;/* áóôåð äëÿ õðàíåíèÿ òàáëèöû äåñêðèïòîðîâ ãðóïï */unsigned char buff_grp[4096];unsigned char buff[4096]; /* èíôîðìàöèîííûé áóôåð */int indev; /* äåñêðèïòîð ôàéëà óñòðîéñòâà */int BLKSIZE; /* ðàçìåð áëîêà ôàéëîâîé ñèñòåìû */

void read_sb()

memset(&sb,0,1024);

if(lseek(indev,1024,0) < 0) perror("lseek");exit(-1);

Page 33: 012 Системный Администратор 11 2003

3111(12), ноябрь 2003

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

Проверяем идентификатор файловой системы:

Значение EXT2_SUPER_MAGIC определено в заголо-вочном файле <linux/ext2_fs.h>.

Отображаем информацию о файловой системе, кото-рая находится в суперблоке:

Функция чтения таблицы дескрипторов групп:

Вычисляем размер блока файловой системы:

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

Считываем таблицу:

Функция получения содержимого inode по его номеру:

Входные параметры функции – порядковый номерinode и структура struct ext2_inode.

Вычисляем номер группы блоков, в которой находит-ся inode с порядковым номером inode_num:

Из таблицы дескрипторов групп извлекаем дескрип-тор группы group и копируем его в структуру structext2_group_desc gd:

Вычисляем позицию inode c порядковым номеромinode_num в таблице inode группы group и считываем этотinode в структуру struct ext2_inode:

Функция чтения блока данных:

Входные параметры функции – структура inode и но-мер блока (имеется в виду номер из последовательностиадресных блоков, расположенных в inode).

Вычисляем смещение к информационному блоку наразделе и считываем этот блок в глобальный буфер buff:

Функция получения содержимого корневого каталога:

Порядковый номер inode корневого каталога известен,поэтому получаем содержимое inode корневого каталогаи считываем в буфер buff его содержимое:

В буфере buff будет находиться содержимое корнево-го каталога.

Функция получения номера inode по имени файла:

Входные параметры функции – имя файла. Возвра-щаемое значение – порядковый номер inode файла.

В буфере buff находится массив записей каталога. Дляопределения порядкового номера inode файла необходи-

if(read(indev,(char *)&sb,sizeof(sb)) < 0)

perror("read");exit(-1);

if(sb.s_magic != EXT2_SUPER_MAGIC) printf("Íåèçâåñòíûé òèï ôàéëîâîé ñèñòåìû!\n");exit(-1);

printf("\nSuperblock info\n-----------\n");printf("Inodes count\t\t-\t%u\n",sb.s_inodes_count);printf("Blocks count\t\t-\t%u\n",sb.s_blocks_count);printf("Block size\t\t-\t%u\n",1024 << sb.s_log_block_size);printf("First inode\t\t-\t%d\n",sb.s_first_ino);printf("Magic\t\t\t-\t0x%X\n",sb.s_magic);printf("Inode size\t\t-\t%d\n",sb.s_inode_size);printf("Inodes per group\t-\t%u\n",sb.s_inodes_per_group);printf("Blosks per group\t-\t%u\n",sb.s_blocks_per_group);printf("First data block\t-\t%u\n\n",sb.s_first_data_block);

return;

void read_gdt()

BLKSIZE = 1024 << sb.s_log_block_size

if(lseek(indev, (sb.s_first_data_block + 1) * BLKSIZE, 0) < 0) perror("lseek");exit(-1);

if(read(indev,buff_grp,BLKSIZE) < 0)

perror("read");exit(-1);

return;

void get_inode(int inode_num, struct ext2_inode *in)

struct ext2_group_desc gd;__u64 group, index, pos;

group = (inode_num - 1) / sb.s_inodes_per_group;

memset((void *)&gd, 0, sizeof(gd));memcpy((void *)&gd, buff_grp + (group * (sizeof(gd))), ↵

sizeof(gd));

index = (inode_num - 1) % sb.s_inodes_per_group;pos = ((__u64)gd.bg_inode_table) * BLKSIZE + ↵

(index * sb.s_inode_size);pread64(indev, in, sb.s_inode_size, pos);

return;

void read_iblock(struct ext2_inode *in, int blk_num)

__u64 pos;

pos = ((__u64)in->i_block[blk_num]) * BLKSIZE;pread64(indev, buff, BLKSIZE, pos);

return;

void get_root_dentry()

struct ext2_inode in;

get_inode(EXT2_ROOT_INO, &in);read_iblock(&in, 0);

return;

int get_i_num(char *name)

int i = 0, rec_len = 0;struct ext2_dir_entry_2 dent;

Page 34: 012 Системный Администратор 11 2003

32

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

мо найти в этом массиве запись с именем этого файла:

А теперь распишем главную функцию:

Переменные и структуры:

Первым символом в абсолютном путевом имени фай-ла должен быть прямой слэш (/). Проверяем это:

Открываем файл устройства, считываем суперблок итаблицу дескрипторов групп:

Получаем содержимое корневого каталога:

Сейчас в буфере buff находятся все записи корневогокаталога (если хотите, можете сохранить их в отдельномфайле). Теперь, имея записи корневого каталога, мы мо-жем добраться до содержимого файла test.file, используявышеприведенный алгоритм чтения файла. С этой цельюорганизуем цикл. В теле цикла проведем разбор абсолют-ного путевого имени файла, выделяя его элементы – под-каталоги (он у нас один, home) и имя искомого файла(test.file). Для каждого элемента определим порядковыйномер inode, считаем этот inode и затем получим содер-жимое нулевого блока (из последовательности адресныхблоков, находящихся в inode):

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

Отобразим информацию о файле (имя, порядковыйномер inode, размер файла и его тип):

Тип файла определяют старшие четыре бита поляi_mode структуры struct ext2_inode:

Проверяем тип файла. Если это обычный файл – пре-рываем цикл:

В буфере buff будет находиться информация, считан-ная из информационных блоков файла /home/test.file. За-пишем эту информацию в файл:

Выходим:

На этом рассмотрение логической структуры файло-вой системы ext2 завершим.

Ссылки:1. http://www.nongnu.org/ext2-doc2. http://e2fsprogs.sourceforge.net/ext2intro.html

for(; i < 700; i++) memcpy((void *)&dent, (buff + rec_len), sizeof(dent));if(!memcmp(dent.name, name, dent.name_len)) break;rec_len += dent.rec_len;

return dent.inode;

int main()

struct ext2_inode in;// àáñîëþòíîå ïóòåâîå èìÿ ôàéëàunsigned char *full_path = "/home/test.file";unsigned char buff1[EXT2_NAME_LEN];

static int i = 1;int n, i_num, outf, type;

if(full_path[0] != '/') perror("slash");exit(-1);

indev = open(PART_NAME,O_RDONLY);if(indev < 0)

perror("open");exit(-1);

read_sb();read_gdt();

get_root_dentry();

while(1)

memset(buff1,0,sizeof(buff1));

for(n = 0 ; n < EXT2_NAME_LEN; n++, i++) buff1[n] = full_path[i];if((buff1[n] == '/') || (buff1[n] == '\0'))

i++;break;

buff1[n] = '\0';

i_num = get_i_num(buff1);get_inode(i_num, &in);read_iblock(&in, 0);

printf("Inode number - %u\n", i_num);printf("File name - %s\n", buff1);printf("File size - %u\n",in.i_size);

type = ((in.i_mode & 0xF000) >> 12);printf("Type - %d ",type);

switch(type) case(0x04) :

printf("(êàòàëîã)\n\n");break;

case(0x08) :printf("(îáû÷íûé ôàéë)\n\n");break;

case(0x06) :printf("(ôàéë áëî÷íîãî óñòðîéñòâà)\n\n");break;

case(0x02) :printf("(ôàéë ñèìâîëüíîãî óñòðîéñòâà)\n\n");break;

default:printf("(unknown type)\n");break;

if(type & 0x08)

outf = open("out",O_CREAT|O_RDWR,0600);write(outf, buff, sizeof(buff));close(outf);break;

close(indev); return 0;

Page 35: 012 Системный Администратор 11 2003

3311(12), ноябрь 2003

Sql-инъекция и неавторизованный доступв Spaiz-Nuke и PHP-nukeПрограмма: Spaiz-Nuke версии <= 1.2beta, PHP-nuke всеверсии.Опасность: Высокая.Описание: Несколько уязвимостей обнаружено в Spaiz-Nukeи PHP-nuke. Удаленный пользователь может выполнить про-извольный Sql-код на уязвимой системе. Удаленный пользо-ватель может получить доступ к системе без пароля. Внедрение Sql-кода в модуле администрирования.

Уязвимость обнаружена в сценарии auth.php в функциипроверки логина и пароля. Атакующий может получить за-шифрованный пароль администратора. Отсутствие про-верки ввода обнаружено в переменной $aid, содержащейлогин для авторизации. Используя кавычку, можно пере-направить вывод в произвольный файл на сервере.Эксплоит: www.site.com/admin.php?op=login&pwd=123&aid=Admin’%20INTO%20OUTFILE%20'/path_to_file/pwd.txtПроверялось только на Spaiz-Nuke. После ввода даннойстроки в браузере на уязвимом сервере будет создан файл/path_to_file/pwd.txt, содержащий зашифрованный парольдля логина «Admin».Решение: Включите magic_quotes_gpc в файле php.ini. Внедрение Sql-кода в модуле web_links.

Отсутствие проверки ввода обнаружено в переменной $cidв модуле web-links. Атакующий может внедрить произволь-ный Sql-код.Эксплоит: показывает пример получения логинов и за-шифрованных паролей администраторов движка. Рабо-тает на БД, поддерживающих команду UNION (mysql > 4).Для других БД необходимо изменять вид sql-запроса.

1. Для php-nukeДанная строка выдаст все логины: www.site.com/modules.php?name=Web_Links&l_op=viewlink&cid=2%20UNION%20select%20counter,%20aid,%20pwd%20FROM%20nuke_authors%20—Данная строка выдаст все зашифрованные пароли:www.site.com/modules.php?name=Web_Links&l_op=viewlink&cid=2%20UNION%20select%20counter,%20pwd,%20aid%20FROM%20nuke_authors%20—

2. Для Spaiz-NukeИзменить nuke_authors в строке на spnuke_authors.

3. Внедрение Sql-кода в модуле download *Для PHP-nuke: www.site.com/modules.php?name=Downloads&d_op= viewdownload&cid=2%20UNION%20select%20counter,%20aid,%20pwd%20FROM%20nuke_authors%20—Для Spaiz-Nuke так же, как и в предыдущем случае.

4. Доступ без расшифровки пароляПароли данного движка шифруются с помощью алгорит-ма md5, однако атакующий может получить доступ, дажене зная расшифрованного пароля. Сначала следует зашиф-ровать полученные логин и зашифрованный md5-пароль спомощью алгоритма base64. Сделать это можно, например,здесь:http://www.isecurelabs.com/base64.php

Шифруем этим алгоритмом следующую строку:

где login=логин, crypt_passwd=зашифрованный пароль.Получаем хеш. Теперь можно получить доступ к пане-

ли администрирования, используя следующий URL:www.site.com/admin.php?admin=ваш_хэш

Вручную использование данной уязвимости немного не-удобно, поэтому был написан эксплоит, позволяющий доба-вить нового администратора со всеми правами. Посмотретьэксплоит можно здесь: http://rst.void.ru/download/r57nuke.txtURL производителя: http://www.php-nuke.orgРешение: Способов устранения обнаруженной уязвимо-сти не существует в настоящее время.

login:crypt_passwd:

Удаленное переполнение буферав Washington University FTP daemon (Wu-FTPd)Программа: Wu-FTPd version 2.6.2 (с поддержкой SKEY).Опасность: Высокая.Описание: Переполнение буфера обнаружено в WashingtonUniversity FTP daemon (Wu-FTPd). Удаленный атакующийможет выполнить произвольный код на уязвимом серверес root-привилегиями.

Переполнение стекового буфера обнаружено в коде,который обрабатывает SKEY-идентификацию в Wu-FTPd-сервере. Представляя специально обработанные опозна-вательные мандаты, удаленный атакующий может ава-рийно завершить работу демона или выполнить произ-вольный код с root-привилегиями. Переполнение распо-ложено в функции skey_challenge() в src/ftpd.c файле:

в коде не проверяются размеры параметра *name. Уязви-мы системы, поддерживающие SKEY-идентификацию.URL производителя: http://www.wuftpd.org/Решение: Отключите поддержку SKEY или применитеследующий патч:

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

char *skey_challenge(char *name, struct passwd *pwd, intpwok)

$ $ static char buf[128]; ... if (pwd == NULL || skeychallenge(&skey, pwd->pw_name,

sbuf)) $ sprintf(buf, "Password required for %s.", name); else sprintf(buf, "%s %s for %s.", sbuf, pwok ? "allowed" : "required", name); return (buf);

% diff -u ftpd.c fixed-ftpd.c --- ftpd.c 2001-11-29 17:56:11.000000000 +0100 +++ fixed-ftpd.c 2003-10-20 20:43:58.000000000 +0200 @@ -1662,9 +1662,9 @@ /* Display s/key challenge where appropriate. */

if (pwd == NULL || skeychallenge(&skey, pwd->pw_name, sbuf)) - sprintf(buf, "Password required for %s.", name); + snprintf(buf, 128-1, "Password required for %s.", name);

else - sprintf(buf, "%s %s for %s.", sbuf, + snprintf(buf, 128-1, "%s %s for %s.", sbuf,

pwok ? "allowed" : "required", name);return (buf);

%

bugtraq

3311(12), ноябрь 2003

Page 36: 012 Системный Администратор 11 2003

34

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

МАРК КРИЧМАР

Page 37: 012 Системный Администратор 11 2003

3511(12), ноябрь 2003

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

О настройках самого сервера LDAP написано достаточ-но много, поэтому останавливаться на этом не буду. Ин-теграция службы каталогов с разными службами осве-щена тоже достаточно подробно, см., например: http://www.linuxrsp.ru/artic/LDAP-HOWTO.html.

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

В данный момент подобная конфигурация работает наплатформе Dell PowerEdge 2500, операционная система LinuxRHAS release 2.1 (Pensacola). Тестировалось на различныхверсиях RH Linux, на других дистрибутивах *NIX-like системне пробовал, но затруднений возникнуть не должно.

Итак, начнем. Задача достаточно проста – заставитьSQUID не только авторизовать пользователей, но и за-быть, наконец, об acl-листах, в которых описаны группы.Согласитесь, приятней добавить пользователя в опреде-ленную группу LDAP и все, а пользователь получает по-чтовый ящик и доступ в Интернет через proxy-сервер.Причем ничего не надо перезапускать.

Первым делом скачиваем свежую версию SQUID, ярассматриваю на примере SQUID-2.5.STABLE2.tar.gz.

Распаковываем:

Переходим в созданный каталог с исходниками proxy-сервера и начинаем собирать:

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

Последний ключ --enable-basic-auth-helpers=LDAP, соб-ственно, и указывает кэширующему серверу SQUID, чтопроверку пары логин-пароль на предмет правильности онпоручает внешней программе.

Ключ --enable-external-acl-helper=ldap_group необхо-дим, чтобы группы в LDAP соотносились с группами в по-нимании SQUID.

Далее, следуя INSTALL:

Копируем 2 файла:

Переходим во вновь созданное дерево кэширующегосервера SQUID, в моем случае /usr/local/squid/sbin:

Создаем кэш:

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

Следующая строчка заставляет кэширующий сервердоверять авторизацию внешней программе.

Понятно, что всё пишется на одной строке.Другие auth_param нужно закомментировать.Теперь пояснения по поводу параметров:

-P – оставлять соединение с LDAP-сервером откры-тым, для большого числа пользователей, для малогочисла, LDAP смысла поднимать нет;

-b – с чего начинать поиск, в моем случае – с самоговерха;

-f – применить (&(uid=%s)(description=active)) данныйфильтр, для проверки пары логин-пароль. В жизни при-ходится сталкиваться с тем, что необходимо лишитьпользователя доступа к Интернету, но не удалять жеиз-за этого его запись, тем более, мы не запрещаемему пользоваться почтой, которая тоже работает че-рез LDAP. Поэтому я и использовал поле description вLDAP для своих нужд.

Небольшое пояснение по поводу пары логин-пароль, это,как вы уже догадались, два поля в LDAP: uid и userpassword,логин и пароль соответственно.

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

И последний параметр -h 127.0.0.1, где, собственно,запущен LDAP-сервер, в данном случае на одной маши-не с кэширующим сервером.

Следующая строчка в файле squid.conf настраиваеткэширующий сервер на поддержку внешних групп, такназываемых acl-листов.

Опять же все на одной строке.Ключи -P, -b и -f, -h имеют те же значения, что и выше.

Ключ -p – порт, который слушает LDAP-сервер, этот па-раметр можно опустить, если используется стандартныйпорт.

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

tar zxvf SQUID-2.5.STABLE2.tar.gz

./configure --enable-delay-pools ↵--enable-cache-err-language=Russian-1251 ↵

--enable-linux-netfilter ↵--enable-external-acl-helper=ldap_group ↵

--enable-basic-auth-helpers=LDAP

make allmake install

cp helpers/basic_auth/LDAP/squid_ldap_auth ↵/usr/local/squid/libexec

cp helpers/external_acl/ldap_group/squid_ldap_group ↵/usr/local/squid/libexec

cd /usr/local/squid/sbin

./squid –z

auth_param basic program ↵/usr/local/squid/libexec/squid_ldap_auth –P ↵–b dc=mydomain,dc=ru ↵–f (&(uid=%s)(description=active)) –h 127.0.0.1

external_acl_type ldap_group %LOGIN ↵/usr/local/squid/libexec/squid_ldap_group –P ↵–b dc=mydomain,dc=ru ↵–f (&(uid=%v)(member=ou=%a,dc=mydomain,dc=ru)) ↵–h 127.0.0.1 –p 389

Page 38: 012 Системный Администратор 11 2003

36

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

этом случае у каждого пользователя появляется обяза-тельное поле member.

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

Ну и наконец, описываю сами группы, механизм тотже самый, что и при стандартном описании, сравним:

Старое:

Новое:

Далее все как обычно:

и так далее.Описание стандартных настроек кэширующего серве-

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

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

жание:

Затем создаем файл example.ldif с описанием корне-вого дерева и групп пользователей, например, такого со-держания:

acl users proxy_auth dima petya vasyaauthenticate_program /usr/local/squid/bin/ncsa_auth ↵

/usr/local/squid/etc/passwd

acl users external ldap_group accountsacl admin external ldap_group adminacl icq_only external ldap_group icq

http_access allow admin

#include /usr/local/etc/openldap/schema/core.schemainclude /usr/local/etc/openldap/schema/cosine.schemainclude /usr/local/etc/openldap/schema/inetorgperson.schemainclude /usr/local/etc/openldap/schema/nis.schema#Ýòà ñõåìà äëÿ ïîääåðæêè qmailinclude /usr/local/etc/openldap/schema/qmail.schema

pidfile /usr/local/var/slapd.pidargsfile /usr/local/var/slapd.args

# ïîëå userPassword ëåæèò ïàðîëü ïîëüçîâàòåëÿ. Åãî ìîæåò#ïðî÷èòàòü è èçìåíèòü òîëüêî ñàì ïîëüçîâàòåëü, íó è ñåáÿ#ëþáèìîãî íå çàáûë.access to attr=userPassword

by self writeby anonymous authby dn="cn=Manager,dc=mydomain,dc=ru" writeby * none

#Åñëè â ýòîì ïîëå active – Èíòåðíåò åñòü, èíà÷å – íåòaccess to attr=description

by self readby anonymous readby dn="cn=Manager,dc= mydomain,dc=ru" writeby * none

#Íà îäíîé ñòðî÷êåaccess to attr=title,ou,telephoneNumber,cn,sn,givenName,o, ↵

initials,physicalDeliveryOfficeName,destinationIndicatorby self writeby anonymous readby users readby dn="cn=Manager,dc= mydomain,dc=ru" write

access to *by self readby anonymous readby users readby dn="cn=Manager,dc= mydomain,dc=ru" write

database ldbmsuffix "dc= mydomain,dc=ru"rootdn "cn=Manager,dc= mydomain,dc=ru"rootpw secret

#Êîðåíü íàøåãî äåðåâà äèðåêòîðèédn: dc=mydomain,dc=ruobjectClass: top

#Ãðóïïà àäìèíîâdn: ou=admin,dc=mydomain,dc=ruobjectClass: topobjectClass: organizationalUnitou: admin

#Ãðóïïà äëÿ ïîëüçîâàòåëåé icqdn: ou=icq,dc=mydomain,dc=ruobjectClass: topobjectClass: organizationalUnitou: icq

#Ãðóïïà äëÿ ïðîñòûõ ïîëüçîâàòåëåédn: ou=accounts,dc=mydomain,dc=ruobjectClass: topobjectClass: organizationalUnitou: accounts

#Äîáàâëÿåì 1 ïîëüçîâàòåëÿ â ãðóïïó admindn: uid=boss,ou=admin,dc=mydomain,dc=ruobjectClass: topobjectClass: personobjectClass: organizationalPersonobjectClass: inetOrgPerson#Ýòî äëÿ QmailobjectClass: qmailUser#Îáÿçàòåëüíûé êëàññ, ÷òîáû ïîÿâèëîñü ïîëå memberobjectClass: groupOfNames#Åñëè active òî âñå ïó÷êîì:)description: active#Ñþäà ÿ çàáèâàþ âðåìÿ ñîçäàíèÿ äàííîé çàïèñè, íà âñÿêèé ñëó÷àédestinationIndicator: 01.02.03#Çäåñü ÿ óêàçûâàþ ëèìèò â áàéòàõ, êîòîðûé óñòàíîâëåí#äëÿ äàííîãî ïîëüçîâàòåëÿpreferredLanguage: 50000000#Ýòî ïîëå òîëüêî äëÿ QmailaccountStatus: active#Èìåííî ïî ýòîìó ïîëþ ïðîâåðÿåòñÿ ïðèíàäëåæíîñòü#ïîëüçîâàòåëÿ ê ãðóïïåmember: ou=admin,dc=mydomain,dc=rusn:: 0J/Rg9GC0LjQvQ==cn:: 0J/Rg9GC0LjQvSDQktC70LDQtNC40LzQuNGAINCS0LvQsNC00L ↵

jQvNC40YDQvtCy0LjRhw==userPassword: 123telephoneNumber: 111-11-11title:: 0J/RgNC10LfQuNC00LXQvdGCou:: 0JzQvtGB0LrQstCwINC60YDQtdC80LvRjA==givenName:: 0JLQu9Cw0LTQuNC80LjRgA==initials:: 0JLQu9Cw0LTQuNC80LjRgNC+0LLQuNGHmail: [email protected]: boss#Ýòî ïîëå òîëüêî äëÿ QmailmailMessageStore: /var/qmail/maildirs/boss#Ýòî ïîëå òîëüêî äëÿ QmailmailHost: mailhost.boss.ru

#Äîáàâëÿåì 1 ïîëüçîâàòåëÿ â ãðóïïó icqdn: uid=icq_user,ou=icq,dc=mydomain,dc=ruobjectClass: topobjectClass: personobjectClass: organizationalPersonobjectClass: inetOrgPersonobjectClass: groupOfNamesdescription: activemember: ou=icq,dc=mydomain,dc=rusn: Sidorivcn: Sidorov Fedor PetrovichuserPassword: 321telephoneNumber: 999-99-99title: Doctorou: DepartamentgivenName: Fedorinitials: Petrovichmail: [email protected]: icq_user

#Äîáàâëÿåì 1 ïîëüçîâàòåëÿ â ãðóïïó accounts

Page 39: 012 Системный Администратор 11 2003

3711(12), ноябрь 2003

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

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

Небольшое пояснение. Поля sn, cn и др. заполненырусским текстом в формате utf8. Ничего не имею противанглийского, но некоторые пользователи жалуются. К томуже появляется адресная книга вашей фирмы, не советуюпользоваться адресной книгой в Outlook Express, на ред-кость неудобная реализация. Я пользуюсь той, что идет впакете Mozilla, но это дело вкуса.

dn: uid=Ivan,ou=accounts,dc=mydomain,dc=ruobjectClass: topobjectClass: personobjectClass: organizationalPersonobjectClass: inetOrgPersonobjectClass: groupOfNamesdescription: activemember: ou=icq,dc=mydomain,dc=rusn: Ivanovcn: Ivanov Ivan IvanovichuserPassword: 333telephoneNumber: 999-99-99title: Doctorou: DepartamentgivenName: Ivaninitials: Ivanovichmail: [email protected]: Ivan

/path/ldapadd –x –D “cn=Manager,dc=mydomain,dc=ru” –W ↵–f /path/example.ldif

Теперь пора добавить наши данные.В случае работающего OpenLDAP:

/path/ – реальное местоположение утилиты ldapadd и фай-ла example.ldif.

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

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

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

Для создания записей в OpenLDAP я пользуюсь GQ-0.6.0:http://biot.com/gq/.

Вот, собственно, и всё. Удачи!Благодарность Henrik Nordstrom [email protected]

за то, что написал модуль squid_ldap_group и объяснилмне, как им пользоваться.

Page 40: 012 Системный Администратор 11 2003

38

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

ИСПОЛЬЗОВАНИЕБЕЗДИСКОВЫХМАРШРУТИЗАТОРОВ

АНДРЕЙ МОЗГОВОЙ

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

Page 41: 012 Системный Администратор 11 2003

3911(12), ноябрь 2003

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

Структура сети и рольбездисковых станций

Так уж вышло, что физическое месторасположение мос-тов (bridge) [1] не самое удачное. Вдобавок с электропи-танием перебои. Компьютеры не самые мощные PI-200МГц, DIMM – 32 Мб, но это не мешает им обслуживать 4сети по 100 Мб/с и одну по 10 Мб/с. Могли бы все быть по100 Мб/с, просто PCI-слотов не хватает. В дальнейшемразговор будет идти о bridge и сетях, которые выделены всерую рамку.

А вот и фото из технического коридора:

Как видите, материнская плата и блок питания легкопоместились в обычном электрощите. Главное – сообра-зить, как все правильно разместить. Блок питания луч-ше размещать сверху, тогда нагретый им воздух не бу-дет повышать температуру процессора. А этот факт мо-жет о себе напомнить в жаркие летние деньки. Акку-ратно зафиксируйте кнопки Вкл/Выкл, Питания иRESET. Они могут вам понадобиться в первые дни на-стройки. Опора для сетевых карт взята прямо из ста-ренького корпуса формата AT. Видеокарты нет. Это непринципиальное решение. Просто нет у меня такого ма-ленького мониторчика, который с легкостью можновзять с собой в технический коридор. Вместо видео-карты использую последовательный порт (com port). Этоочень удобно, можно просто прийти с ноутбуком и ре-шить любые проблемы. Главное – собрать ядро с опци-ей Character devices → Support for console on serial port(CONFIG_SERIAL_CONSOLE=y), указать соответствую-щие опции при загрузке ядра (console=ttyS1) [2] и до-бавить строчку в /etc/inittab (s1:12345:respawn:/sbin/agetty -L ttyS0 9600 vt100).

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

Page 42: 012 Системный Администратор 11 2003

40

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

ты с BOOTROM (энергонезависимая память с прошив-кой, осуществляющей загрузку). Давно, еще на старень-ких NE2000, появилась возможность установки и исполь-зования этих самых BOOTROM. Только в наше время этодело выбора.

Можно найти сетевую карту со слотом для ПЗУ, доку-пить саму ПЗУ, сделать прошивку, необходимую вам, инаслаждаться проделанной работой. А можно сразу ку-пить сетевую карту, поддерживающую загрузку по сети.Сейчас распространены прошивки Intel PXE, лучше оста-новиться на версии v2.x. У автора как раз завалялось не-сколько таких карточек, а именно 3Com905C-TX-M. Уста-навливаем, входим в BIOS сетевой карты, настраиваем,чтобы загружалась по сети.

Все, на этом настройка клиента заканчивается. Но что,если у вас нет под рукой такого 3Com, но нашлась какая-нибудь другая карта с уже установленным ПЗУ. Вам по-могут либо etherboot, либо netboot [3]. Клиент настроен,включен и рассылает запросы по сети, ожидая ответа отDHCP-сервера в виде сетевых настроек и TFTP-сервера,с которого необходимо забрать образ.

СерверНа сервере должны быть остановлны DHCPD [4], TFPD ипакет SYSLINUX [5]. Как я уже говорил (см. выше), снача-ла DHCPD должен отдать сетевые настройки, следова-тельно, настраиваем его в первую очередь. Вот пример-ное содержание конфигурационного файла:

Кратко прокомментирую самое главное. Клиент полу-чит IP-адрес (fixed-address 192.168.0.2), соответствующийMAC-адресу (hardware ethernet 00:00:00:00:00:00). АдресTFTP-сервера и имя образа он узнает из параметров next-server 192.168.0.1 и filename «pxelinux.0» соответственно.

Запускаем DHCPD, на первый раз можно с опциями«-d -f», чтобы увидеть запросы клиента и как на них реа-гирует DHCPD. Включите клиента, он пошлет запросы,получит настройки, выведет их на экран (конечно, не обя-зательно, но вы поймете, что клиент получил либо неполучил их, тем более комментарий к происходящемувыведет DHCPD).

############## dhcpd.conf## For diskless station.allow booting;allow bootp;

# option definitions common to all supported networks...option domain-name "my-domain.ru";option domain-name-servers ns.my-domain.ru, ns1.my-domain.ru;#ddns-update-style none;default-lease-time 600;max-lease-time 7200;

subnet 192.168.0.0 netmask 255.255.255.0 option routers 192.168.0.1; option subnet-mask 255.255.255.0; option broadcast-address 192.168.0.255; option dhcp-client-identifier "PXEClient"; next-server 192.168.0.1; filename "pxelinux.0";

host bridge hardware ethernet 00:00:00:00:00:00; fixed-address 192.168.0.2;

Page 43: 012 Системный Администратор 11 2003

4111(12), ноябрь 2003

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

Page 44: 012 Системный Администратор 11 2003

42

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

Второй шаг. Настройка TFTPTFTP-сервер поставляется в комплекте практически слюбым дистрибутивом. Скорее всего и в вашем Linux онуже установлен. Автор не стал запускать TFTP под на-блюдением INETD (именно в моем случае это просто из-лишне, для себя решайте сами). Вся настройка сервиса(если без INETD) укладывается в указание нужных пара-метров при запуске [6].

В директорию /tftpboot/ (у меня это линк на /usr/local/tftpboot/) копируем бинарник pxelinux.0 из пакета SYSLINUX.Это все, что понадобится нам из этого пакета. Конфигу-рационные файлы для PXELINUX хранятся в корне TFTP-сервера в каталоге «pxelinux.cfg». Чтобы клиент легко ра-зобрался, какой конфигурационный файл предназначенименно ему, файлы соответствуют IP-адресам клиентов,но в шестнадцатеричном представлении. Так, для наше-го клиента, имеющего IP-адрес 192.168.0.2, конфигура-ционный файл для pxelinux.0 должен находиться по сле-дующему адресу:

Как вы думаете, как будет выглядеть конфигурацион-ный файл для 192.168.0.0/24? Правильно – «C0A8».

Вот мой конфигурационный файл:

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

Собрать ядро для бездисковой станции проблем несоставит. Прочтите HOWTO на тему Diskless и Kernel [7].Главное, включите поддержку ram-дисков и ext2. От NFS-ROOT автор отказался наотрез, ну не нужен он там. Луч-ше собрать свой маленький дистрибутив или воспользо-ваться каким-нибудь однодискетным. Автор собрал тако-вой в стиле Slackware, основанный на BusyBox [8]. Образ

дистрибутива ядро скачивает с TFTP-сервера согласнопараметрам (см. конфигурационный файл).

БезопасностьИспользуйте firewall, дабы прикрыть новые сервисы. Мож-но ограничить доступ к ним только из одной сети, ноiptables позволяет ограничить доступ даже по MAC-адре-сам. Для DHCPD укажите сетевой интерфейс, который бу-дет обслуживаться этим сервисом.

ЗаключениеНе бойтесь экспериментировать. Собрать и настроить та-кой bridge несложно, зато практическая польза – все 100%.К тому же, настроив одну станцию и собрав один малень-кий дистрибутив, вам наверняка захочется сменить ещепарочку маршрутизаторов на бездисковые.

Ссылки:[1]Что такое bridge и чем он отличается от router, должен

знать каждый системный администратор. К тому же, какнастроить bridge, описывалось в статье Заклякова П.Разводной мост на Linux (Bridging Firewalls). – //Журнал«Системный администратор» 4(5), апрель 2003 г. –42-54 с. Хотя лично у меня есть небольшие расхожде-ния в реализации. В основном они сводятся к упроще-нию. Например, вместо того чтобы патчить ядро, мож-но просто использовать последнюю версию оного. Сна-чала прочтите Bridge+Firewall-HOWTO, вы сами все пой-мете. Вот несколько ссылок, которые помогут вам доконца разобраться:http://bridge.sourceforge.net/http://www.linux.org/docs/ldp/howto/Bridge/index.htmlhttp://www.linux.org/docs/ldp/howto/Bridge+Firewall.htmlhttp://www.linux.org/docs/ldp/howto/BRIDGE-STP-HOWTO/index.htmlhttp://www.ibiblio.org/

[2]По всем параметрам, которые можно задать ядру черезкомандную строчку, есть хороший man – man 7 bootparam.

[3]Подробнее о etherboot и о netboot можно узнать, найдяэти проекты на http://www.sf.net

[4]Homesite dhcpd: http://www.isc.org/products/DHCP/[5]Homesite syslinux: http://syslinux.zytor.com/index.php[6]man in.tftpd[7]http://www.ibiblio.org/pub/Linux/docs/HOWTO/Diskless-

HOWTOhttp://www.ibiblio.org/pub/Linux/docs/HOWTO/Kernel-HOWTO

[8]BusyBox представляет собой «набор» основных ути-лит Linux, только они специально несколько упроще-ны. Все равно очень удобно. Очень удачно описанасборка дистрибутива в статье «Создание загрузочныхдискет и CD-дисков Linux» Всеволода Стахова, кото-рая была опубликована в журнале «Системный адми-нистратор» 6(7), июнь 2003 г. – 44-51 с.

/usr/sbin/in.tftpd -l -v -s /tftpboot/

/tftpboot/pxelinux.cfg/C0A80002

default /kernels/test/bzImage initrd=/images/initrd.br ↵load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=16384 ↵rw root=/dev/ram0 console=ttyS0

prompt 1display /images/default.txtF1 /images/help.txttimeout 50label linux

kernel /kernels/bare.i/bzImageappend -

label bare.ikernel /kernels/bare.i/bzImageappend initrd=/images/initrd.br load_ramdisk=1 ↵

prompt_ramdisk=0 ramdisk_size=8192 ↵rw root=/dev/ram SLACK_KERNEL=bare.i

Page 45: 012 Системный Администратор 11 2003
Page 46: 012 Системный Администратор 11 2003

44

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

АУДИТ УЧЕТНЫХ ЗАПИСЕЙ ПОЛЬЗОВАТЕЛЕЙВ ACTIVE DIRECTORY

МАКСИМ КОСТЫШИН

Page 47: 012 Системный Администратор 11 2003

4511(12), ноябрь 2003

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

Поводом для появления данной статьи послужила инфор-мация, опубликованная в журнале «Windows & .NetMagazine/RE» 5 за 2003 год под названием «УтилитаLDIF Directory Exchange», подсказавшая решения, кото-рые можно было использовать для того, чтобы обеспе-чить необходимый уровень автоматизации при проведе-нии аудита учетных записей пользователей в ActiveDircectory. В статье было приведено описание основныхвозможностей двух утилит Ldifde.exe и Csvde.exe, обес-печивающих добавление, изменение и удаление объек-тов Active Directory.

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

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

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

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

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

ми не пользуются и владельцы которых уже вряд ли по-мнят имена для входа в сеть (не говоря уже о паролях);

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

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

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

разделение, выяснить, как с ним можно связаться (конеч-но же, речь здесь не идет о стандартных учетных записяхтипа «Администратор», «Administrator», «Guest», «Гость»,и другие).

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

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

Оснастка Active Directory – пользователи и компьютеры(которую можно найти в разделе «Администрирование» насервере). Замечательная возможность для добавления,редактирования свойств и удаления пользователей доме-на, но, к сожалению, достаточно бесполезная в вопросахпроведения ревизии и аудита. К положительным момен-там можно отнести возможность проведения экспорта спис-ка пользователей, в который можно включить такие поля,как – «имя входа пользователя», «имя», «выводимое имя»,«фамилия», «изменен». Отметим, что поле «изменен» по-казывает время и дату последних изменений для учетнойзаписи администратором (производилась коррекция на-строек) или владельцем (смена пароля).

Системная утилита Net.exe. С помощью этой утилитывы можете обеспечить работу с данными конкретногопользователя (вариант вызова – «Net user») – получитьдату и время последней регистрации в сети, а также оп-ределить, когда завершается срок действия пароля.

Программы-сканеры, задача которых заключается всборе информации о состоянии локальной сети или конк-ретного компьютера. Среди наиболее интересных про-грамм в плане получения информации о пользователяхотметим CFI LANguard Network Security Scanner (ver 3.1.5).Она предоставляет возможность получения достаточноподробной информации об учетных записях, такой какдата и время последней регистрации; данные о том, ког-да пароль будет просрочен; количество регистрацийпользователя в сети; значение индекса попыток входа снекорректным паролем. Кроме того, программа позво-ляет на основании данных двух сохраненных протоко-лов сканирования сформировать отчет о расхожденияхи получить перечень заведенных и удаленных учетныхзаписей. Справедливости ради отметим, что программаимеет существенные недостатки, особенно для русско-язычной категории пользователей, так как она некоррек-тно обрабатывает русские названия (в именах и допол-

Page 48: 012 Системный Администратор 11 2003

46

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

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

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

Первая утилита позволяет экспортировать данные изActive Directory в файл формата LDIF. Стандарт файла LDIFопределен в рекомендациях RFC-2849 для импорта и экс-порта данных из каталогов LDAP, таких как Active Directory.После экспорта данных можно использовать LDIF-файл дляимпорта тех же объектов в другой каталог LDAP.

Csvde.exe – утилита, аналогичная Ldifde.exe (парамет-ры вызова идентичны), в которой используется другойформат хранения данных в текстовом файле – значенияразделяются запятыми (CSV-формат). Данный форматподдерживается программой Microsoft Excel, понимающейфайлы в CSV-формате, а также Microsoft Access.

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

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

В файл USER_WORK.CSV (параметр -f) будут записа-ны данные учетных записей пользователей домена. Про-грамма будет производить обработку данных, которыедолжны быть доступны пользователю GUEST доменаMICROSOFT, пароль для которого должен быть введен впроцессе выполнения команды (параметр -b).

Из всех объектов LDAP-каталога будут отобранытолько учетные записи пользователей, для которых вполе параметра userAccountControl отсутствует инфор-мация о блокировке учетной записи (параметр -r). Вкачестве логических операций для фильтра использу-ются – «!» – логическое НЕТ, «&» – логическое И, «|» –логическое ИЛИ.

В результате выполнения команды в CSV-файле бу-дут сохранены данные полей, перечисленных в пара-метре -l (список наиболее интересных полей приведенв таблице 1).

Примечание: команда «Net user» некорректно обра-батывает данные поля pwdLastSet, а также некоторыезначения времени. Для поля pwdLastSet, в случае еслипароль не был задан, выводятся текущие дата и время.Для данных времени вместо значений вида 00:mm AM и00:mm PM выводятся значения 12:mm AM и 12:mm PMсоответственно.

Форматы представления данныхдаты и времениЕсли вы были наблюдательны, то заметили, что в табли-це 1 имеются два различных варианта представлениязначений даты и времени.

Если формат вида ГГГГММДДЧЧММСС.0Z (типGeneralizedTime для ASN.1 кодирования), используемый дляполей whenChanged, whenCreated по Гринвичу достаточнопонятен, то параметры, такие как lastLogon, pwdLastSet,accountExpires, представляют информацию о дате и вре-мени в 32-битном UNIX-формате, и содержат значения се-кунд, прошедших начиная с 1 января 1970 г., GMT. Для на-глядности приведем некоторые значения, которые могутсодержаться в файле выгруженных значений для парамет-ров даты и времени в Unix-формате:

Использование функций преобразованийдля данных CSV-форматаИнформацию по учетным записям, которая выгружена спомощью команды, аналогичной, указанной в начале раз-дела «Использование утилиты Csvde.exe», можно попы-таться загрузить в Microsoft Access, однако, в связи с тем,что программа некорректно обрабатывает символ-разде-литель «,» в структурах типа «CN=Bill Gates,CN=Users,DC=Microsoft,DC=com», то лучше воспользоваться анало-гичными возможностями программы Microsoft Excel (см.рис. 1). Далее, информацию для удобства использованияможно обработать с помощью имеющихся в Microsoft Excelвозможностей (макросы, функций).

csvde -f USERS_WORK.CSV -b GUEST MICROSOFT *-r "(&(objectClass=user)(!(objectClass=computer)) ↵

(!(userAccountControl=514))(!(userAccountControl=66050)))"-l "DN, memberOf, badPasswordTime, lastLogon, logonCount, ↵

sAMAccountName, userAccountControl, whenChanged, whenCreated"

Òàáëèöà 1. Îïèñàíèå íåêîòîðûõ ïîëåé ó÷åòíûõ çàïèñåéLDAP-êàòàëîãà

126858492000000000 – ñîîòâåòñòâóåò 1.01.2003 00:00127014876000000000 – ñîîòâåòñòâóåò 1.07.2003 00:00127014912000000000 – ñîîòâåòñòâóåò 1.07.2003 01:00

Page 49: 012 Системный Администратор 11 2003

4711(12), ноябрь 2003

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

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

Получение данных из структуры поля DNДля получения имени пользователя из структуры вида«…CN=Имя_пользователя,…» в ячейке A2, может бытьиспользована следующая формула преобразования:

Для получения информации из структуры вида«…OU=Данные,…» в ячейке A2 может быть использова-на следующая формула преобразования:

Обработка данных датыи времени Unix-форматаПолучение даты в формате ДД.ММ.ГГГГ на основанииданных в Unix-формате предлагаем производить в дваэтапа. На первом этапе вычисляется количество дней,прошедших с 1 января 2003 г. На втором формируетсястрока даты в стандартном формате.

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

Полученное на первом этапе значение сдвига днейотносительно 1 января 2003 г. (в ячейке E2) используетсядля формирования даты в стандартном формате.

Обработка данных даты и времениформата GeneralizedTimeдля ASN.1 кодированияПреобразование числа в формате ГГГГММДДММСС.0Z вформат ДД.ММ.ГГГГ ЧЧ:ММ

Обработка значения поляuserAccountControlо блокированности записиПолучение данных о состоянии учетной записи по значе-нию поля userAccontControl, содержащемуся в ячейке G2:

Подробные пояснения и описание формата храненияданных в поле userAccountControl можно найти в статьеMicrosoft «How to Use the UserAccountControl Flags toManipulate User Account Properties» (http://support.microsoft.com/?kbid=305144). Отметим только, что еслипараметры учетной записи не заданы, то десятичное зна-чение userAccountControl равно 512; десятичное значениедля блокированной учетной записи при отсутствии дру-гих параметров – 514.

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

Отметим, что кроме изложенного метода может бытьиспользован вариант, рекомендуемый Microsoft, предпо-лагающий использование интерфейсов службы ActiveDirectory (ADSI), которые предоставляют простой, мощ-ный, объектно-ориентированный доступ к ресурсам ActiveDirectory. Интерфейсы ADSI позволяют программистам иадминистраторам создавать программы каталога с ис-пользованием инструментальных средств высокого уров-

=ÏÑÒÐ(A2; ÍÀÉÒÈ("CN=";A2)+3; ÍÀÉÒÈ(","; A2; ÍÀÉÒÈ( "CN="; A2 )+3 ) - ÍÀÉÒÈ("CN=";A2) -3)

=ÅÑËÈ(ÅÏÓÑÒÎ('0'!A2);"";ÅÑËÈ(ÅÎØÈÁÊÀ(ÍÀÉÒÈ("OU=";'0'!A2)); "USERS";

ÏÑÒÐ( '0'!A2;ÍÀÉÒÈ("OU=";'0'!A2)+3;ÍÀÉÒÈ(","; '0'!A2;

ÍÀÉÒÈ("OU=";'0'!A2)+3) –ÍÀÉÒÈ("OU=";'0'!A2) -3

))

)

= ÅÑËÈ(ÇÍÀ×ÅÍ(ËÅÂÑÈÌÂ(F2;11))=0;-1;ÎÊÐÓÃËÂÍÈÇ((ÇÍÀ×ÅÍ(ËÅÂÑÈÌÂ(F2;11))- 12685849200)/24/3600; 0)

)

=ÅÑËÈ( E2=-1;"Îòñóòñòâóåò";ÑÖÅÏÈÒÜ(

ÄÅÍÜ(ÄÀÒÀÇÍÀ×("1/1/2003")+E2);".";ÌÅÑßÖ(ÄÀÒÀÇÍÀ×("1/1/2003")+E2);".";ÃÎÄ(ÄÀÒÀÇÍÀ×("1/1/2003")+E2)

)

=ÑÖÅÏÈÒÜ(ÏÑÒÐ(N2;7;2); "."; ÏÑÒÐ(N2;5;2); "."; ÏÑÒÐ(N2;1;4); " ";ÏÑÒÐ(N2;9;2); ":"; ÏÑÒÐ(N2;11;2)

)

=ÅÑËÈ(ÅÏÓÑÒÎ(G2);"";ÅÑËÈ(ÈËÈG2=514; G2=66050);"Çàáëîêèðîâàííàÿ";"Äåéñòâóþùàÿ")

)

Ðèñóíîê 1. Ïðèìåð äàííûõ CSV-ôàéëà ïîñëå ýêñïîðòàâ Microsoft Excel

Ðèñóíîê 2. Âèä èíôîðìàöèè CSV-ôàéëà ïîñëå ïðåîáðàçîâàíèéñ èñïîëüçîâàíèåì âîçìîæíîñòåé Microsoft Excel

Page 50: 012 Системный Администратор 11 2003

48

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

ня, например, Microsoft Visual Basic, Java, C или Visual C++,не заботясь о различиях в пространствах имен. Интер-фейсы ADSI полностью поддерживают сценарии, что об-легчает их использование администраторами.

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

ледней даты регистрации могут быть удалены в слу-чае, если необходимость в них отсутствует);

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

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

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

Page 51: 012 Системный Администратор 11 2003
Page 52: 012 Системный Администратор 11 2003

50

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

WINDOWS SERVER 2003:ВЗГЛЯД СИСТЕМНОГОАДМИНИСТРАТОРА

АЛЕКСЕЙ ДОЛЯ

МИХАИЛ МЕЛЬНИКОВ

Page 53: 012 Системный Администратор 11 2003

5111(12), ноябрь 2003

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

Не так давно всемирно известная группа Gartner про-вела весьма интересное исследование рынка сервер-ных операционных систем семейства Windows, в ре-зультате выяснилось, что подавляющее большинствокомпаний и администраторов предпочитают базироватьсвои серверы на старой как мир Windows NT 4.0 (оназанимает порядка 60-70% рынка), и переход на Windows2000 Server, а тем более на недавно вышедшуюWindows Server 2003 для них выглядит непривлекатель-ной идеей. Microsoft же, в свою очередь, незадолго довыхода Windows Server 2003 также провела статисти-ческое исследование, в котором рынку Windows NT 4.0отводится всего лишь 35%. Более того, было развер-нуто свыше 10 000 серверов вне стен Microsoft под уп-равлением Windows Server 2003 еще до официальногодня презентации. Кому верить – вопрос риторический.Однако время на месте не стоит, да и сама Microsoftдышит оптимизмом: с момента появления NT 4.0 водыутекло довольно много, а вариантов серверных Windowsпомимо самой Windows NT 4.0 набралось уже два:Windows 2000 Server, и вот, встречайте, Windows Server2003 (как всегда в нескольких редакциях и ценовых ка-тегориях: Enterprise, Web, Datacenter и, конечно же,Standard). Каждый из вариантов системы позициони-руется компанией Microsoft для решения конкретных за-дач в ориентации на разную производительность, фун-кциональность и гибкость, и масштаб организационнойинфраструктуры.

Windows Server 2003 Datacenter разработана для кри-тичных бизнес-приложений, она позволяет решать за-дачи, требующие масштабируемости и доступности вы-сокого уровня. Например, решения для баз данных, пла-нирования ресурсов на предприятии, высокоскоростнойинтерактивной обработки транзакций и консолидациисерверов. Windows Server 2003 Datacenter Edition под-держивает 32-потоковую мультипроцессорную обработ-ку данных (SMP) и до 64 Гб оперативной памяти (речьидет о 32-разрядной версии, 64-разрядная поддержи-вает соответственно 128 Гб ОЗУ), а также предостав-ляет стандартные функции: восьмиузловую кластери-зацию и службы балансировки нагрузки.

Windows Server 2003 Web Edition будет применятьсядля конкретных задач, ориентированных на использо-вание веб-технологий. Эта версия предназначена дляразработки и поддержки хостинга веб-приложений, веб-страниц и веб-служб XML. Web Edition разработана дляиспользования в основном в качестве веб-сервера IISверсии 6.0 и предоставляет платформу для успешнойразработки и развертывания веб-служб XML, котораяиспользует технологию ASP.NET, являющуюся одной изосновных частей .NET Framework. Кстати говоря, пред-полагается, что Windows Server 2003 Web Edition при-обрести в розничной продаже будет нельзя, посколькуона будет распространяться исключительно через офи-циальных партнеров Microsoft.

В свою очередь Windows Server 2003 Standard Editionот Enterprise Edition предоставляемым функционаломво многом схожи, и по рекомендации Microsoft могутиспользоваться в зависимости от масштаба существу-

ющей или предполагаемой информационной структу-ры компании.

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

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

Возвращаясь к цифрам статистики, можно сделатьвывод, что не раз наученные горьким опытом админис-траторы из принципа не переходят на новую версиюWindows. А сама миграция им представляется переез-дом на Гондурас без денег и запасного белья. Некото-рые ждут как минимум двух официальных патчей, ко-торые по идее должны исправить практически все не-дочеты разработчиков, другие же закрывают глаза навсе, и по-прежнему каждый день в меню «Пуск» наблю-дают надпись Windows NT 4.0 или Windows 2000.

Компания Microsoft призывает администраторов пе-реходить на Windows Server 2003, не дожидаясь перво-го сервис-пака. Тем не менее выход сервис-пака ужеофициально назначен на декабрь этого года.

Впрочем, стоит заметить, что при недочетах Windows2000, в новой Windows 2003 таковых (во всяком случаепока) не обнаружено, и после разговора с несколькимиадминистраторами крупных компаний, которые уже ус-пели перейти на Windows Server 2003, складываетсявпечатление, что система действительно внушает до-верие.

Для начала давайте рассмотрим некоторые предпо-

Ðèñóíîê 1. Ïðèìåð ïðîåêòèðîâàíèÿ ñèñòåìû áåçîïàñíîñòè ñåðâåðà

Page 54: 012 Системный Администратор 11 2003

52

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

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

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

Как и всегда, разработчики делают ставку на повы-шение надежности и производительности нового про-дукта. С Windows Server 2003 все эти обещания выгля-дят как нельзя более внушительно. Внесены усовершен-ствования в такие технологии, как балансировка нагруз-ки сети, служба Active Directory (об этом ниже), класте-ры серверов. Кроме того, интегрирована новая среда –так называемая CLR (Common Language Runtime). Клю-чевым свойством CLR с точки зрения администратораявляется возможность обеспечения программной изо-ляции приложений, исполняемых в общем адресномпространстве. Это осуществляется с помощью безопас-ного в отношении типов (type safety) доступа ко всемобластям памяти при исполнении безопасного управ-ляемого кода. Некоторые компиляторы могут создаватьMSIL-код, который не только безопасен в отношениитипов, но и поддается простой проверке на безопас-ность исполнения. Этот процесс называется верифи-кацией и позволяет серверам легко проверять написан-ные на MSIL пользовательские программы, и запускатьтолько те, которые не будут производить опасных об-ращений к памяти. Такая независимая верификацияважна для действительно масштабируемых серверов,исполняющих пользовательские программы и скрипты.

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

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

Миграция – процесс нелегкий и недешевый. Его целе-сообразность всегда стоит под вопросом. Тем не менееWindows Server 2003 – отличная замена старым NT 4.0 иWindows 2000 Server.

Причин для миграции с прежних серверных версийWindows на Windows Server 2003 много, и для каждогопредприятия они могут быть персональными. Кто-тоиспользует в качестве сервера Windows 2000 Server, акто-то до сих пор базирует свой сервер на основеWindows NT 4.0. Если у вас последний случай, то стоитзаметить, что Windows Server 2003 не просто превос-ходит Windows NT 4.0 по многим параметрам, но и яв-ляется более надежной ОС. К тому же использованиевсех возможностей Windows Server 2003 позволит вамзначительно повысить не только производительность инадежность сети, но и упростить само ее администри-рование. Например, служба Microsoft Active Directory уп-рощает администрирование крупных и территориаль-но распределенных сетей и дает возможность пользо-вателям быстро находить необходимые данные неза-висимо от размеров сети и количества серверов. Усо-вершенствования, которые внесены в эту технологию,по заявлениям разработчиков имеют важное стратеги-

Ðèñóíîê 2. Ìàñòåð óïðàâëåíèÿ ñåðâåðîì â äåéñòâèè Ðèñóíîê 3. Îïðåäåëåíèå ïóòè ìèãðàöèè äëÿ ñåðâåðà ïðè ïåðåõîäåíà ïëàòôîðìó Windows Server 2003

Page 55: 012 Системный Администратор 11 2003

5311(12), ноябрь 2003

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

ческое значение для сетей предприятий любых разме-ров. В число нововведений и усовершенствований ActiveDirectory входит переименование домена, что позволяетизменять DNS- и NetBIOS-имена уже зарегистрирован-ных доменных имен в составе логической схемы лес(forest) таким образом, что результирующий состав лесаостается синтаксически корректным.

Также следует отметить появление в Active Directoryподдержки класса inetOrgPerson – теперь администра-тор может использовать данную возможность для вы-полнения миграции объектов inetOrgPerson из катало-га LDAP в Active Directory при необходимости сравнитьсодержимое Active Directory с другими каталогами LDAPили создать объекты inetOrgPerson в Active Directory.

Windows Server 2003 является достойной альтернати-вой Windows NT 4.0 и побуждает системных администра-торов, избавиться от старого ПО и перейти к новому. Вкачестве основного довода Microsoft приводит аргумент,формулирующийся примерно так: пора выкинуть староежелезо под управлением Windows NT 4.0 и заменить егоновыми высокопроизводительными кластерами под уп-равлением Windows Server 2003 – это позволит упроститьтопологию сети предприятия, повысить производитель-

ность и масштабируемость, а также облегчить админист-рирование сети в общем.

Ну и самое заметное усовершенствование в ActiveDirectory, конечно же, повышение общей производи-тельности. В Windows Server 2003 организовано болееэффективное управление репликацией и синхрониза-цией содержимого Active Directory. Благодаря этому ад-министраторам будет легче контролировать типы дан-ных, подлежащих репликации и синхронизации междуконтроллерами одного или нескольких доменов. Крометого, Active Directory предлагает больше возможностейв плане интеллектуального отбора данных, подлежа-щих репликации. Например, можно выбирать только из-менившиеся данные, исключая необходимость обнов-лять полностью весь каталог.

Нельзя не рассказать и о новшествах в плане InternetInformation Server (IIS), который теперь наделен порядко-вым номером 6.0.

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

Функция отслеживания состояния системы (WAP),интегрированная в IIS 6.0, поможет вам следить за со-стоянием рабочих процессов посредством периодичес-кой проверки связи с ними. Естественно, цель подоб-ных «процедур» состоит в выявлении блокировки тогоили иного процесса. Если какой-либо процесс блоки-рован, служба WAP закрывает его и взамен запускаетдругой, идентичный ему процесс.

Привязка к процессорам в IIS 6.0 также играет да-леко не последнюю роль. Каждый рабочий процессможно привязать к отдельному процессору, и при этомпопадания в кэш процессора (L1 или L2) происходятчаще.

В плане безопасности в IIS 6.0 введены такие функ-ции, как блокировка сервера, усовершенствование про-токола SSL, интеграция так называемого паспорта(Microsoft Passport), авторизация URL и многое другое.

Windows Server 2003 содержит значительное количе-ство поправок и усовершенствований Active Directory, иперечисленные выше нововведения и обновления AD –это всего лишь маленькая доля всего, что появилось но-вого в этой службе.

При помощи специальных служб сертификации исредств управления сертификатами организации могутсоздавать собственную инфраструктуру открытых клю-чей (так называемую Public Key Infrastructure, PKI). Инф-раструктура PKI позволяет администраторам внедрятьтехнологии обеспечения безопасности, основанные настандартах, (например, вход в систему с использовани-ем смарт-карт, проверку подлинности клиентов по про-токолам Secure Sockets Layer (SSL) и Transport LayerSecurity (TLS).

Службы сертификации позволяют администраторамсоздавать доверенные центры сертификации, отвеча-ющие за выдачу и отзыв сертификатов X.509 V3. Бла-годаря этому организации могут и не зависеть от ком-

Ðèñóíîê 4. Âëèÿíèå îáíîâëåíèÿ äîìåíîâ íà äîâåðèòåëüíûåîòíîøåíèÿ

Ðèñóíîê 5. Ïðåèìóùåñòâà ìèãðàöèè íà ïëàòôîðìó Windows Server 2003î÷åâèäíû, îñîáåííî åñëè âû èñïîëüçóåòå Windows NT 4.0

Page 56: 012 Системный Администратор 11 2003

54

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

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

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

В ближайшее время Microsoft предложит пользова-телям несколько дополнительных программных моду-лей для обеспечения безопасности. Одним из них яв-ляется Secure Configuration Wizard (мастер создания за-щищенных конфигураций) – дополнительный модульдля Windows Server 2003, помогающий автоматизиро-вать настройку серверов с целью обеспечения макси-мальной безопасности (с использованием функцио-нальных ролей).

Кроме того, Microsoft расширит спектр предлагае-мых шаблонов и рекомендаций (Patterns and Practices),добавив к ним практические рекомендации по такимвопросам, как инфраструктура идентификации и инф-раструктура мобильного доступа, что поможет пользо-вателям создавать и эксплуатировать защищенные си-стемы на основе Windows Server 2003.

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

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

Открытый защищенный протокол аутентификации(Protected Extensible Authentication Protocol – PEAP)предлагает средства парольной аутентификации,призванные повысить безопасность сетевых соеди-нений. PEAP идеально подходит пользователям, ко-торым необходима возможность использования бес-проводной связи, но которые не обладают ресурса-ми, необходимыми для построения полноценной ин-фраструктуры открытых ключей.

Диспетчер авторизации (Authorization Manager) обес-печивает возможность авторизации на основе прин-ципа прикладных ролей, упрощая системным адми-нистраторам управление доступом конечных пользо-вателей к веб-службам.

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

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

Также не стоит строить иллюзий на предмет новойсерверной ОС от Microsoft. Было бы глупо отрицать, чтосами разработчики не предполагают выпуск как минимумдвух-трех патчей, которые должны «залатать дыры», не-предусмотренные программистами как по части безопас-ности, так и по части просто стабильной работы системы.

Все же есть несколько весьма впечатляющих дово-дов в пользу Windows Server 2003, если сравнивать еес Windows 2000. Сразу отметим, что производитель-ность системы в общем плане повысилась на 10-15%.Скорость загрузки системы возросла на 20-30%. Коли-чество ошибок стало значительно ниже, однако все жевызывают некоторые трудности небольшие программы,к которым мы так привыкли. Например, ICQ в некото-рых случаях (опять же определить трудно, в каких имен-но) подключается к серверу Mirabilis только в режимеадминистратора. Пользователи же подключиться к ICQне могут. Эта проблема может решиться обеспечени-ем сетевого доступа к папке, где хранится сама про-грамма для всех пользователей. Но все же не факт, чтоэто поможет.

И такие проблемы встречаются далеко не с однойICQ. Приводить полный список в виде «программа –ошибка» смысла не имеет.

По части игр, дорогие администраторы, тоже стоитзаметить, что играть по сети в Quake в рабочее времяне получится – подобные игры теперь просто не рабо-тают под управлением Windows 2003. Правда, послеброжений по сетевым форумам, где «лучшие умы рос-сийской кибернетики» пытаются «научить» Windows за-пускать любимые игры, стало понятно, что Windows2003 – операционная система не обязательно сервер-ная, но и домашняя. Во всяком случае при желании онаможет стать таковой.

Page 57: 012 Системный Администратор 11 2003
Page 58: 012 Системный Администратор 11 2003

56

безопасность

СЕРГЕЙ ЯРЕМЧУК

ЗАЩИТНИК СЕТИ

Page 59: 012 Системный Администратор 11 2003

5711(12), ноябрь 2003

безопасность

На сайте, кроме ISO-образа дистрибутива, можно най-ти исходники, документацию и несколько дополнительныхпакаджей. Установка особой сложности не представляет,необходимо просто заполнять запрашиваемые пункты дляпоследующей настройки, после чего просто распакуетсяархив с системой. Удобно, что в отличие от большинствадистрибутивов, предназначенных для администратора(ClarkConnect, SmoothWall, Astaro Security Linux), програм-ма установки позволяет разбить диск вручную (при помо-щи cfdisk) с последующим указанием точек монтирова-ния, а не автоматически уничтожая при этом все данные,что позволяет установить эту систему второй для перво-начального ознакомления. В дальнейшем монитор с кла-виатурой можно отключить и получать информацию припомощи веб-интерфейса. Для осуществления задуманно-го имеется полный комплект необходимых приложений.

Nagios (http://www.nagios.org/) представляет собойпрограмму удаленного системного мониторинга, позво-ляющую отслеживать ошибки в работе серверов и сер-висов и выдавать собранную информацию через веб-интерфейс, в том числе и на пейджер или сотовый те-лефон посредством SMS и WAP, есть возможностьпользователю добавлять свои программы оповещения.Nagios позволяет производить мониторинг таких сете-вых сервисов, как SMTP, TELNET, SSH, HTTP, DNS,POP3, IMAP, NNTP и многих других. Кроме этого, естьвозможность добавлять свои скрипты мониторинга иреакции на определенные события. Управлять систе-

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

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

Шведский дистрибутив Compledge Sentinel (http://compledge.com/sentinel/) размером всего 147 Мб предназ-начен для мониторинга работы компьютеров, аудита бе-зопасности сетей и обнаружения вторжения в компьютер-ные сети. То есть представьте себе отдельный компью-тер с установленной Linux-системой, который только теми занимается, что отслеживает происходящее в контро-лируемой сети и в случае чего сигнализирует сисадмину,принимает меры по недопущению распространения даль-нейшей угрозы. И самое главное, так как Sentinel пред-ставляет собой законченное решение, поэтому и усилийдля первоначальной настройки необходимо приложитьминимум. Достаточно всего лишь установить его и запус-тить необходимые сервисы.

Page 60: 012 Системный Администратор 11 2003

58

безопасность

мой мониторинга также можно не только локально, нои удаленно, в том числе и с мобильного телефона че-рез wap-интерфейс. Nagios после запуска контролиру-ет работоспособность только локального компьютера,для мониторинга остальных его необходимо предвари-тельно настроить. Более подробно о настройке Nagiosчитайте в статьях Андрея Бешкова [1, 2, 3].

Nagat (http://nagat.sourceforge.net/) – утилита веб-адми-нистрирования Nagios, использующая php. В настоящеевремя доступна только CVS-версия. Мне лично не оченьнравится, но многие сочтут ее более удобной, чем на-стройка непосредственно в конфигурационных файлах.

Nessus (http://www.nessus.org) – относится к сканерамобнаружения вторжения (remote security scanner) и при-

Page 61: 012 Системный Администратор 11 2003

5911(12), ноябрь 2003

безопасность

Page 62: 012 Системный Администратор 11 2003

60

безопасность

меняется для поиска уязвимостей и слабозащищенныхсервисов. Основан на части кода от другого известногосканера портов nmap. Имеет клиент-серверную и модуль-ную архитектуру. В качестве сервера используется Unix-система, клиенты бывают как для Unix-машин, так и подWindows – NessusWX (имеется в комплекте CompledgeSentinel). Все уязвимости, о которых «знает» программа,описываются в виде отдельных модулей на специальноразработанном для этой цели языке NASL (Nessus AttackScripting Language), которые можно добавлять по мерепополнения базы модулей.

Snort (http://www.snort.org) – cетевая cистема детекти-рования вторжения (NIDS), проверяющая сеть и выявля-ющая попытки атак и сканирования. Распознаются рас-пространенные попытки осуществления атак bufferoverflows, CGI attack и др., а также практически все мето-ды сканирования и сбор «баннеров», т.е. информации осистемах (fingerprinting).

ACID – Analysis Console for Intrusion Databases (http://www.andrew.cmu.edu/~rdanyliw/snort/snortacid.html) пред-ставляет собой систему на основе языка PHP, предназна-ченную для поиска и обработки базы данных инцидентов,замеченных при помощи программ защиты типа IDS иfirewalls (например, в нашем случае Snort и tcpdump, естьвариант, анализирующий программы ipchains, iptables иipfw). Программа содержит интерфейс поиска предупреж-дений, соответствующих фактически любым критериям,включая время прибытия, время сигнатуры, адрес/портисточника/адресата, флаги, полезный груз, и т. д. ACID так-же обеспечивает способность аннотировать и логическигруппировать связанные события, удалять ложные и ужеобработанные предупреждения. Все это затем выводитсяв виде разнообразных статистических отчетов и графиков,

в которые могут быть включены время, датчик, сигнатура,протокол, IP-адрес, TCP/UDP-порты, классификация и пр.

OpenMosix (http://openmosix.sourceforge.net/) – прило-жение кластеризации для Linux, заставляющее несколь-ко компьютеров работать как один. В комплектеCompledge Sentinel имеется четыре перекомпилирован-ных ядра: два из которых передназначены для систем содним процессором и два – для многопроцессорных сис-тем, одно из двух ядер имеет поддержку openMosix и однобез таковой. Необходимое ядро выбирается при установ-ке системы и в дальнейшем используется по умолчанию.

И для обеспечения работоспособности и доступа черезвеб-интерфейс для настройки вышеописанных сервисовимеется Apache c OpenSSL, PHP и MySQL (первоначаль-ный пароль для доступа сompledge), которые используют-ся для хранения событий ACID и получения информациичерез защищенный веб-интерфейс. При этом система вы-дает подробнейшую информацию по дням, протоколам, уз-лам, портам, сигнатурам и пр. Вся необходимая информа-ция для функционирования этих сервисов – пароли, IP-ад-реса, расположение баз данных – вводится во время уста-новки. И поэтому в дальнейшем по конфигурационнымфайлам лазить не придется, хотя для более тонкой настрой-ки каждого сервиса все-таки придется, предварительноознакомившись с документацией на сайте.

Что я могу сказать напоследок. Установка и настройкакаждого из вышеописанных приложений требует большихвременных затрат и усилий, не говоря уже о необходимыхнавыках, знаниях и желании этим всем заниматься. Но вре-мя обычно на стороне нападающего. Строить защиту попринципу «а кому это нужно» или «времени предостаточ-но» – плохая идея. После того как компьютер будет подклю-чен к Интернету, сразу найдутся желающие покопаться вчужой информации. И в этой ситуации Compledge Sentinelможет прийти на выручку. Он уже практически готов к бою.

Литература:1. Бешков А. Установка Nagios. – //Журнал «Системный

администратор» 2(3), февраль 2003 г. – 6-14 с.2. Бешков А. Мониторинг Windows-серверов с помощью

Nagios. Часть 1. – //Журнал «Системный администра-тор»7(8), июль 2003 г. – 12-19 с.

3. Бешков А. Мониторинг Windows-серверов с помощьюNagios. Часть 2. – //Журнал «Системный администра-тор»8(9), август 2003 г. – 12-23 с.

В середине декабря 2003 года портал SysAdmins.RU проводит второй Семинар системных администраторов и инже-неров – SYSM.02. Первая подобная встреча проводилась в июле этого года (см. журнал «Системный администратор»9(10), 2003 г). При планировании SYSM.02 организаторы учитывают все позитивные и негативные моменты перво-го Семинара. К участию приглашаются системные и сетевые администраторы, инженеры, IT-директора и аналитики,представители прессы. На мероприятии будут обсуждаться многие проблемы IT-рынка, планирование карьеры IT-специалистом, многие юридические аспекты и правовые вопросы, так или иначе связанные с работой системныхадмнистраторов и инженеров. Также будет проведено учредительное собрание профсоюза «Работников сферы ин-формационных технологий». Более подробную информацию можно получить на портале SysAdmins.RU, на офици-альном сайте Семинара http://sysm.ru и в декабрьском номере журнала.

ВТОРОЙ СЕМИНАРСИСТЕМНЫХ АДМИНИСТРАТОРОВ И ИНЖЕНЕРОВ SYSM.02

Page 63: 012 Системный Администратор 11 2003
Page 64: 012 Системный Администратор 11 2003

62

безопасность

УДОБНЕЕ, ЭФФЕКТИВНЕЕ, ЛУЧШЕ:

ПАВЕЛ ЗАКЛЯКОВ

Page 65: 012 Системный Администратор 11 2003

6311(12), ноябрь 2003

безопасность

Описанный в статье [1] способ настройки IDS Snort, прикотором логи ведутся в текстовый файл, имеет как поло-жительные моменты, так и отрицательные. Среди поло-жительных моментов можно назвать простоту. С тексто-выми файлами человек может работать «напрямую», про-сматривая их в текстовом редакторе, используя различ-ные возможности их обработки с помощью средств shellи perl. Удобства очевидны: не требуются дополнительныепрограммы и прочие утилиты. Однако если смотреть шире,то по мере увеличения возможностей СОА эти преиму-щества обращаются в недостатки. Приведём один такойсущественный недостаток: при очень больших объёмахлогов место на диске при использовании текстовых фай-лов тратится не оптимально. Многие программы пытают-ся вести логи в своём, более компактном формате, либоимеют такую опциональную возможность. На первыйвзгляд это решает проблему размера лог-файлов, замет-но их сокращая, но вместе с этим привносится и ряд но-вых потенциально возможных неудобств. Вот и получает-ся, что двоичные файлы оказываются меньше по разме-ру, но не могут быть централизованно для всех программстандартизированы, а текстовые файлы не предоставля-ют широких возможностей для их быстрого просмотра иболее глубокого анализа с целью обнаружения каких-товнутренних зависимостей. Вот и подумаешь исходя изэтого: «А зачем изобретать велосипед, не проще ли вос-пользоваться уже какой-нибудь готовой СУБД для веде-ния логов в неё?». Дополнительные плюсы от использо-вания СУБД очевидны: во-первых, СУБД стандартизиро-вана, во-вторых, легче решается вопрос переноса дан-ных в другую СУБД, если у неё вдруг окажутся лучшиематематические возможности по анализу данных. Такжев случае использования нескольких сенсоров (сбора дан-ных с нескольких узлов) с СУБД проблем не будет, а стекстовыми файлами может возникнуть путаница в име-нах лог-файлов, либо простои из-за периодических бло-кировок одного и того же лог-файла, так как одновремен-но данные из двух мест туда писаться не могут.

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

Далее мы попытаемся настроить Snort для работы сБД MySQL и поговорим о способах просмотра записан-ных данных. Занесение данных в БД – лишь малая частьпроблемы, можно сказать, надводная часть айсберга, авот «что делать с уже внесёнными данными дальше?» –это уже вопрос, который может и не иметь однозначноправильного ответа. Попытка дать на него ответ – этодовольно непростая задача, особенно если мы хотим сде-лать какие-то обоснованные выводы на основе данных,собранных с распределённой сети сенсоров. Наиболь-шую сложность могут представлять попытки обнаруже-ния в данных следов распределённых телекоммуника-ционных атак, но об этом, скорее всего, я напишу в бу-дущих статьях.

Занесение данных из IDS Snort в БДДля начала мы возьмём относительно простую и свобод-но распространяемую БД MySQL. Её выбор обоснованбольшей распространённостью среди простых БД и на-личием достаточного числа литературы к ней на русскомязыке [5].

Напомню основные моменты по установке Snort (под-робнее см. [1]). Как и обычно, скачиваем и ставим после-дний Snort, если он не стоит:

Сравниваем значения хеша, выданного командами:

Аналогично скачиваем и проверяем последние правила:

Распаковываем скачанное куда-нибудь, например вдиректорию /progi/snort-2.0.2, и запускаем там конфигу-рирование с опцией --with-mysql:

не забываем про библиотеку libpcap. Если она не стоит ивыдаётся ошибка:

копируем со второго диска (RedHat v.7.3) и ставим:

Если БД MySQL у вас не установлена, то вам выдаст-ся следующее сообщение в процессе конфигурирования:

и вам надо будет поставить БД MySQL. RedHat 7.3 идёт сверсией 3.23.49-3 и mysqlclient9-3.23.22-6. Так как болееновые версии данных продуктов доступны также в rpm че-рез up2date (или http://redhat.com/apps/support/errata/), то мывозьмём их, соответственно версии 3.23.54a-3 и 3.23.22-8.

# wget http://www.snort.org/dl/snort-2.0.2.tar.gz# wget http://www.snort.org/dl/snort-2.0.2.tar.gz.md5

# cat snort-2.0.2.tar.gz.md5# md5sum snort-2.0.2.tar.gz

# wget http://www.snort.org/dl/rules/snortrules-stable.tar.gz# wget http://www.snort.org/dl/rules/snortrules-stable.tar.gz.md5# cat snortrules-stable.tar.gz.md5# md5sum snortrules-stable.tar.gz

#./configure --with-mysql

# rpm -ihv libpcap-0.6.2-12.i386.rpm

Page 66: 012 Системный Администратор 11 2003

64

безопасность

Обладатели других версий Linux могут установить себеБД самостоятельно, при этом, наверное, будет лучше ска-чать последнюю версию прямо с сайта MySQL [6].

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

Далее, либо руками прописываем мягкие ссылки на/etc/rc.d/init.d/mysqld в директориях /etc/rc.d/rc?.d на запуски останов, либо запускаем:

который делает это за нас. (Замечание: в некоторых не-rpm поставках mysqld называется mysql.)

Далее либо перезапускаемся, либо запускаем MySQLруками:

Далее повторно (если у вас не был установлен MySQL)запускаем конфигурацию из директории, где у нас уста-новлен дистрибутив Snort.

Запускаем компиляцию:

И устанавливаем Snort:

Далее из snortrules-stable.tar.gz копируем правила(файлы *.rules) в /etc/snort/rules. Остальные файлы по-мещаем в /etc/snort. После этого редактируем /etc/snort/snort.conf.

Точная настройка и разбор snort.conf-файла вообщезаслуживает отдельной статьи.

Основные моменты, что мы меняли в [1]:В первом разделе это были переменные:

или для диапазона адресов:

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

Мы находим закомментированные строчки:

Раскомментируем первую, нужную нам для MySQLстрочку, или сделаем её копию и укажем имя БД, парольи пользователя для доступа к ней, которые зададим пос-ле. Пусть пользователь БД будет называться snort, парольбудет ваш_пароль1, пользоваться мы будем БД snort.Имя нашего хоста будет localhost.

В итоге получим:

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

Для того чтобы делать записи в БД, нужно, чтобы вэтой самой БД существовала не только необходимая БДс соответствующим именем, но и были созданы таблицы,куда, собственно, и будут добавляться записи. Если мыпрочитаем файл README.database, на который есть ссыл-ка в комментариях к строчкам выше, то оттуда мы можемузнать, что можно вести логи не только в MySQL, кото-рый мы выбрали вначале, но и в: PostgreSQL; любую unix ODBC БД; MS SQL Server; Oracle.

Список вполне неплохой.Если почитать README.database внимательно, то там

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

Если БД MySQL у вас установлена впервые или вы еёранее не настраивали, то вам в целях безопасности при-дётся немного поднастроить её сейчас, в частности, за-дать пароль на суперпользователя БД – root (root дляMySQL и root для системы – это разные пользователи).Для этого подключаемся к БД от имени пользователя root:

# chkconfig mysqld on

# /etc/rc.d/init.d/mysqld start

# ./configure --with-mysql

# make

# make install

var HOME_NET 123.45.45.45

var HOME_NET [10.1.1.0/24,192.168.1.0/24]

var RULE_PATH rules

output database: log, mysql, user=snort ↵password=âàø_ïàðîëü¹1 dbname=snort host=localhost

# database: log to a variety of databases# ---------------------------------------# See the README.database file for more information about# configuring and using this plugin.## output database: log, mysql, user=root password=test ↵

dbname=db host=localhost# output database: alert, postgresql, user=snort dbname=snort# output database: log, unixodbc, user=snort dbname=snort# output database: log, mssql, dbname=snort user=snort ↵

password=test

Page 67: 012 Системный Администратор 11 2003

6511(12), ноябрь 2003

безопасность

Далее нам выдастся обычное приглашение уже самойбазы данных.

Команды следует набирать после приглашения «mysql>»:

в ответ должно выдастся что-то вроде:

Затем создаём БД snort (это нужно и тем, у кого MySQLуже давно настроена):

Иногда слова CREATE DATABASE пишут заглавнымибуквами, но в данном случае это не важно. Далее следу-ет выйти из БД командой:

Теперь, после того как мы установили пароль для за-хода в БД, нам следует набирать пароль при входе в БД изаходить уже другой командой, с лишним ключом «-p»,говорящим о необходимости запрашивать пароль:

на запрос пароля при входе следует вводить «ваш_па-роль2», заданный выше. Далее необходимо создатьпользователей, от имени которых мы будем работать с БД,задать им права на выполнение тех или иных действий,пароли и структуру таблиц БД snort. Количество таблиц,которые использует Snort, велико для того, чтобы зада-вать их все вручную: schema event signature sig_reference reference reference_system sig_class sensor iphdr tcphdr udphdr icmphdr opt data encoding detail

Это долго и неудобно, велика вероятность ошибки. По-этому лучше воспользоваться уже готовым cписком ко-манд, благо для популярных БД они поставляются с дист-рибутивом Snort в директории contrib.

Нужный нам файл называется create_mysql. Мы огра-ничимся лишь быстрым просмотром этого файла для оз-накомления, а если у вас будет своя, уникальная БД, тог-да вам лучше взять подобный файл и разобраться соструктурой таблиц досконально, а пока я не вижу смыслапридумывать велосипед.

Создать описанную структуру можно командой:

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

Запускаем:

Введя ваш_пароль2, в приглашении БД указыва-ем, что мы хотим подключиться и работать с БД snort.

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

В ответ на это мы должны увидеть множество строчеквида:

означающих, что выполнение той или иной SQL-коман-ды прошло успешно. В директории /var/lib/mysql/snortдолжны появиться файлы, соответствующие созданнымтаблицам.

Далее нам необходимо создать пользователя snort, отимени которого Snort будет работать с БД, задать ему па-роль и вручить ему права на те или иные действия с БДsnort. Например, на добавление новых записей в табли-цы и пр.

Явной команды вроде adduser для добавления пользо-вателей, как в Linux, здесь нет, объясняется это тем, чтосведения о пользователях хранятся также в самой БД веё таблицах, поэтому при задании каких-либо атрибутовпользователю, то есть его прав или пароля, пользовательавтоматически вносится в БД. Именно исходя из сообра-жений безопасности по доступу к таблице с даннымипользователей мы выше ввели пароль для суперпользо-вателя БД.

Вручаем права пользователю snort:

# mysql -u root

mysql> set password for ↵'root'@'localhost'=password('âàø_ïàðîëü¹2');

Query OK, 0 rows affected (0.39 sec)

mysql> create database snort;

mysql> exit

# mysql -u root -p

# mysql -D snort -u root ↵-p < /progi/snort-2.0.2/contrib/create_mysql

# mysql -u root -p

mysql> connect snort

mysql> source create_mysql

Query OK, 0 rows affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)

Page 68: 012 Системный Администратор 11 2003

66

безопасность

для того чтобы можно было работать с БД, локально за-пускаем всё то же самое, но для snort@localhost:

Далее, забегая вперёд, создадим ещё одного пользо-вателя и вручим ему права только на просмотр БД. В прин-ципе, если этим пользователем будет php-скрипт на на-шем компьютере, достаточно одной (второй) записи длялокального доступа. Пользователя назовём acidviewer, аиз прав дадим ему те же, что и выше, кроме праваDELETE.

Теперь зададим пароли для созданных аккаунтов. Таккак информация о паролях хранится в БД mysql, а мысейчас работаем с БД snort, переключимся на первую.

Поскольку аккаунтов для одного и того же пользова-теля два, один для доступа извне, а другой с localhost,то пароли будут задаваться также два раза. Можно за-дать разные пароли, но будет велик риск запутаться. Па-роль ваш_пароль1 используется тот, что мы указаливыше при редактировании файла snort.conf в третьейсекции. Пароль для acidviewer следует придумать, назо-вём его ваш_пароль3.

Далее сбрасываем привилегии и выходим.

Сейчас Snort полностью готов для того, чтобы вестилоги в созданную нами БД.

Замечание: дотошный читатель скажет, что пользова-телю snort мы задали несколько больше привилегий, чемему это необходимо. Сделано это было специально с це-лью не запутывать читателя лишней информацией и лиш-ними пользователями. Поэтому два пользователя былиобъединены в одного и от имени snort будет работать нетолько Snort, но и программа (скрипт), с помощью кото-рой мы будем просматривать БД и, возможно, редакти-ровать её. Как раз для редактирования расширенные пра-ва и нужны.

Пробуем запустить Snort вручную.

Параметр, указывающий на каком интерфейсе будетслушать Snort: «-i eth0», можно опустить.

Замечание: если у вас пароль, указанный в snort.conf(ваш_пароль1), не соответствует заданному в БД дляпользователя snort (тоже ваш_пароль1) из-за ошибкив написании, то вам может выдасться в процессе запускаSnort сообщение:

Если вы следовали изложенному выше, у вас проблембыть не должно.

В случае успешного ручного запуска создаём скриптдля автоматизации этого процесса при загрузке компью-тера. Скрипт назовём snortd и поместим его в /etc/rc.d/init.d:

Замечание: закомментированная строчка «ifconfigeth0 up» имеет следующий смысл: если при каких-то ус-ловиях (смена номера запуска или какой-то сбой при за-пуске network) Snort будет запускаться до запуска сетии поднятия интерфейса, то при её наличии ошибки не

mysql> grant CREATE,INSERT,SELECT,DELETE,UPDATE ↵on snort.* to snort@localhost;

mysql> grant CREATE,INSERT,SELECT,UPDATE ↵on snort.* to acidviewer;

mysql> grant CREATE,INSERT,SELECT,UPDATE ↵on snort.* to acidviewer@localhost;

mysql> connect mysql

mysql> set password for ↵'snort'@'localhost'=password('âàø_ïàðîëü¹1');

mysql> set password for 'snort'@'%'=password('âàø_ïàðîëü¹1');mysql> set password for ↵

'acidviewer'@'localhost'=password('âàø_ïàðîëü¹3');mysql> set password for ↵

'acidviewer'@'%'=password('âàø_ïàðîëü¹3');

mysql> flush privileges;mysql> exit

# /usr/local/bin/snort -o -i eth0 -d -c /etc/snort/snort.conf

ERROR: database: mysql_error: Access denied for user:'snort@localhost' (Using password: YES)

#!/bin/bash## snortd Start/Stop the snort IDS daemon.## chkconfig: 2345 79 11# description: snort is a lightweight network intrusion# detection tool that currently detects more than 1100 host# and network vulnerabilities, portscans, backdoors, and more.## June 10, 2000 -- Dave Wreski <[email protected]># - initial version## July 08, 2000 Dave Wreski <[email protected]># - added snort user/group# - support for 1.6.2

# Source function library.. /etc/rc.d/init.d/functions

# Specify your network interface hereINTERFACE=eth0

# See how we were called.case "$1" in

start)echo -n "Starting snort: "# ifconfig eth0 updaemon /usr/local/bin/snort -o -i $INTERFACE ↵

-d -D -c /etc/snort/snort.conftouch /var/lock/subsys/snortsleep 3if [ -f /var/log/snort/alert ]thenrm /var/log/snort/alertfiecho;;

stop)echo -n "Stopping snort: "killproc snortrm -f /var/lock/subsys/snortecho;;

restart)$0 stop$0 start;;

status)status snort;;

*)echo "Usage: $0 start|stop|restart|status"exit 1

esac

exit 0

mysql> grant CREATE,INSERT,SELECT,DELETE,UPDATE ↵on snort.* to snort;

Page 69: 012 Системный Администратор 11 2003

6711(12), ноябрь 2003

безопасность

будет. Повторное поднятие уже поднятого интерфейсаошибок давать не должно. Строчку «rm /var/log/snort/alert»и несколько соседних можно закомментировать, если выне хотите, чтобы у вас при запуске этот файл начиналсяс нуля.

Далее, либо руками прописываем мягкие ссылки на/etc/rc.d/init.d/snortd в директориях /etc/rc.d/rc?.d на запуски останов, соблюдая последовательность запуска, чтобыSnort запускался после MySQL, например:

либо запускаем:

или

(сделать ссылки только для уровня 3), который делает этоза нас.

Автоматизация этого процесса не даёт гарантии того,что запуск Snort окажется после MySQL, а останов на-оборот, поэтому этот момент следует проконтролироватьвручную, посмотрев, чтобы номер у S??snortd был боль-ше, чем у S??mysqld, а номер у K??snortd был меньше,чем у K??mysqld.

Напомню, что в дистрибутиве Snort, в директорииcontrib имеется файл S99snort, аналогичный snortd.

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

В любом случае в ответ на ваши действия вы должныувидеть зелёное ok, а на команду status вам должно вы-даваться, что Snort выполняется.

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

Просмотр содержимого БД snortЕсли компьютер с установленным и правильно запущен-ным Snort подключить к сети Интернет напрямую, то естьс использованием реального IP-адреса, то менее чем че-рез несколько минут в БД snort появятся новые записи.(В последнее время львиную долю этих записей состав-ляют ICMP-сканирования.) Появление новых записей вБД не так наглядно для конечного пользователя, как еслибы логи велись в файл, а мы бы запустили:

для просмотра вновь появляющихся записей или:

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

Для начала нам необходимо подключиться к СУБДMySQL. Сделать это можно как от имени суперпользо-вателя root, так и от имени заведённых пользователейsnort и acidviewer. Выберем пользователя snort и выпол-ним команду:

В качестве пароля необходимо ввести ваш_пароль1.Вся последующая работа с БД ведётся с помощью

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

Замечание: регистр команд не имеет значения, MySQLобработает запрос, даже если вы смешаете регистры,однако мы будем писать команды в верхнем регистре, какстандарт де-факто при использовании языка SQL. Коман-ды можно вводить в несколько строчек, концом командысчитается знак «;», а не символ перевода строки. Этоочень удобно при написании длинных команд, так как нетеряется наглядность.

В ответ на запрос мы должны увидеть табличку с тре-мя БД: mysql, snort и test.

Выберем БД snort:

и посмотрим, какие таблицы у нас имеются:

# ln -s /etc/rc.d/init.d/snortd /etc/rc.d/rc3.d/S79snortd# ln -s /etc/rc.d/init.d/snortd /etc/rc.d/rc3.d/K11snortd

# chkconfig snortd on

# chkconfig --level 3 snortd on

# tail -f èìÿ_ýòîãî_ôàéëà

# mysql -u snort -p

mysql> SHOW DATABASES;

mysql> CONNECT snort;

mysql> SHOW TABLES;

# cat èìÿ_log_ôàéëà

Page 70: 012 Системный Администратор 11 2003

68

безопасность

Как раз все те, которые мы создавали ранее.Чтобы посмотреть заголовки столбцов выбранной

нами таблицы event, дадим команду:

либо

По интуитивным соображениям можно понять, что cidотвечает за нумерацию событий. С помощью команды:

мы можем получить список нескольких первых событий.

Полученная таблица содержит 4 столбца с заголовка-ми, которые мы видели ранее: sid или sensor ID – тот сенсор, с которого была получе-

на информация; cid или ID counter – грубо говоря, номер события. signature – номер сигнатуры, которая была обнаружена; timestamp – временная метка, чтобы знать, когда про-

изошло событие.

Замечание 1: нумерация событий для разных сенсоровне сквозная, поэтому первичным ключом в данной табли-це являются два поля sid и cid. Это можно заметить, есливнимательно посмотреть содержимое файла create_mysql.

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

Замечание 3: давать команду для показа всех строкданной таблицы:

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

Чтобы понять, что такое сигнатура номер 2 или тотномер, что будет у вас в таблице, обратимся к таблицеsingature и посмотрим содержимое строки с sig_id=2;

Если нам не нужна лишняя информация, то мы можемеё не выводить, например, выполнив запрос только на вы-вод содержимого полей sig_id и sig_name следующим об-разом:

Как мы видим для моего случая, это «STEALTH ACTIVITY(SYN FIN scan) detection».

Подобным образом можно просматривать все нужныенам таблицы и получать информацию не хуже, чем если бымы читали текстовый файл. Используя более хитрые запро-сы, можно выводить информацию из нескольких таблиц ввиде одной. Например, если мы хотим посмотреть несколь-ко первых событий, как и ранее, только без столбца sid ичтобы вместо signature выводился не номер, а сразу слова-ми разъяснение, то есть sig_name из таблицы signature, токоманда, выполняющая это, будет выглядеть так:

Вот результат её выполнения.

mysql> SHOW COLUMNS FROM event;

mysql> DESCRIBE event;

mysql> SELECT * FROM event WHERE cid<10;

mysql> SELECT * FROM event;

mysql> SELECT * FROM signature WHERE sig_id=2;

mysql> SELECT sig_id,sig_name FROM signature WHERE sig_id=2;

mysql> SELECT event.cid,signature.sig_name,event.timestamp ↵FROM event,signature ↵WHERE event.signature=signature.sig_id AND cid<10;

Page 71: 012 Системный Администратор 11 2003

6911(12), ноябрь 2003

безопасность

Обратившись к [5], можно научиться выполнять и бо-лее виртуозные запросы. В таблице iphdr для каждогособытия по его cid точно так же можно узнать IP-адресисточника атаки и на какой адрес она была нацелена.

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

phpMyAdminДля работы phpMyAdmin [8] и ACID необходимо, чтобыбыли установлены пакеты php и php-mysql, у меня этобыли php-4.1.2-7.3.6 php-mysql-4.1.2-7.3.6, на 2-м и 3-мдисках RedHat v.7.3, соответственно, имеются более ран-ние версии.

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

Для начала следует сходить на сайт этой програм-мы [8] и скачать последнюю версию с какого-нибудь зер-кала. На момент написания статьи последней версиейбыла 2.5.4.

После скачивания, например [9], и проверки хеш-функции:

содержимое архива следует поместить в папку для php-скриптов. Если не следовать досконально файлуDocumentation.txt и закрыть глаза на некоторые вопросыбезопасности, то удобнее будет создать директориюphpmyadmin, например, в /var/www/html и содержимоеphpMyAdmin-2.5.4, то есть всё то, что находится в архиве,поместить туда (в /var/www/html/phpmyadmin). Далее сле-дует внести небольшое исправление в /var/www/html/phpmyadmin/config.inc.php в строку:

указав там свой пароль от БД:

Остальные настройки, как host, port, user и пр., менятьне стоит, так как по умолчанию всё должно работать.

Если вы установили правильный пароль, то при попыт-ке обращения к директории phpmyadmin веб-сервера, под-держивающего php, должно выдасться следующее:

Многих должен порадовать тот факт, что поддержива-ется русский язык и есть выбор различных кодировок. Да-лее, если щёлкнуть на «Базы данных», должны высве-титься те БД, которые имеются в MySQL.

Щёлкая на Snort, мы выбираем эту БД и попадаем кследующему окну, где сразу видны названия тех таблиц,которые содержатся в этой БД.

Щёлкая на название таблицы event слева, получаеминформацию об этой таблице:

# md5sum phpMyAdmin-2.5.4-php.tar.gz

(MD5: 76fc7216aa2f132888c7173a6668af46)

$cfg['Servers'][$i]['password'] = '';

$cfg['Servers'][$i]['password'] = 'âàø_ïàðîëü¹2';

Page 72: 012 Системный Администратор 11 2003

70

безопасность

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

Задав себе повторно тот же, что и ранее, вопрос, а имен-но: «Что за событие означает сигнатура номер 2?», мы мо-жем также просто щёлкнуть на имя таблицы signature слева иувидеть параметры этой таблицы, затем внизу, не меняя SQL-запроса в окошке, нажав на кнопку «Пошёл», получаем со-держимое первых 30 строк, среди которых находим нужную.

Соответственно, если изменить запрос, например, на:

мы получим тот же результат, что и ранее мы получаличерез консольного клиента. Именно поэтому, какой быоболочка удобной ни была, следует знать SQL, так какэто основа работы с БД.

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

После того как мы убедились, что наша БД содержитинформацию, попытаемся настроить специализирован-ные и более удобные средства просмотра БД, а именноACID. Продвинутые читатели, если их не устроит ACID,могут также пропустить всё, что говорится ниже, и само-стоятельно «изобрести велосипед» не хуже. Со всеми жеостальными начнём настраивать уже готовый пакет –ACID, поставляемый вместе с дистрибутивом Snort (в ди-ректории contrib).

ACIDACID [10] расшифровывается как Analysis Console forIncident/Intrusion Databases и дословно переводится какконсоль для анализа баз данных с инцидентами/атаками/вторжениями. В общем, для нашего случая это то, чтодоктор прописал, тем более что данная программа быларазработана координационным центром CERT [11] какчасть проекта AIRCERT [12].

ACID из себя представляет набор php-cкриптов, спо-собных выполнять различные функции, в том числе на-чиная с формирования запросов на получение данныхиз БД аналогично тому, как это мы делали ранее, и за-канчивая декодированием пакетов с целью их болееудобного визуального восприятия и подсчётом статис-тических данных.

Содержимое БД при этом может формироваться нетолько за счёт системы обнаружения атак, но также мо-жет пополняться данными с различных межсетевых экра-нов и средств сетевого мониторинга.

Для того чтобы наглядно оценить удобство исполь-зования данного средства, необходимо также иметь ка-кой-либо из установленных веб-серверов с поддержкойphp, например, всё тот же apache. Плюс необходимоиметь несколько дополнительных средств, нужных дляработы ACID: ADODB [13]; JpGraph [15]; PHPlot [16]; GD [17].

mysql> SELECT event.cid,signature.sig_name,event.timestamp ↵FROM event,signature ↵WHERE event.signature=signature.sig_id AND cid<10;

Page 73: 012 Системный Администратор 11 2003

7111(12), ноябрь 2003

безопасность

«ADODB – это абстрактный класс доступа к базамданных, написанный на PHP» [14].

«Для тех, кто в танке, поясню на примере. Предполо-жим, вы написали скрипт под MySQL, и тут заказчик го-ворит вам, что хостинг меняется, и там есть толькоPostgreSQL.

Если вы не использовали класс абстрактного доступак базам данных, то вам пришлось бы: заменить весь код работы с MySQL на postgreSQL; переписать SQL-запросы (так как есть отличия).

Если бы вы использовали абстрактный слой досту-па к БД, то вам скорее всего не пришлось бы менятьphp-код (только в одном месте указали бы, что исполь-зуете PostgreSQL) и изменить SQL-запросы (хотя иног-да и это не понадобилось бы). Я намеренно в этом опи-сании использовал фразу «абстрактный класс доступак БД», поскольку ADODB – не единственный подобныйкласс. Наиболее известные конкуренты: Pear::DB иPear::MDB» [14].

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

PHPLOT – фактически то же самое, что и JpGraph,позволяет рисовать графики. Требует наличия библио-теки GD.

GD – это библиотека ANSI C, необходимая для дина-мического создания картинок. GD может создавать кар-тинки в различных форматах, в том числе в PNG и JPEG.(GD не поддерживает формат GIF.)

Пробежав по разделам download вышеописанных про-дуктов, скачиваем последние стабильные версии и про-веряем их хеши: ACID 0.9.6b23 [18] ADODB 3.94 [19] JpGraph 1.13 [20] PHPlot 4.4.6 [21] GD 2.0.15 [22]

Содержимое архивов помещаем в /var/www/html:

Для JpGraph создаём директорию /var/www/html/jpgraphи содержимое архивной поддиректории src из архива по-мещаем туда.

В именах директорий gd-2.0.15, phplot-4.4.6 убираемномера версий либо делаем мягкие ссылки на эти дирек-тории:

или

Напоминание: для работы ACID необходимо наличиеустановленных пакетов php и php-mysql (подробнее см.выше).

Далее следует настроить ACID на работу с нашей БДи показать ему, куда мы скопировали дополнительные па-кеты, для этого в файле /var/www/html/acid_conf.php не-обходимо изменить переменные:

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

Далее обратимся по адресу: http://localhost/acid/. Припервом запуске ACID нам сообщит, что дополнительныетаблицы, необходимые для его работы, не созданы:

Для их создания нам необходимо нажать на «Setuppage». После чего у нас отобразится следующее окно:

В котором следует нажать на кнопку «Create ACID AG».После её нажатия у нас отобразится окно:

d8c49614393fa05ac140de349f57e438 acid-0.9.6b23.tar.gz78aac17c7fd1d0e0f6685153facb8c36 adodb394.tgz6ededf633b4fd054662ec123c7825fbb gd-2.0.15.tar.gzad78bd1658e3983bb6afbc074f029698 jpgraph-1.13.tar.gz8a5b34e09fa29f20e31814cbd8c0d0b5 phplot-4.4.6.tar.gz

# tar -zxvf acid-0.9.6b23.tar.gz -C /var/www/html# tar -zxvf adodb394.tgz -C /var/www/html# tar -zxvf gd-2.0.15.tar.gz -C /var/www/html# tar -zxvf phplot-4.4.6.tar.gz -C /var/www/html

# tar -zxvf jpgraph-1.13.tar.gz -C /var/www/html# mkdir /var/www/html/jpgraph# mv /var/www/html/jpgraph-1.13/src/* /var/www/html/jpgraph# rm -rf /var/www/html/jpgraph-1.13

# cd /var/www/html# mv gd-2.0.15 gd# mv phplot-4.4.6 phplot

# cd /var/www/html# ln -s gd-2.0.15 gd# ln -s phplot-4.4.6 phplot

$DBlib_path = "../adodb";$alert_dbname = "snort";$alert_user = "snort";$alert_password = "âàø_ïàðîëü¹1";$ChartLib_path = "../jpgraph";

Page 74: 012 Системный Администратор 11 2003

72

безопасность

В первых строчках мы можем прочитать, что в на-шей БД (snort) дополнительно были созданы четыре таб-лицы: acid_ag; acid_ag_alert; acid_ip_cache; acid_event.

После этого Snort готов к работе. Либо нажимаем вконце этой страницы на «Main page», либо опять набира-ем адрес: http://localhost/acid/.

Если у вас БД маленькая, то страница должна отобра-зиться сразу, если же БД у вас большая, например, болееполугода, то тогда придётся подождать вплоть до несколь-ких минут. В конце у вас должна выводиться картинка,похожая на следующую:

Если это так, то вы правильно всё сделали.Далее советую вам сделать два необязательных, но

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

Во время работы с БД мы уже создали необходимого

нам пользователя acidviewer с меньшими правами. Сей-час мы доведём начатое до конца.

Для начала скопируем acid:

Далее отредактируем файл /var/www/html/acidviewer/acid_conf.php, заменив в нём:

на

Интерфейс и кнопки по удалению записей останутся,но при их активации будет выводиться сообщение с ошиб-кой о том, что у пользователя недостаточно прав для уда-ления. Создание данного аккаунта удобно тем, что выможете его давать вашим знакомым администраторам илидругим людям для просмотра с меньшей опасностью по-терять записи в вашей БД. Обращаться к нему следуетhttp://localhost/acidviewer/, естественно, вместо localhostследует писать ваш адрес. И второе, чтобы кто попалочерез веб-интерфейс не заходил к вам на сервер и несмотрел ваши данные в ACID, создадим пользователей спаролями на доступ к acid и acidviewer. Для этого созда-дим директорию, где будет храниться файл с паролями,например /usr/lib/apache/passwords.

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

Опция «-c» означает create (создать файл), указывайтееё, если у вас нет файла /usr/lib/apache/passwords/passwords.

Далее добавим второго пользователя view с паролемваш_пароль5:

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

Затем необходимо внести правку в /etc/httpd/conf/httpd.conf, дописав туда следующее:

# cp -R /var/www/html/acid /var/www/html/acidviewer

$alert_user = "snort";$alert_password = "âàø_ïàðîëü¹1";

$alert_user = "acidviewer";$alert_password = "âàø_ïàðîëü¹3";

# mkdir /usr/lib/apache/passwords

# htpasswd -c /usr/lib/apache/passwords/passwords admin

# htpasswd /usr/lib/apache/passwords/passwords view

<Directory "/var/www/html/acid"> AuthType Basic AuthName "commentline1" AuthUserFile /usr/lib/apache/passwords/passwords Require user admin AllowOverride None

Page 75: 012 Системный Администратор 11 2003

7311(12), ноябрь 2003

безопасность

Замечание: следует внимательно посмотреть, в ка-кую секцию вы дописываете эти строчки, и проследитьза другими секциями, может случиться так, что дописы-вать их придётся несколько раз, каждый раз для своейсекции. Иначе может возникнуть ситуация, когда, напри-мер, для http-доступа у вас пароль спрашиваться будет,а для https – нет, или наоборот.

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

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

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

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

Литература, ссылки:1. П. Закляков. Обнаружение атак: теория и практика,

Snort. – //Журнал «Системный администратор»10(11), октябрь 2003 г. – 48-67 с.

2. Раздел документации к Snort: http://www.Snort.org/docs/3. Snort Installation Manual on RedHat 7.3: http://

www.Snort.org/docs/Snort-rh7-mysql-ACID-1-5.pdf4. Snort Installation Manual on RedHat 9.0: http://

www.Snort.org/docs/Snort_acid_rh9.pdf5. Л.Аткинсон. MySQL. Библиотека профессионала: Пер.

с англ. – М.: Издательский дом «Вильямс», 2002.6. MySQL The World’s Most Popular Open Source Database:

http://www.mysql.com/, раздел download http://www.mysql.com/downloads/index.html

7. П.Дюбуа. Применение MySQL и Perl в Web-приложе-ниях: Пер. с англ. – М.: Издательский дом «Вильямс»,2002.

8. phpMyAdmin – MySQL DB administration tool: http://www.phpmyadmin.net

9. Ссылка на одно из зеркал, откуда можно скачатьphpMyAdmin: http://unc.dl.sourceforge.net/sourceforge/phpmyadmin/phpMyAdmin-2.5.4-php.tar.gz

10.Сайт ACID (Analysis Console for Intrusion Databases):http://acidlab.sourceforge.net/

11.Сайт координационного центра CERT: http://www.cert.org/

12.ACID (часть проекта AIR-CERT): http://www.cert.org/kb/acid/

13.ADOdb Database Library for PHP: http://php.weblogs.com/adodb

14.М.Матюхин. Абстрактный доступ к БД с помощьюADODB, http://detail.phpclub.net/2003-08-19.htm

15.JpGraph – OO Graph Library for PHP: http://www.aditus.nu/jpgraph/

16.PHPLOT: http://www.phplot.com/17.GD Graphics Library: http://www.boutell.com/gd/18.http://acidlab.sourceforge.net/acid-0.9.6b23.tar.gz19.http://phplens.com/lens/dl/adodb394.tgz20.http://members.chello.se/jpgraph/jpgdownloads/jpgraph-

1.13.tar.gz21.http://ftp1.sourceforge.net/phplot/phplot-4.4.6.tar.gz22.http://www.boutell.com/gd/http/gd-2.0.15.tar.gz

# /etc/rc.d/init.d/httpd restart

</Directory>

<Directory "/var/www/html/acidviewer"> AuthType Basic AuthName "commentline2" AuthUserFile /usr/lib/apache/passwords/passwords Require user view AllowOverride None</Directory>

Page 76: 012 Системный Администратор 11 2003
Page 77: 012 Системный Администратор 11 2003
Page 78: 012 Системный Администратор 11 2003

76

web

АНДРЕЙ УВАРОВ

ДМИТРИЙ ГОРЯИНОВ

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

Page 79: 012 Системный Администратор 11 2003

7711(12), ноябрь 2003

web

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

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

Fusebox – это технология создания веб-приложений, на-чавшаяся с небольших модулей и развившаяся до приме-нимости в средних и больших информационных системах.Изначально Fusebox создавалась для платформы Coldfusion.Сейчас существуют реализации для PHP, J2EE, MS ASP иLasso. Т.е. для её применения вам скорее всего не придетсяусаживаться за изучение нового языка программирования.

Основные цели, преследуемые Fusebox: Читаемость кода; Структурность и законченность приложений (Applications); Наглядность кода программ; Упрощение проектного менеджмента; Защищённость кодов и проекта в целом; Утилизация кода; Создание портативных «Partapplications».

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

Fusebox-приложение состоит из трех основных компо-нентов: оператор выбора (switch), обработчик события(fuseaction) и подключаемые модули (fuse).

Оператор выбора (switch) – это своеобразный менед-жер задач – вся работа приложения ведется через него.Обращения к той или иной функции приложения (выбор)осуществляется в зависимости от переданного операто-ру значения параметра «fuseaction». Метод передачи па-раметра определяется Fusebox автоматически. Вы може-те передать эту переменную методом POST или в строкезапроса и быть уверенным, что ваша программа получитпередаваемое значение.

Таким образом, внутри оператора выбора описывают-ся возможные значения параметра «fuseaction» и обра-ботка (fuseaction) этого значения приложением: запуск со-ответствующего кода или подключение нужного модуля(fuse). Модуль может быть выполнимым сценарием илипросто набором страниц.

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

Создайте для примера подкаталог «fuse_sample» внут-ри корневой директории веб-сервера. Для пользователейвеб-сервера Apache (<http://httpd.apache.org>) это поумолчанию каталог /usr/local/apache/htdocs или /var/www(этот параметр хранится в файле настроек httpd.conf и

называется ServerRoot), а для пользователей MS-IIS(<http://www.microsoft.com/iis>), скорее всего каталогC:\inetpub\wwwroot.

Файлы Fusebox 3.0 for PHP: <http://www.fusebox.org/index.cfm?&fuseaction=phpframework.default> (а так же длядругих реализаций) можно получить по интернет-адресу:<h t tp : / /www. fusebox .o rg / i ndex .c fm?&fuseac t ion=framework.languages>. Выбираем нужную нам ссылку(«Fusebox 3.0 for PHP» <http://www.fusebox.org/index.cfm?&fuseaction=phpframework.default>). На следующей страни-це выбираем ссылку «Download Core Files».

В индексном файле index.php описывается только однодействие – выбирается ядро Fusebox для использования.Нужное значение зависит от того, какую версию PHP выиспользуете. Если этого не происходит, то можно выбратьвручную, закомментировав соответствующие строки, илипереименовать файл fbx_Fusebox3.0_PHP4.0.6.php илиfbx_Fusebox3.0_PHP4.1.x.php в index.php.

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

Первым делом (помните основные компоненты при-ложения?) посмотрим на оператор-переключатель. Онописан в файле fbx_Switch.php. Изменим его первые двеветви («mainpage» и «Fuse-box.defaultFuseaction») на:

Создадим в том же каталоге (fuse_sample) скриптout_simple.php следующего содержания:

Замечание: никогда не ленитесь писать «<?php» приоформлении PHP-кода.

И скрипт out_main.php, который будет отрабатыватьпо умолчанию:

<?php echo"This is main page"; ?>

<html><body><table width="50%" border="1" cellpaddin="3" ↵

cellspacing="0" align="center"><tr> <td colspan="0" align="center"> <h2>Sample application</h2> </td></tr><tr> <td width="100%" valign="top"> <?php echo $Fusebox[ "layout" ]; ?> </td></tr><tr> <td colspan="2"> <?php Module( "index.php", array( "fuseaction"=>"bar.menu", ↵

"stoplayout"=>"true" ) ); ?> </td></tr></table></body></html>

switch($Fusebox["fuseaction"]) case "mainpage":

case "Fusebox.defaultFuseaction":include( "out_simple.php" );break;

default: //îñòàëüíîå ñîäåðæèìîå îñòàâèì áåç èçìåíåíèé

Page 80: 012 Системный Администратор 11 2003

78

web

Этот пример – простая и надуманная демонстрацияработы технологии Fusebox. В реальном программирова-нии не стоит вот так совмещать HTML- и PHP-коды. Да,язык PHP (и не только он) это позволяет и часто это пре-подносится как возможность быстро научиться писатьпростые сценарии.

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

Ну и еще один довод: разделив HTML- и PHP-коды спомощью любой системы шаблонов, мы заранее позабо-тимся о более легкой возможности сменить дизайн сай-та. HTML-верстальщик сможет работать именно с HTML-частью. А от программиста не потребуется переносить всеизменения в верстке в код PHP-скриптов.

В файле fbx_Settings.php изменим первое условие на:

Этим мы определим новое значение «по умолчанию»для параметра «fusecation».

Далее мы пропишем в файле fbx_Circuits.php (описы-вает состав приложения) следующее:

Так мы создаём привязку к структуре каталогов нашегоприложения. Основное приложение располагается в ката-логе «fuse_sample», а его подприложение – «fuse_sample/bar».

В файл fbx_Layouts.php пропишем:

Займемся подприложением. В каталоге «fuse_sample»создадим подкаталог «bar» и скопируем в него файлыfbx_Settings.php, fbx_Layouts.php, fbx_Switch.php.

Сейчас наша цель – создать горизонтальное меню. Из-меним содержимое файла fbx_Switch.php на следующее:

Содержимое файла fbx_Layouts.php изменим на:

И наконец, создадим сам скрипт-меню out_barmenu.php:

И наше простейшее приложение готово.В реальности все несколько сложнее, но принцип тот

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

Так как все запросы к приложению в Fusebox соверша-ются через один-единственный файл, то целесообразноорганизовать перенаправление любых запросов пользова-теля на него. Это нужно для предотвращения попыток из-лишне любопытного пользователя обратиться к какому-тоэлементу нашего приложения напрямую (например, ввес-ти в адресной строке браузера http://our_site/fuse_sample/out_main.php).

Для этого есть несколько способов. Если вы используе-те веб-сервер Apache, имеете возможность работы с фай-лами конфигурации доступа к директории (файлы .htaccess)и у вас установлен модуль Rewrite, это можно сделать сле-дующим образом. Создайте в каталоге вашего приложения(fuse_sample) файл .htaccess следующего вида:

Таким образом мы перенаправим все HTTP-запросык подкаталогу fuse_sample на файл /fuse_sample/index.php.Подробности о модуле Rewrite и использовании директивперенаправления можно найти в документации к веб-сер-веру Apache.

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

//In case no fuseaction was given, I'll set up one to use//by defaultif( !isset( $attributes[ "fuseaction" ] ) )

$attributes["fuseaction"] = "home.mainpage";

$Fusebox["circuits"]["home"] = "fuse_sample";$Fusebox["circuits"]["bar"] = "fuse_sample/bar";

 ôàéë fbx_Layouts.php ïðîïèøåì:

if ( $attributes["stoplayout"] ) $Fusebox["layoutFile"] = ""; $Fusebox["layoutDir"] = "";else $Fusebox["layoutFile"] = "out_main.php"; $Fusebox["layoutDir"] = "";

switch($Fusebox["fuseaction"]) case "mainpage":

case "Fusebox.defaultFuseaction":echo "Bar's main page";

break;case "menu":$XFA[ "main" ] = "home.mainpage";

$XFA[ "bar1" ] = $Fusebox[ "thisCircuit" ] . ".bar1"; $XFA[ "bar2" ] = $Fusebox[ "thisCircuit" ] . ".bar2"; $XFA[ "bar3" ] = $Fusebox[ "thisCircuit" ] . ".bar3"; include( "out_barmenu.php" );

break; case "bar1":

$Fusebox["layoutFile"] = "";$Fusebox["layoutDir"] = "";

<?phpecho '<center><strong>';echo '<a href="index.php?fuseaction=home.mainpage"> ↵

Main</a> | ';echo '<a href="index.php?fuseaction='.$XFA[ "bar1" ].'"> ↵

Bar 1</a> | ';echo '<a href="index.php?fuseaction='.$XFA[ "bar2" ].'"> ↵

Bar 2</a> | ';echo '<a href="index.php?fuseaction='.$XFA[ "bar3" ].'"> ↵

Bar 3</a>';echo '</strong></center>';?>

RewriteEngine onOptions +FollowSymlinksDirectoryIndex index.phpRewriteBase /fuse_sample/RewriteCond %REQUEST_FILENAME !(index.php)RewriteRule ^(.*)$ index.php [QSA,R]

echo "this is content of bar1"; break;

case "bar2":echo "this is content of bar2";

break; case "bar3":

echo "this is content of bar3";break;

default: //îñòàëüíîå ñîäåðæèìîå îñòàâèì áåç èçìåíåíèé

Page 81: 012 Системный Администратор 11 2003
Page 82: 012 Системный Администратор 11 2003

80

образование

Page 83: 012 Системный Администратор 11 2003

8111(12), ноябрь 2003

образование

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

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

С другой стороны, для практического использованиякорректирующих кодов можно и не вникать в их сущность,просто откомпилировав исходные тексты кодера/декоде-ра Рида-Соломона, приведенные в данной статье. Такжевы можете воспользоваться любой законченной библио-текой, поставляемой сторонними разработчиками. В каче-стве альтернативного примера в заключение этой статьибудет кратно описан интерфейс библиотеки ElByECC.DLL,разработанной компанией «Elaborate Bytes» и распрост-раняемой вместе с популярным копировщиком Clone CD.Известнейший прожигатель дисков всех времен и наро-дов Ahead Burning ROM имеет аналогичную библиотеку,размещенную в файле NEWTRF.DLL.

ЛегендаНапомним читателю основные условные обозначения, ис-пользуемые в этой статье. Количество символов кодируе-мого сообщения (называемого также информационнымсловом) по общепринятому соглашению обозначается бук-вой k; полная длина кодового слова, включающего в себякодируемые данные и символы четности, – n. Отсюда, ко-личество символов четности равно: n – k. За максималь-ным количеством исправляемых ошибок «закреплена» бук-ва t. Поскольку для исправления одной ошибки требуетсядва символа четности, общее количество символов четно-сти равно 2t. Выражение RS(n, k) описывает определен-ную разновидность корректирующих кодов Рида-Соломо-на, оперирующую с n-символьными блоками, k-символов,из которых представляют полезные данные, а все осталь-ные задействованы под символы четности.

Полином, порожденный на основе примитивного чле-на α, называется порожденным или сгенерированным(generate) полиномом.

Кодировщик (encoder)Существует по меньшей мере два типа кодеров Рида-Соломона: несистематические и систематические коди-ровщики.

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

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

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

Архитектурно кодировщик представляет собой сово-купность сдвиговых регистров (shift registers), объединен-ных посредством сумматоров и умножителей, функцио-нирующих по правилам арифметики Галуа. Сдвиговыйрегистр (иначе называемый регистром сдвига) представ-ляет последовательность ячеек памяти, называемых раз-рядами, каждый из которых содержит один элемент поляГалуа GF(q). Содержащийся в разряде символ, покидаяэтот разряд, «выстреливается» на выходную линию. Од-новременно с этим разряд «засасывает» символ, находя-щийся на его входной линии. Замещение символов про-исходит дискретно, в строго определенные промежуткивремени, называемые тактами.

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

Низкая эффективность программных реализаций ко-деров Рида-Соломона объясняется тем, что разработчикне может осуществлять параллельное объединение эле-ментов сдвигового регистра и вынужден работать с тойшириной разрядности, которую «навязывает» архитекту-ра данной машины. Однако создать 4-элементный 8-бит-ный регистр сдвига параллельного типа на процессорахсемейства IA32 вполне реально.

Ðèñóíîê 1. Óñòðîéñòâî êîäîâîãî ñëîâà

Page 84: 012 Системный Администратор 11 2003

82

образование

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

Здесь: Q(r)(x) и R(r)(x) – соответственно частное и ос-таток на r-шаге рекурсии. Поскольку сложение и вы-читание, выполняемое по модулю два, тождественныдруг другу, для реализации делителя нам достаточноиметь всего два устройства – устройство сложения иустройство умножения, а без устройства вычитанияможно обойтись.

После n-сдвигов на выходе регистра появляется част-ное, а в самом регистре окажется остаток, который и пред-ставляет собой рассчитанные символы четности (они же –коды Рида-Соломона), а коэффициенты умножения с g0по g(2t – 1) напрямую соответствуют коэффициентам ум-ножения порожденного полинома.

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

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

посредством высокоэффективного, но сложно реа-лизуемого алгоритма Берлекэмпа-Месси, либо по-средством простого, но медленного Евклидового ал-горитма;

Ôîðìóëà 1. Äåëåíèå ïîëèíîìà íà êîíñòàíòó ïîñðåäñòâîì óìíî-æåíèÿ è ñëîæåíèÿ

Ðèñóíîê 2. Óñòðîéñòâî ïðîñòåéøåãî êîäåðà Ðèäà-Ñîëîìîíà

Ëèñòèíã 1. Èñõîäíûé òåêñò ïðîñòåéøåãî êîäåðà Ðèäà-Ñîëîìîíà

/*--------------------------------------------------------** êîäèðîâùèê Ðèäà-Ñîëîìîíà* ========================** êîäèðóåìûå äàííûå ïåðåäàþòñÿ ÷åðåç ìàññèâ data[i],* ãäå i=0..(k-1), à ñãåíåðèðîâàííûå ñèìâîëû ÷åòíîñòè* çàíîñÿòñÿ â ìàññèâ b[0]..b[2*t-1].* Èñõîäíûå è ðåçóëüòèðóþùèå äàííûå äîëæíû áûòü ïðåäñòàâëåíû* â ïîëèíîìèàëüíîé ôîðìå (ò.å. â îáû÷íîé ôîðìå ìàøèííîãî* ïðåäñòàâëåíèÿ äàííûõ).* Êîäèðîâàíèå ïðîèçâîäèòñÿ ñ èñïîëüçîâàíèåì ñäâèãîâîãî* feedback-ðåãèñòðà, çàïîëíåííîãî ñîîòâåòñòâóþùèìè ýëåìåíòàìè* ìàññèâà g[] ñ ïîðîæäåííûì ïîëèíîìîì âíóòðè, ïðîöåäóðà* ãåíåðàöèè êîòîðîãî óæå îáñóæäàëàñü â ïðåäûäóùåé ñòàòüå.* Ñãåíåðèðîâàííîå êîäîâîå ñëîâî îïèñûâàåòñÿ ñëåäóþùåé* ôîðìóëîé:* ñ(x) = data(x)*x(n-k) + b(x)*

* íà îñíîâå èñõîäíûõ òåêñòîâ* Simon Rockliff, îò 26.06.1991,* ðàñïðîñòðàíÿåìûõ ïî ëèöåíçèè GNU–––––––––––––––––––––––––––––––––––––––––––––––––––––––––*/encode_rs()

int i, j;int feedback;

// èíèöèàëèçèðóåì ïîëå áèò ÷åòíîñòè íóëÿìèfor (i = 0; i < n - k; i++) b[i] = 0;

// îáðàáàòûâàåì âñå ñèìâîëû// èñõîäíûõ äàííûõ ñïðàâà íàëåâîfor (i = k - 1; i >= 0; i--)

// ãîòîâèì (data[i] + b[n – k –1]) ê óìíîæåíèþ// íà g[i], ò.å. ñêëàäûâàåì î÷åðåäíîé «çàõâà÷åííûé»// ñèìâîë èñõîäíûõ äàííûõ ñ ìëàäøèì ñèìâîëîì áèòîâ// ÷åòíîñòè (ñîîòâåòñòâóþùåãî «ðåãèñòðó» b2t-1,// ñì. ðèñ. 2) è ïåðåâîäèì åãî â èíäåêñíóþ ôîðìó,// ñîõðàíÿÿ ðåçóëüòàò â ðåãèñòðå feedback, êàê ìû// óæå ãîâîðèëè, ñóììà äâóõ èíäåêñîâ åñòü// ïðîèçâåäåíèå ïîëèíîìîâfeedback = index_of[data[i] ^ b[n – k - 1]];

// åñòü åùå ñèìâîëû äëÿ îáðàáîòêè?if (feedback != -1)

// îñóùåñòâëÿåì ñäâèã öåïè bx-ðåãèñòðîâfor (j=n-k-1; j>0; j--)

// åñëè òåêóùèé êîýôôèöèåíò g –// ýòî äåéñòâèòåëüíûé (ò.å. íåíóëåâîé// êîýôôèöèåíò, òî óìíîæàåì feedback// íà ñîîòâåòñòâóþùèé g-êîýôôèöèåíò// è ñêëàäûâàåì åãî ñî ñëåäóþùèì// ýëåìåíòîì öåïî÷êèif (g[j]!=-1) ↵

b[j]=b[j-1]^alpha_to[(g[j]+feedback)%n];else

// åñëè òåêóùèé êîýôôèöèåíò g –// ýòî íóëåâîé êîýôôèöèåíò,// âûïîëíÿåì îäèí ëèøü ñäâèã// áåç óìíîæåíèÿ, ïåðåìåùàÿ ñèìâîë// èç îäíîãî m-ðåãèñòðà â äðóãîéb[j] = b[j-1];

// çàêîëüöîâûâàåì âûõîäÿùèé ñèìâîë â êðàéíèé// ëåâûé b0-ðåãèñòðb[0] = alpha_to[(g[0]+feedback)%n];

else

// äåëåíèå çàâåðøåíî,// îñóùåñòâëÿåì ïîñëåäíèé ñäâèã ðåãèñòðà,// íà âûõîäå ðåãèñòðà áóäåò ÷àñòíîå, êîòîðîå// òåðÿåòñÿ, à â ñàìîì ðåãèñòðå – èñêîìûé// îñòàòîêfor (j = n-k-1; j>0; j--) b[j] = b[j-1] ;

b[0] = 0;

Page 85: 012 Системный Администратор 11 2003

8311(12), ноябрь 2003

образование

нахождения корней данного полинома, обычно реша-ющееся лобовым перебором (алгоритм Ченя);

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

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

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

Синдромный декодерГрубо говоря, синдром есть остаток деления декоди-руемого кодового слова c(x) на порожденный полиномg(x), и, если этот остаток равен нулю, кодовое слово счи-тается неискаженным. Ненулевой остаток свидетельству-ет о наличии по меньшей мере одной ошибки. Остаток отделения дает многочлен, не зависящий от исходного со-общения и определяемый исключительно характеромошибки (syndrome – греческое слово, обозначающее со-

вокупность признаков и/или симптомов, характеризующихзаболевание).

Принятое кодовое слово v с компонентами vi = ci + ei,где i = 0, … n – 1, представляет собой сумму кодовогослова c и вектора ошибок e. Цель декодирования состо-ит в очистке кодового слова от вектора ошибки, описы-ваемого полиномом синдрома и вычисляемого по фор-муле Sj = v(α

j + j0 – 1), где j изменяется от 1 до 2t, а α пред-ставляет собой примитивный член «альфа», который мыуже обсуждали в предыдущей статье. Да, мы снова вы-ражаем функцию деления через умножение, поскольку де-ление – крайне неэффективная в смысле производитель-ности операция.

Блок-схема устройства, осуществляющего вычисле-ние синдрома, приведена на рис. 4. Как видно, она пред-ставляет собой типичный фильтр (сравните ее со схе-мой рис. 2), а потому ни в каких дополнительных пояс-нениях не нуждается.

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

Пример простой программной реализации синдромно-го декодера содержится в листинге 2, и он намного на-гляднее его словесного описания.

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

Если количество искаженных символов не превышает t,между синдромом и локатором ошибки существует сле-дующее однозначное соответствие, выражаемое следу-ющей формулой НОД[xn-1, E(x)] = Λ(x), и вычисление ло-катора сводится к задаче нахождения наименьшего об-щего делителя, успешно решенной еще Евклидом и эле-ментарно реализуемой как на программном, так и на ап-паратном уровне. Правда, за простоту реализации нам

Ðèñóíîê 3. Ñõåìà àâòîðåãðåññèîííîãî ñïåêòðàëüíîãî äåêîäåðàêîððåêòèðóþùèõ êîäîâ Ðèäà-Ñîëîìîíà

Ðèñóíîê 4. Áëîê-ñõåìà öåïè âû÷èñëåíèÿ ñèíäðîìà

Page 86: 012 Системный Администратор 11 2003

84

образование

приходится расплачиваться производительностью, точнеенепроизводительностью данного алгоритма, и на практи-ке обычно применяют более эффективный, но и болеесложный для понимания алгоритм Берлекэмпа-Месси(Berlekamp-Massy), подробно описанный Кнутом во вто-ром томе «Искусства программирования» (см. также «Те-ория и практика кодов, контролирующих ошибки» Блей-хута) и сводящийся к задаче построения цепи регистровсдвига с линейной обратной связью и по сути своей явля-ющегося разновидностью авторегрессионого фильтра,множители в векторах которого и задают полином Λ.

Декодер, построенный по такому алгоритму, требуетне более 3t операций умножения в каждой из итерации,количество которых не превышает 2t. Таким образом,решение поставленной задачи укладывается всего в 6t2

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

Блок-схема алгоритма Берлекэмпа-Месси приведенана рис. 5, а его законченная программа реализация со-держится в листинге 2.

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

(Chien search), аналогичная по своей природе обратномупреобразованию Фурье и фактически сводящаяся к ту-пому перебору (brute force, exhaustive search) всех воз-можных вариантов. Все 2m возможных символов один задругим подставляются в полином локатора в порядке со-циалистической очереди и затем выполняется расчет по-линома. Если результат обращается в ноль – считается,что искомые корни найдены.

Восстановление данныхИтак, мы знаем, какие символы кодового слова искаже-ны, но пока еще не готовы ответить на вопрос: как имен-но они искажены. Используя полином синдрома и корниполинома локатора, мы можем определить характер раз-рушений каждого из искаженных символов. Обычно дляэтой цели используется алгоритм Форни (Forney), состо-ящий из двух стадий: сначала путем свертки полиномасиндрома полиномом локатора Λ мы получаем некото-рый промежуточный полином, условно обозначаемыйгреческой буквой Ω. Затем на основе Ω-полинома вычис-ляется нулевая позиция ошибки (zero error location), ко-торая в свою очередь делится на производную от Λ-по-линома. В результате получается битовая маска, каж-дый из установленных битов которой соответствует ис-каженному биту и для восстановления кодового слова висходный вид все искаженные биты должны быть инвер-тированы, что осуществляется посредством логическойоперации XOR.

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

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

При возникновении трудностей в анализе этого лис-тинга обращайтесь к блок-схемам, приведенным на рис. 3,4 и 5 – они помогут.

Ðèñóíîê 5. Ñòðóêòóðíàÿ ñõåìà àëãîðèòìà Áåðëåêýìïà-Ìåññè

Ëèñòèíã 2. Èñõîäíûé òåêñò ïðîñòåéøåãî äåêîäåðà Ðèäà-Ñîëîìîíà

/*--------------------------------------------------------** äåêîäåð Ðèäà-Ñîëîìîíà* =====================** Ïðîöåäóðà äåêîäèðîâàíèÿ êîäîâ Ðèäà-Ñîëîìîíà ñîñòîèò* èç íåñêîëüêèõ øàãîâ: ñíà÷àëà ìû âû÷èñëÿåì 2t-ñèìâîëüíûé* ñèíäðîì ïóòåì ïîñòàíîâêè alpha**i â recd(x), ãäå recd –* ïîëó÷åííîå êîäîâîå ñëîâî, ïðåäâàðèòåëüíî ïåðåâåäåííîå* â èíäåêñíóþ ôîðìó. Ïî ôàêòó âû÷èñëåíèÿ recd(x) ìû çàïèñûâàåì* î÷åðåäíîé ñèìâîë ñèíäðîìà â s[i], ãäå i ïðèíèìàåò çíà÷åíèå* îò 1 äî 2t, îñòàâëÿÿ s[0] ðàâíûì íóëþ. Çàòåì, èñïîëüçóÿ* èòåðàòèâíûé àëãîðèòì Áåðëåêýìïà, ìû íàõîäèì ïîëèíîì ëîêàòîðà* îøèáêè – elp[i]. Åñëè ñòåïåíü elp ïðåâûøàåò ñîáîé âåëè÷èíó* t, ìû áåññèëüíû ñêîððåêòèðîâàòü âñå îøèáêè è îãðàíè÷èâàåìñÿ* âûâîäîì ñîîáùåíèÿ î íåóñòðàíèìîé îøèáêå, ïîñëå ÷åãî* ñîâåðøàåì àâàðèéíûé âûõîä èç äåêîäåðà. Åñëè æå ñòåïåíü elp* íå ïðåâûøàåò t, ìû ïîäñòàâëÿåì alpha**i, ãäå i = 1..n â elp* äëÿ âû÷èñëåíèÿ êîðíåé ïîëèíîìà. Îáðàùåíèå íàéäåííûõ* êîðíåé äàåò íàì ïîçèöèè èñêàæåííûõ ñèìâîëîâ.

Page 87: 012 Системный Администратор 11 2003

8511(12), ноябрь 2003

образование

* Åñëè êîëè÷åñòâî îïðåäåëåííûõ ïîçèöèé èñêàæåííûõ ñèìâîëîâ* ìåíüøå ñòåïåíè elp, èñêàæåíèþ ïîäâåðãëîñü áîëåå ÷åì t* ñèìâîëîâ è ìû íå ìîæåì âîññòàíîâèòü èõ. Âî âñåõ îñòàëüíûõ* ñëó÷àÿõ âîññòàíîâëåíèå îðèãèíàëüíîãî ñîäåðæèìîãî èñêàæåííûõ* ñèìâîëîâ âïîëíå âîçìîæíî.  ñëó÷àå, êîãäà êîëè÷åñòâî îøèáîê* çàâåäîìî âåëèêî, äëÿ èõ èñïðàâëåíèÿ äåêîäèðóåìûå ñèìâîëû* ïðîõîäÿò ñêâîçü äåêîäåð áåç êàêèõ-ëèáî èçìåíåíèé.** íà îñíîâå èñõîäíûõ òåêñòîâ* Simon Rockliff, îò 26.06.1991,* ðàñïðîñòðàíÿåìûõ ïî ëèöåíçèè GNU–––––––––––––––––––––––––––––––––––––––––––––––––––––––––*/decode_rs()

int i, j, u, q;int s[n-k+1]; // ïîëèíîì ñèíäðîìà îøèáêèint elp[n – k + 2][n - k]; // ïîëèíîì ëîêàòîðà îøèáêè

// ëÿìáäàint d[n-k+2];int l[n-k+2];int u_lu[n-k+2],

int count=0, syn_error=0, root[t], loc[t], z[t+1], ↵err[n], reg[t+1];

// ïåðåâîäèì ïîëó÷åííîå êîäîâîå ñëîâî â èíäåêñíóþ ôîðìó// äëÿ óïðîùåíèÿ âû÷èñëåíèéfor (i = 0; i < n; i++) recd[i] = index_of[recd[i]];

// âû÷èñëÿåì ñèíäðîì//-----------------------------------------------------for (i = 1; i <= n - k; i++)

s[i] = 0; // èíèöèàëèçàöèÿ s-ðåãèñòðà// (íà åãî âõîä ïî óìîë÷àíèþ// ïîñòóïàåò íîëü)

// âûïîëíÿåì s[i] += recd[j]*ij// ò.å. áåðåì î÷åðåäíîé ñèìâîë äåêîäèðóåìûõ äàííûõ,// óìíîæàåì åãî íà ïîðÿäêîâûé íîìåð äàííîãî// ñèìâîëà, óìíîæåííûé íà íîìåð î÷åðåäíîãî îáîðîòà// è ñêëàäûâàåì ïîëó÷åííûé ðåçóëüòàò ñ ñîäåðæèìûì// s-ðåãèñòðà ïî ôàêòó èñ÷åðïàíèÿ âñåõ äåêîäèðóåìûõ// ñèìâîë, ìû ïîâòîðÿåì âåñü öèêë âû÷èñëåíèé îïÿòü –// ïî îäíîìó ðàçó äëÿ êàæäîãî ñèìâîëà ÷åòíîñòèfor (j=0; j<n; j++) if (recd[j]!=-1) ↵

s[i]^= alpha_to[(recd[j]+i*j)%n];

if (s[i]!=0) syn_error=1; // åñëè ñèíäðîì// íå ðàâåí íóëþ,// âçâîäèì ôëàã// îøèáêè

// ïðåîáðàçóåì ñèíäðîì èç ïîëèíîìèàëüíîé ôîðìû// â èíäåêñíóþs[i] = index_of[s[i]];

// êîððåêöèÿ îøèáîê//-----------------------------------------------------if (syn_error) // åñëè åñòü îøèáêè, ïûòàåìñÿ

// èõ ñêîððåêòèðîâàòü

// âû÷èñëåíèå ïîëèíîìà ëîêàòîðà ëÿìáäà//----------------------------------------------// âû÷èñëÿåì ïîëèíîì ëîêàòîðà îøèáêè ÷åðåç// èòåðàòèâíûé àëãîðèòì Áåðëåêýìïà. Ñëåäóÿ// òåðìèíîëîãèè Lin and Costello (ñì. "Error// Control Coding: Fundamentals and Applications"// Prentice Hall 1983 ISBN 013283796) d[u]// ïðåäñòàâëÿåò ñîáîé µ («ìþ»), âûðàæàþùóþ// ðàñõîæäåíèå (discrepancy), ãäå u = µ + 1 è µ// åñòü íîìåð øàãà èç äèàïàçîíà îò –1 äî 2t.// Ó Áëåéõóòà òà æå ñàìàÿ âåëè÷èíà îáîçíà÷àåòñÿ// ∆(x) («äåëüòà») è íàçûâàåòñÿ íåâÿçêîé.// l[u]ïðåäñòàâëÿåò ñîáîé ñòåïåíü elp äëÿ äàííîãî// øàãà èòåðàöèè, u_l[u] ïðåäñòàâëÿåò ñîáîé// ðàçíèöó ìåæäó íîìåðîì øàãà è ñòåïåíüþ elp,// èíèöèàëèçèðóåì ýëåìåíòû òàáëèöûd[0] = 0; // èíäåêñíàÿ ôîðìàd[1] = s[1]; // èíäåêñíàÿ ôîðìàelp[0][0] = 0; // èíäåêñíàÿ ôîðìàelp[1][0] = 1; // ïîëèíîìèàëüíàÿ ôîðìà

for (i = 1; i < n - k; i++)

elp[0][i] = -1; // èíäåêñíàÿ ôîðìà

elp[1][i] = 0; // ïîëèíîìèàëüíàÿ ôîðìà

l[0] = 0; l[1] = 0; u_lu[0] = -1; u_lu[1] = 0; u = 0;

do

u++;if (d[u] == -1)

l[u + 1] = l[u];for (i = 0; i <= l[u]; i++)

elp[u+1][i] = elp[u][i];elp[u][i] = index_of ↵

[elp[u][i]];

else

// ïîèñê ñëîâ ñ íàèáîëüøèì u_lu[q],// òàêèõ ÷òî d[q]!=0q = u - 1;while ((d[q] == -1) && (q>0)) q--;

// íàéäåí ïåðâûé íåíóëåâîé d[q]if (q > 0)

j=q ;do

j-- ;if ((d[j]!=-1) && ↵

(u_lu[q]<u_lu[j]))q = j ;

while (j>0);;

// êàê òîëüêî ìû íàéäåì q, òàêîé ÷òî d[u]!=0// è u_lu[q] åñòü ìàêñèìóì// çàïèøåì ñòåïåíü íîâîãî elp ïîëèíîìàif (l[u] > l[q]+u-q) l[u+1] = l[u]; else ↵

l[u+1] = l[q]+u-q;

// ôîðìèðóåì íîâûé elp(x)for (i = 0; i < n - k; i++) elp[u+1][i] = 0;for (i = 0; i <= l[q]; i++)

if (elp[q][i]!=-1)elp[u+1][i+u-q]=alpha_to ↵

[(d[u]+n-d[q]+elp[q][i])%n];

for (i=0; i<=l[u]; i++)

elp[u+1][i] ^= elp[u][i];

// ïðåîáðàçóåì ñòàðûé elp// â èíäåêñíóþ ôîðìóelp[u][i] = index_of[elp[u][i]];

u_lu[u+1] = u-l[u+1];

// ôîðìèðóåì (u + 1) íåâÿçêó//----------------------------------------------if (u < n-k) // íà ïîñëåäíåé èòåðàöèè ðàñõîæäåíèå // íå áûëî îáíàðóæåíî

if (s[u + 1]!=-1) d[u+1] = alpha_to[s[u+1]]; ↵else d[u + 1] = 0;

for (i = 1; i <= l[u + 1]; i++)if ((s[u + 1 - i] != -1) && ↵

(elp[u + 1][i]!=0))d[u+1] ^= alpha_to[(s[u+1-i] ↵

+index_of[elp[u+1][i]])%n];

// ïåðåâîäèì d[u+1] â èíäåêñíóþ ôîðìód[u+1] = index_of[d[u+1]];

while ((u < n-k) && (l[u+1]<=t));

// ðàñ÷åò ëîêàòîðà çàâåðøåí//-----------------------------------------------------u++ ;if (l[u] <= t) // êîððåêöèÿ îøèáîê âîçìîæíà

Page 88: 012 Системный Администратор 11 2003

86

образование

Интерфейс с библиотекой ElByECC.DLLПрограммная реализация кодера/декодера Рида-Соломо-на, приведенная в листингах 1, 2, достаточно наглядна,но крайне непроизводительна и нуждается в оптимиза-ции. Как альтернативный вариант можно использовать го-товые библиотеки от сторонних разработчиков, входящиев состав программных комплексов, так или иначе связан-ных с обработкой корректирующих кодов Рида-Соломо-на. Это и утилиты прожига/копирования/восстановлениялазерных дисков, и драйвера ленточных накопителей (отстримера до Арвида), и различные телекоммуникацион-ные комплексы и т. д.

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

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

// ïåðåâîäèì elp â èíäåêñíóþ ôîðìófor (i = 0; i <= l[u]; i++) elp[u][i] = ↵

index_of[elp[u][i]];

// íàõîæäåíèå êîðíåé ïîëèíîìà ëîêàòîðà îøèáêè//----------------------------------------------for (i = 1; i <= l[u]; i++) reg[i] = elp[u][i]; ↵

count = 0;

for (i = 1; i <= n; i++)

q = 1 ;for (j = 1; j <= l[u]; j++)if (reg[j] != -1)

reg[j] = (reg[j]+j)%n;q ^= alpha_to[reg[j]];

if (!q) // çàïèñûâàåì êîðåíü è èíäåêñ

// ïîçèöèè îøèáêèroot[count] = i;loc[count] = n-i;count++;

if (count == l[u]) // íåò êîðíåé – ñòåïåíü

// elp < t îøèáîê

// ôîðìèðóåì ïîëèíîì z(x)for (i = 1; i <= l[u]; i++) // Z[0] âñåãäà

// ðàâíî 1

if ((s[i]!=-1) && (elp[u][i]!=-1))z[i] = alpha_to[s[i]] ^ ↵

alpha_to[elp[u][i]];else

if ((s[i]!=-1) && ↵(elp[u][i]==-1))z[i] = alpha_to[s[i]];

elseif ((s[i]==-1) && ↵(elp[u][i]!=-1))

z[i] = ↵alpha_to[elp[u][i]];else

z[i] = 0 ;for (j=1; j<i; j++)

if ((s[j]!=-1) && (elp[u][i-j]!=-1))z[i] ^= alpha_to[(elp[u] ↵

[i-j] + s[j])%n];

// ïåðåâîäèì z[i] â èíäåêñíóþ ôîðìóz[i] = index_of[z[i]];

// âû÷èñëåíèå çíà÷åíèÿ îøèáîê â ïîçèöèÿõ loc[i]//----------------------------------------------for (i = 0; i<n; i++)

err[i] = 0;

// ïåðåâîäèì recd[] â ïîëèíîìèàëüíóþ ôîðìóif (recd[i]!=-1) recd[i] = alpha_to[recd[i]]; ↵

else recd[i] = 0;

// ñíà÷àëà âû÷èñëÿåì ÷èñëèòåëü îøèáêèfor (i = 0; i < l[u]; i++)

err[loc[i]] = 1;for (j=1; j<=l[u]; j++)

if (z[j]!=-1)err[loc[i]] ^= alpha_to ↵[(z[j]+j*root[i])%n];

if (err[loc[i]]!=0)

err[loc[i]] = index_of[err[loc[i]]];q = 0 ;// ôîðìèðóåì çíàìåíàòåëü

// êîýôôèöèåíòà îøèáêèfor (j=0; j<l[u]; j++)

if (j!=i)

q+=index_of[1^alpha_to[(loc[j]+root[i])%n]];

q = q % n; err[loc[i]] = alpha_to ↵[(err[loc[i]]-q+n)%n];

// recd[i] äîëæåí áûòü// â ïîëèíîìèàëüíîé ôîðìårecd[loc[i]] ^= err[loc[i]];

else // íåò êîðíåé,

// ðåøåíèå ñèñòåìû óðàâíåíèé íåâîçìîæíî,// ò.ê. ñòåïåíü elp >= t

// ïåðåâîäèì recd[] â ïîëèíîìèàëüíóþ ôîðìófor (i=0; i<n; i++)

if (recd[i]!=-1) recd[i] = alpha_to[recd[i]];else

recd[i] = 0; // âûâîäèì èíôîðìàöèîííîå// ñëîâî êàê åñòü

else // ñòåïåíü elp > t,

// ðåøåíèå íåâîçìîæíî// ïåðåâîäèì recd[] â ïîëèíîìèàëüíóþ ôîðìófor (i=0; i<n; i++)

if (recd[i]!=-1)recd[i] = alpha_to[recd[i]] ;

elserecd[i] = 0 ; // âûâîäèì èíôîðìàöèîííîå

// ñëîâî êàê åñòü

else // îøèáîê íå îáíàðóæåíîfor (i=0;i<n;i++) if(recd[i]!=-1)recd[i]=alpha_to[recd[i]]; ↵

else recd[i]=0;

Page 89: 012 Системный Администратор 11 2003

8711(12), ноябрь 2003

образование

Ниже приводится описание важнейших функций биб-лиотеки ElByECC.DLL, входящей в состав известного ко-пировщика защищенных лазерных дисков Clone CD, ус-ловно-бесплатную копию которого можно скачать c cайта:http://www.elby.ch/.

Сам Clone CD проработает всего лишь 21 день, а за-тем потребует регистрации, однако на продолжительностьиспользования библиотеки ElByECC.DLL не наложеноникаких ограничений.

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

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

Краткое описание основных функций библиотеки при-водится ниже.

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

Статическая компоновка предполагает наличие спе-циального lib-файла, который может быть автоматическисгенерирован утилитой implib из пакета Borland C++ лю-бой подходящей версии, представляющую собой утилитукомандной строки, вызываемую так:

GenECCAndEDC_Mode1Функция GenECCAndEDC_Mode1 осуществляет генера-цию корректирующих кодов на основе 2048-байтовогоблока пользовательских данных и имеет следующийпрототип:

userdata_src – указатель на 2048-байтовый блок пользо-вательских данных, для которых необходимо выполнитьрасчет корректирующих кодов. Сами пользовательскиеданные в процессе выполнения функции остаются не-изменными и автоматически копируются в буфер це-левого сектора, где к ним добавляется 104 + 172 байтчетности и 4 байта контрольной суммы.

header_src – указатель на 4-байтовый блок, содержа-щий заголовок сектора. Первые три байта занимаетабсолютный адрес, записанный в BCD-форме, а чет-вертый байт отвечает за тип сектора, которому необ-ходимо присвоить значение 1, соответствующий ре-жиму «корректирующие коды задействованы».

raw_sector_mode1_dst – указатель на 2352-байтовыйблок, в который будет записан сгенерированный сек-тор, содержащий 2048-байт пользовательских данныхи 104+172 байт корректирующих кодов вместе с 4 бай-тами контрольной суммы и представленный следую-щей структурой:

При успешном завершении функция возвращает не-нулевое значение и ноль в противном случае.

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

sector – указатель на 2352-байтовый блок данных, содер-жащий подопытный сектор. Лечение сектора осуществ-ляется «вживую», т.е. непосредственно по месту возник-новения ошибки. Если количество разрушенных байтпревышают корректирующие способности кодов Рида-Соломона, исходные данные остаются неизменными;

DO – флаг, нулевое значение которого указывает назапрет модификации сектора. Другими словами, со-ответствует режиму TEST ONLY. Ненулевое значениеразрешает восстановление данных, если они действи-тельно подверглись разрушению.

При успешном завершении функция возвращает не-нулевое значение и ноль, если сектор содержит ошибку(в режиме TEST ONLY) или если данные восстановить неудалось (при вызове функции в режиме лечения). Для

Ëèñòèíã 3. Äèíàìè÷åñêàÿ çàãðóçêà áèáëèîòåêè ElByECC.DLL

HANDLE h;int (__cdecl *CheckECCAndEDC_Mode1) (char *userdata, ↵

char *header, char *sector);

h=LoadLibrary("ElbyECC.dll");CheckECCAndEDC_Mode1 = GetProcAddress(h, "CheckECCAndEDC_Mode1");

implib.exe -a ElByECC.lib ElByECC.lib

Ëèñòèíã 4. Ïðîòîòèï ôóíêöèè GenECCAndEDC_Mode1

// óêàçàòåëü íà ìàññèâ èç 2048 áàéò

GenECCAndEDC_Mode1(char *userdata_src,

// óêàçàòåëü íà çàãîëîâîêchar *header_src,struct RAW_SECTOR_MODE1 *raw_sector_mode1_dst)

Ëèñòèíã 5. Ñòðóêòóðà ñûðîãî ñåêòîðà

struct RAW_SECTOR_MODE1

BYTE SYNC[12]; // ñèíõðîãðóïïàBYTE ADDR[3]; // àáñîëþòíûé àäðåñ ñåêòîðàBYTE MODE; // òèï ñåêòîðàBYTE USER_DATA[2048]; // ïîëüçîâàòåëüñêèå äàííûåBYTE EDC[4]; // êîíòðîëüíàÿ ñóììàBYTE ZERO[8]; // íóëè (íå èñïîëüçóåòñÿ)BYTE P[172]; // P-áàéòû ÷åòíîñòèBYTE Q[104]; // Q-áàéòû ÷åòíîñòè;

Ëèñòèíã 6. Ïðîòîòèï ôóíêöèè CheckSector

// óêàçàòåëü íà ñåêòîðíûé áóôåðCheckSector(struct RAW_SECTOR *sector,

int DO); // òîëüêî ïðîâåðêà/ëå÷åíèå

Page 90: 012 Системный Администратор 11 2003

88

образование

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

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

Ëèñòèíã 7. Ïðèìåð âûçîâà ôóíêöèé ElByECC.DLL èç ñâîåé ïðî-ãðàììû

/*--------------------------------------------------------** äåìîíñòðàöèÿ ElByECC.DLL* ========================** Äàííàÿ ïðîãðàììà äåìîíñòðèðóåò ðàáîòó ñ áèáëèîòåêîé* ElByECC.DLL, ãåíåðèðóÿ èçáûòî÷íûå êîäû Ðèäà-Ñîëîìîíà* íà îñíîâå ïîëüçîâàòåëüñêèõ äàííûõ, çàòåì óìûøëåííî* èñêàæàåò èõ è âíîâü âîññòàíàâëèâàåò.* Êîëè÷åñòâî ðàçðóøàåìûõ áàéò ïåðåäàåòñÿ â ïåðâîì ïàðàìåòðå* êîìàíäíîé ñòðîêè (ïî óìîë÷àíèþ – 6)---------------------------------------------------------*/#include <stdio.h>#include "ElByECC.h" // äåêîìïèëèðîâàíî àâòîðîì

// ðóøèòü ïî óìîë÷àíèþ#define _DEF_DMG 6// ñêîëüêî áàéò ðóøèòü?#define N_BYTES_DAMAGE ((argc>1)?atol(argv[1]):_DEF_DMG)

main(int argc, char **argv)

int a;// çàãîëîâîê ñåêòîðàchar stub_head[HEADER_SIZE];// îáëàñòü ïîëüçîâàòåëüñêèõ äàííûõchar user_data[USER_DATA_SIZE];

// ñåêòîð äëÿ èñêàæåíèéstruct RAW_SECTOR_MODE1 raw_sector_for_damage;// êîíòðîëüíàÿ êîïèÿ ñåêòîðàstruct RAW_SECTOR_MODE1 raw_sector_for_compre;

// TITLE//-----------------------------------------------------printf("= ElByECC.DLL usage demo example by KK\n");

// èíèöèàëèçàöèÿ ïîëüçîâàòåëüñêèõ äàííûõ//-----------------------------------------------------printf("user data initialize...............");

// user_data initfor (a = 0; a < USER_DATA_SIZE; a++) user_data[a] = a;// src header initmemset(stub_head, 0, HEADER_SIZE); stub_head[3] = 1;printf("+OK\n");

// ãåíåðàöèÿ êîäîâ Ðèäà-Ñîëîìîíà íà îñíîâå// ïîëüçîâàòåëüñêèõ äàííûõ//-----------------------------------------------------printf("RS-code generate...................");a = GenECCAndEDC_Mode1(user_data, stub_head, ↵

&raw_sector_for_damage);if (a == ElBy_SECTOR_ERROR) printf("-ERROR!\x7\n"); ↵

return -1;memcpy(&raw_sector_for_compre, &raw_sector_for_damage, ↵

RAW_SECTOR_SIZE);printf("+OK\n");

// óìûøëåííîå èñêàæåíèå ïîëüçîâàòåëüñêèõ äàííûõ//-----------------------------------------------------printf("user-data %04d bytes damage........", ↵

N_BYTES_DAMAGE);for (a=0;a<N_BYTES_DAMAGE;a++) ↵

raw_sector_for_damage.USER_DATA[a]^=0xFF;if(!memcmp(&raw_sector_for_damage, ↵

&raw_sector_for_compre,RAW_SECTOR_SIZE))printf("-ERR: NOT DAMAGE YET\n"); ↵

else printf("+OK\n");

// ïðîâåðêà öåëîñòíîñòè ïîëüçîâàòåëüñêèõ äàííûõ//-----------------------------------------------------printf("user-data check....................");a = CheckSector((struct RAW_SECTOR*) ↵

&raw_sector_for_damage, ElBy_TEST_ONLY);if (a==ElBy_SECTOR_OK)

printf("-ERR:data not damage\x7\n");return ↵-1;printf(".data damge\n");

// âîññòàíîâëåíèå ïîëüçîâàòåëüñêèõ äàííûõ//-----------------------------------------------------printf("user-data recorver.................");a = CheckSector((struct RAW_SECTOR*) ↵

&raw_sector_for_damage, ElBy_REPAIR);if (a == ElBy_SECTOR_ERROR)

printf("-ERR: NOT RECORVER YET\x7\n"); return ↵-1; printf("+OK\n");

// ïðîâåðêà óñïåøíîñòè âîññòàíîâëåíèÿ//-----------------------------------------------------printf("user-data recorver check...........");if(memcmp(&raw_sector_for_damage, ↵

&raw_sector_for_compre,RAW_SECTOR_SIZE))printf("-ERR: NOT RECORVER YET\x7\n"); ↵

else printf("+OK\n");

printf("+OK\n");return 1;

Page 91: 012 Системный Администратор 11 2003

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

Вспоминаю чипсет от славной фирмы SYS. Первый!Интегрированный! Дешевый до безобразия! Все в од-ном. Я до сих пор уверен, что львиная доля материнс-ких плат на этом чипсете осела на просторах нашейродины. Ужас, который я испытал, собрав первую ма-шину на этом чипсете, я не забуду никогда! Глюки спамятью и видео – это мелочи по сравнению со звукоммодема из колонок Genius... На меня это произвелотакой эффект, что я зарекся и больше ни разу не поку-пал материнские платы на чипсетах от фирмы SYS.Сколько богатейшего опыта получили те, кто занимал-ся сборкой компьютеров в то время! Все кривое и со-всем не рабочее железо везли к нам. И ведь собирали,продавали, и это работало!

Вспоминается сборка компьютеров в одной малень-кой фирме (коих по Москве было как грибов). Ящик ви-деокарт, ящик звуковых карт, коробка памяти, одна ма-теринская плата и мего-бубен, при помощи которогорождалось творение рук человеческих – компьютер! Неважно, что на него не ставился софт, и он зависал вре-мя от времени, не важно, что из колонок доносились незвуки, а пуки. Главное – это работало... первые 10 ми-нут! Показали, собрали, клиенту ручкой помахали, га-рантийный талон на маленькой бумажке (авось побыс-трей потеряет) вручили и пошли творить дальше. Чу-десные были времена.

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

другу. Это были незабываемые выходные. Компьютерыумирали на руках! Вот только что включался и работал.Кое-что поправили в Windows, перезагрузка и все... нольэмоций: кулера не жужжат, сердце остановилось. Хаб вклассе поставили тоже «потрясный»: пакеты ходили кудаугодно, но только не по сети, может, у него была встроен-ная спутниковая антенна и он отсылал секретную инфор-мацию врагам нашей родины, не знаю. Полгода мы каж-дые выходные ходили в школу, как на работу. Оживляли,чинили, переставляли софт – это был ужас…

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

А сколько эмоций, когда покупалась новая игрушка.Никогда не знал заранее, как отнесется твоя операцион-ная система к новому приобретению. А как игры были ло-кализованы… Те, кто занимался локализацией, с криком«Стилус форева» (был такой переводчик тестов) загоня-ли игры в переводчик и в результате получались по исти-не шедевры. Играли в них не часами, а ночами и сутками,а потом с красными глазами делились друг с другом но-востями игрового процесса.

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

Помню, как говорил одному своему товарищу, кото-рый покупал по тем временам крутой компьютер IntelPentium 100 МГц: «Зачем тебе жесткий диск объемом1,5 Гб? Что ты на него будешь писать? Вот у меня 340Мб и мне хватает…» Посмотрел на своего железногоконя, на котором пишется эта статья, в котором стоятдва винчестера по 80 Гб. И ведь, правда, хватало. Нопотом вышел на сцену Windows 95 и покатилось, с каж-дым годом объемы информации, которые оседали нажестких дисках росли, аппетиты ОС росли, потом по-явился формат MP3, затем MPEG...

Алексей Костромин

ВОСПОМИНАНИЯ ЗАМЕЧАТЕЛЬНЫХ ДНЕЙ:ЗАРЯ КОМПЬЮТЕРИЗАЦИИ РОССИИ

И БОРЦЫ С ЖЕЛЕЗНЫМИ КОНЯМИ ТОЙ ЭПОХИ...

8911(12), ноябрь 2003

как это было

Page 92: 012 Системный Администратор 11 2003

90

полезные советы

КТО ПРЕДУПРЕЖДЕН –ТОТ ВООРУЖЕН

МИХАИЛ ТОРЧИНСКИЙ

Page 93: 012 Системный Администратор 11 2003

9111(12), ноябрь 2003

полезные советы

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

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

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

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

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

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

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

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

Но есть и обратная сторона медали в работе с КА.Рынок услуг КА очень конкурентен, и, как правило, за-казчик сотрудничает одновременно с несколькими аген-тствами, рассматривая кандидатов от всех сразу. В та-ком случае вероятность, что другое агентство, в кото-ром вы не проходите как кандидат, представит болеепрофессионального, компетентного, опытного кандида-та, весьма велика. Также нужно учитывать, что даже«ваше» КА не может ограничиться только вашей кан-дидатурой. Заказчик требует выбора, и, как правило,на одну вакансию нужно представить 5-6 человек. Такчто в любом случае кандидату нужно проходить кон-курс. И его исход зачастую трудно предугадать.

Чаще всего случается так, что кандидат, настроен-ный на поиск работы с помощью рекрутеров, находитинтернет-сайт, на котором имеется список КА, и дела-ет рассылку своего резюме по большинству найденных.В данном случае он руководствуется соображением:«чем больше будет рассылка, тем больше предложе-ний о работе я получу». Однако далеко не всегда такаятактика дает положительные результаты. На рынке ра-ботают сотни КА, и нужно потратить некоторое времяна то, чтобы разобраться, какие из них действительнооказывают качественный сервис своим заказчикам исоискателям, с которыми они работают. Критериям, ко-торым можно доверять при оценке рекрутинговых ком-паний, являются их известность на рынке и наличие оп-ределенной специализации. Известные компании, какправило, работают на российском рынке достаточнодавно и уже успели хорошо зарекомендовать себя. Ихотличает также от большинства других наличие извес-тных brand-name-клиентов. Это очень важное отличие,т.к. крупные корпоративные клиенты имеют вполнесформировавшиеся и очень жесткие критерии выборасвоих поставщиков, они дорожат своей репутацией итщательно выбирают себе деловых партнеров. Узнать,с какими клиентами сотрудничает интересующее васКА, как правило, можно на сайте рекрутеров.

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

Page 94: 012 Системный Администратор 11 2003

92

полезные советы

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

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

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

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

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

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

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

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

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

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

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

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

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

Page 95: 012 Системный Администратор 11 2003

9311(12), ноябрь 2003

полезные советы

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

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

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

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

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

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

Page 96: 012 Системный Администратор 11 2003

94

полезные советы

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

Итак, решение принято, и осталось лишь «законнооформить отношения». Проявите предельную внима-тельность, проследите, чтобы все формальности былисоблюдены, хотя практика показывает: недобросовес-тные работодатели не так часто сотрудничают с КА, такчто вероятность быть обманутым стремится к нулю.

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

ный срок, как правило, составляет 3 месяца. За это вре-мя у кандидата есть возможность проявить себя с луч-шей стороны и доказать, что он именно тот, кого такусердно искали КА и работодатель. В противном слу-чае испытательный срок может закончиться поиском«замены» кандидата. И тогда КА начинает работу по-новому.

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

Page 97: 012 Системный Администратор 11 2003

9511(12), ноябрь 2003

Рады видетьВас нашимичитателями!

Единыйподписнойиндекс:

81655по каталогуагентства«Роспечать»

Продолжается подписка на I полугодие 2004 г.Более подробная информация на сайте www.samag.ru

в разделе «Подписка»

подписка

Page 98: 012 Системный Администратор 11 2003

96

СИСТЕМНЫЙ АДМИНИСТРАТОР11(12), Ноябрь, 2003 год

РЕДАКЦИЯИсполнительный директорВладимир ПоложевецОтветственный секретарьНаталья Хвостова[email protected]Технический редакторВладимир ЛукинНаучно-технические консультантыДмитрий ГоряиновРуслан ИвановИгорь Гарасюк

РЕКЛАМНАЯ СЛУЖБАтел.: (095) 928-8253 (доб. 112)факс: (095) 928-8253Константин Меделянreс[email protected]

Верстка и оформление[email protected][email protected]Дизайн обложкиНиколай Петрочук

103012, г. Москва,Ветошный переулок, дом 13/15тел.: (095) 928-8253 (доб. 112)факс: (095) 928-8253Е-mail: [email protected]: www.samag.ru

РУКОВОДИТЕЛЬ ПРОЕКТАПетр ПоложевецУЧРЕДИТЕЛИВладимир ПоложевецАлександр Михалев

ИЗДАТЕЛЬЗАО «Издательский дом«Учительская газета»

Отпечатано типографиейООО «Мастер Печати»Тираж 5500 экз.Журнал зарегистрированв Министерстве РФ по делам печати,телерадиовещания и средств мас-совых коммуникаций (свидетельствоПИ 77-12542 от 24 апреля 2002г.)

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

ЧИТАЙТЕВ СЛЕДУЮЩЕМНОМЕРЕ:

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

Безумный чертенокПочти каждый день мы слышим о том,что появился новый однодискетный/LiveCD/«полновесный» дистрибутивLinux, а вот аналогичную новость про*BSD не каждый день услышишь. Изновостей портала www.opennet.ru я уз-нал о проекте Frenzy (пер. с англ. –безумие), который меня весьма заин-тересовал. Процитирую разработчи-ка: «Целью проекта Frenzy являетсясоздание «портативного инструментасистемного администратора» на базеОС FreeBSD, который было бы удоб-но постоянно иметь при себе...»

Наши партнерыНаши партнерыНаши партнерыНаши партнерыНаши партнеры

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

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

таки на последний. Что делать в та-ком случае? Существует множестворазличных утилит, так или иначепредназначенных для улучшения за-щиты Linux-системы. В данной статьехочу обратить внимание на проектBastille Linux.