Вы находитесь на странице: 1из 98

№11(12) ноябрь 2003

подписной индекс 81655


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

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

BUGTRAQ 2, 33 БЕЗОПАСНОСТЬ

АДМИНИСТРИРОВАНИЕ Защитник сети


Сергей Яремчук
Виртуальный полигон grinder@ua.fm 56
для разработчика и администратора
на основе Linux и VMWare
Удобнее, эффективнее, лучше:
Андрей Бешков snort + MySQL
tigrisha@sysadmins.ru 4
Павел Закляков
amdk7@mail.ru 62
Файловые системы Linux
Сергей Яремчук WEB
grinder@ua.fm 18
Fusebox в помощь веб-программисту
Архитектура файловой системы ext2
Андрей Уваров
Владимир Мешков dashin@ua.fm
ubob@mail.ru 26 Дмитрий Горяинов
dg@webclub.ru 76
Интеграция SQUID + LDAP
ОБРАЗОВАНИЕ
Марк Кричмар
mark@rusautogaz.ru 34
Коды Рида-Соломона
в практических реализациях,
Использование бездисковых или Информация, воскресшая из пепла III
маршрутизаторов
Крис Касперски
Андрей Мозговой kk@sendmail.ru 80
brain@m9.ru 38

Аудит учетных записей пользователей КАК ЭТО БЫЛО


в Active Directory
Воспоминания замечательных дней:
Максим Костышин заря компьютеризации России и борцы
Maxim_kostyshin@mail.ru 44 с железными конями той эпохи...
Алексей Костромин
Windows Server 2003: natalex_home@mail.ru 89
взгляд системного администратора
Алексей Доля
Михаил Мельников
ПОЛЕЗНЫЕ СОВЕТЫ
info@samag.ru 50
Кто предупрежден – тот вооружен
Михаил Торчинский
Mikhail@3r.ru 90

№11(12), ноябрь 2003 1


bugtraq

Переполнение буфера в функции User32.dll Удаленное переполнение буфера


в Microsoft Windows 4.0/2000/XP/2003 в Messenger Service
Программа: Microsoft Windows XP (Professional, Home в Microsoft Windows NT/2000/XP/2003
Edition), Microsoft Windows Server 2003 (Web Edition, Standard Программа: Microsoft Windows 2000 (Advanced Server,
Edition, Enterprise Edition, Datacenter Edition), Microsoft Datacenter Server, Professional, Server), Microsoft Windows
Windows NT 4.0 (Workstation, Terminal Server Edition, Server), NT 4.0 (Server, Terminal Server Edition, Workstation), Microsoft
Microsoft Windows 2000 (Server, Professional, Datacenter Windows Server 2003 (Datacenter Edition, Enterprise Edition,
Server, Advanced Server). Standard Edition, Web Edition), Microsoft Windows XP (Home
Опасность: Критическая. Edition, Professional).
Описание: Уязвимость обнаружена в Microsoft Windows Опасность: Критическая.
4.0/2000/XP/2003. Злонамеренный локальный пользова- Описание: Переполнение буфера обнаружено в Messenger
тель может поднять свои привилегии. Service в Microsoft Windows. Удаленный атакующий может
Проблема связана с тем, что ListBox- и ComboBox-уп- выполнить произвольный код на уязвимой системе.
равления вызывают функцию User32.dll, которая содер- Проблема связана с тем, что Messenger Service не про-
жит переполнение буфера. В результате злонамеренный веряет длину сообщения. В результате злонамеренный
пользователь может эксплуатировать эту уязвимость че- пользователь может послать сообщение, которое пере-
рез интерактивный или привилегированный процесс, ко- полнит буфер и выполнит произвольный код на уязвимой
торый использует ListBox- и ComboBox-управления, что- системе с привилегиями системы. Messenger Service от-
бы выполнить произвольный код с привилегиями этого ключен по умолчанию в Microsoft Windows 2003.
процесса. Уязвимость может эксплуатироваться через URL производителя: http://www.microsoft.com
Utility Manager в Windows 2000. Также возможна эксплуа- Решение: Фильтруйте Netbios и RPC-трафик. Установите
тация и через другие приложения сторонних фирм. соответствующие обновления:
Переполнение происходит, когда передается LB_DIR- Microsoft Windows NT Workstation 4.0, Service Pack 6a;
сообщение к ListBox или CB_DIR-сообщение к ComboBox Microsoft Windows NT Server 4.0, Service Pack 6a;
с чрезмерно длинным параметром pathname. Подробнос- Microsoft Windows NT Terminal Server Edition, Service Pack 6;
ти в источнике сообщения. Microsoft Windows 2000, Service Pack 2;
URL производителя: http://www.microsoft.com Microsoft Windows 2000, Service Pack 3, Service Pack 4;
Решение: Установите соответствующее исправление: Microsoft Windows XP Gold, Service Pack 1;
Microsoft Windows NT Workstation 4.0, Service Pack 6a; Microsoft Windows XP 64-bit Edition;
Microsoft Windows NT Server 4.0, Service Pack 6a; Microsoft Windows XP 64-bit Edition Version 2003;
Microsoft Windows NT Terminal Server Edition, Service Pack 6; Microsoft Windows Server 2003;
Microsoft Windows 2000, Service Pack 2; Microsoft Windows Server 2003 64-bit Edition.
Microsoft Windows 2000 Service Pack 3, Service Pack 4;
Microsoft Windows XP Gold, Service Pack 1;
Microsoft Windows XP 64 bit Edition; Множественные уязвимости в Novell iChain
Microsoft Windows XP 64 bit Edition Version 2003; Программа: Novell iChain 2.2.
Microsoft Windows Server 2003; Опасность: Критическая.
Microsoft Windows Server 2003 64 bit Edition. Описание: Novell выпустил support pack для iChain. В нем
устраняются несколько уязвимостей, которые могут ис-
пользоваться злонамеренным пользователем, чтобы вне-
Удаленный DoS против OpenBSD pf(4) дриться в сессию другого пользователя, вызвать отказ в
Программа: OpenBSD 3.2, 3.3. обслуживании и скомпрометировать систему.
Опасность: Критическая.  Пользователь может внедриться в сессию другого
Описание: Уязвимость обнаружена в пакетном фильтре пользователя, если сессия нового пользователя откры-
OpenBSD pf(4). Удаленный пользователь может аварий- та на том же самом порту.
но завершить работу приложения.  Удаленный пользователь может завершить работу сер-
Сообщается, что приложение может обратиться к па- вера, используя WGET.
мяти, которая предварительно была освобождена. В этом  iChain подвержен к OpenSSL-уязвимостям в ASN.1-об-
случае, если используются активные scrub-правила, уда- работчике.
ленный пользователь может аварийно завершить работу URL производителя: http://support.novell.com/cgi-bin/
за приложения. search/searchtid.cgi?/2967175.htm
URL производителя: http://www.openbsd.org Решение: Установите соответствующие исправления:
Решение: Установите соответствующие исправления: Apply iChain 2.2 Support Pack 2 beta: http://support.novell.com/
ftp://ftp.openbsd.org/pub/OpenBSD/patches/3.3/common/ servlet/filedownload/sec/ftf/b1ic22sp2.exe
006_pfnorm.patch iChain 2.2 Support Pack 2 beta – TID2967175: http://support.
ftp://ftp.openbsd.org/pub/OpenBSD/patches/3.2/common/ novell.com/cgi-bin/search/searchtid.cgi?/2967175.htm
019_pfnorm.patch
Cоставил Александр Антипов

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

ВИРТУАЛЬНЫЙ ПОЛИГОН
ДЛЯ РАЗРАБОТЧИКА И АДМИНИСТРАТОРА
НА ОСНОВЕ LINUX И VMWARE

АНДРЕЙ БЕШКОВ
4
администрирование
В первой статье этого цикла, опубликованной в сентябрь- машины для работы под управлением варианта Linux,
ском номере журнала «Системный администратор», я до- неизвестного авторам VMWare Workstation. Пользуясь
вольно подробно описал, что такое технология виртуаль- моим опытом, читатель ценой малой крови научится ус-
ных машин VMWare Workstation и каково ее предназна- танавливать VMWare Workstation на любое множество
чение. Также мы изучили теоретические основы функ- разновидностей Linux.
ционирования, способы и возможные цели практичес- Теперь перейдем ко второму виду систем. Системы,
кого применения VMWare Workstation в повседневной де- запущенные внутри контейнера виртуальной машины
ятельности администратора. Свою точку зрения на воп- VMWare Workstation, называются «гостевыми».
рос, для решения каких задач стоит применять подоб- Я уверен, что с задачей, которую мы будем решать, в
ный комплекс программного обеспечения, я высказывал той или иной степени приходилось сталкиваться большин-
в предыдущей статье. Ну а для тех, кто присоединился к ству администраторов. Нужно создать действующий ма-
нам только сейчас, кратко повторим содержание сказок кет сети предприятия с несколькими компьютерами, бла-
тысячи и одной ночи, прозвучавших раньше. Таким об- гополучно проживающими внутри этих виртуальных се-
разом, тем, кто еще не в курсе, я намекаю, что она была тей. И, вдобавок ко всему, нужно обеспечить всю весе-
посвящена установке, настройке и опыту успешного при- лую компанию доступом в Интернет. Для облегчения вос-
менения VMWare Workstation на платформе Windows. приятия учебного материала упростим рабочий макет,
Господам линуксоидам просьба перестать плеваться и поместив в каждую сеть только необходимый минимум
все же найти в себе силы прочесть вышеуказанную ста- компьютеров. Я думаю, этого будет достаточно для ус-
тью. Сделать это необходимо хотя бы по той простой пешного усвоения обсуждаемых концепций.
причине, что в данной статье я сознательно буду гово-
рить только о необходимом минимуме теории функцио-
нирования VMWare Workstation. Вместо этого мы обсу-
дим особенности дизайна виртуальных машин и множе-
ство прочих полезных вещей. Думаю, лучше потратить
время на изложение новых знаний, чем на повторение
пройденного материала.
Перед тем как пуститься в обсуждение всего разнооб-
разия полезных применений продукта, которому посвя-
щена наша сегодняшняя беседа, разберемся с некоторы-
ми наиболее важными базовыми идеями и терминами,
проходящими красной нитью через текст всей статьи.
Операционная система, под управлением которой ра-
ботает программа VMWare Workstation, называется «ос-
новной» системой. Такие системы, в свою очередь, де-
лятся на официально поддерживаемые и те, кому не по-
везло. Начнем с перечисления имен титулованных особ На приведенной выше схеме мы видим, что в сетях
из рода Linux: VMnet3 и VMnet2 находятся машины, работающие под
 Mandrake Linux 8.2, 9.0 управлением операционных систем Windows 98SE и
 Red Hat Advanced Server 2.1 Windows 2000, символизирующие обычные рабочие
 Red Hat Linux 7.0, 7.1, 7.2, 7.3, 8.0 станции. Машина Windows 98SE имеет статический
 SuSe Linux Enterprise Server 7,8 адрес 192.168.120.15, а Windows 2000 получает адрес
 SuSe Linux 7.3, 8.0, 8.1 192.168.80.128 динамически с помощью DHCP. Сеть
Vmnet1 используется нами как демилитаризованная
Официально поддерживаемыми называются те виды зона (DMZ). Внутри нее обитает машина со статичес-
Linux, для которых разработчики VMWare Workstation ким адресом 192.168.40.32 под управлением Linux
создали бинарные файлы модулей, загружаемых в Mandrake 9.0. На ней для демонстрации работы сете-
ядро. Пользователи всех остальных версий Linux дол- вых служб установлен веб-сервер Apache. Между со-
жны компилировать такие модули из исходных текстов бой все три сети, перечисленные выше, соединены с
самостоятельно. помощью шлюза, как ни странно, имеющего также три
В качестве основной Linux-системы ALT Linux Master 2.2 сетевых интерфейса и функционирующего под управ-
был выбран вопреки тому факту, что он отсутствует в лением FreeBSD 4.7. Я надеюсь, всем понятно, что для
приведенном выше списке, но в то же время довольно облегчения стыковки наших сетей все три интерфейса
широко распространен среди русскоязычных пользова- машины FreeBSD должны иметь фиксированные адре-
телей, и, наконец, за то, что вовремя оказался под ру- са. Ну и в роли нашего последнего героя выступает
кой. Процедура установки на любой из официальных машина NetBSD с двумя интерфейсами. Первый из них
Linux-дистрибутивов слишком проста, чтобы научить чи- с адресом 192.168.40.57 смотрит в демилитаризован-
тателя чему-то полезному. Многие подводные камни ную зону, а второй является шлюзом в Интернет. На
пройдут мимо и не будут замечены до тех пор, пока не втором интерфейсе 192.168.32.128 работает механизм
придется самостоятельно устанавливать виртуальные преобразования сетевых адресов (NAT), это, в свою оче-

№11(12), ноябрь 2003 5


администрирование
редь, дает возможность предоставить доступ к веб-сер- Workstation. Таким образом, вы сможете выбрать способ,
веру клиентам, находящимся в Интернете. Частично бла- наиболее подходящий лично вам. Ну а процедура конфи-
годаря этому машины, находящиеся в наших локальных гурирования, которая последует сразу за инсталляцией,
сетях, могут легко пользоваться услугами не только Linux одинакова для обоих видов дистрибутивов.
веб-сервера, но и какого угодно другого веб-сервера, Первым делом давайте рассмотрим наиболее простой
расположившегося в любой точке Интернета. способ. Для установки из rpm нужно выполнить всего одну
С точки зрения VMWare Workstation наши тестовые команду.
сети будут выглядеть так.
# rpm -i VMware-workstation-4.0.0-4460.i386.rpm

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

# rpm -qa | grep VMware


VMwareWorkstation-4.0.0-4460

На этом действия с rpm можно считать законченными.


Переходим к инсталляции из tar.gz:

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

Распаковываем дистрибутив и в результате получаем


директорию vmware-distrib. Переходим в нее и запускаем
скрипт инсталляции.
На первый взгляд схема сетевых взаимодействий выг-
лядит устрашающе сложно, но на самом деле это не так, # cd vmware-distrib
# ./vmware-install.pl
и через несколько минут вы будете с легкостью ориенти-
роваться в топологии наших сетей. Итак, на рисунке мы Скрипт будет задавать нам вопросы. В большинстве
видим все перечисленные ранее хосты и их интерфейсы. случаев нам подойдут ответы, предлагаемые по умолча-
Присмотревшись внимательно, легко разобраться в со- нию. Они заключены в квадратные скобки и, чтобы со-
ответствии между IP-адресами и интерфейсами. Далее гласиться с ними, нужно просто нажать клавишу «Enter».
изображены три виртуальных коммутатора для сетей host- Итак, приступим.
only VMnet1 (192.168.40.0), VMnet2 (192.168.80.0), VMnet3
(192.168.120.0). Соответственно для работы с устройством In which directory do you want to install the binary files?
[/usr/bin]
NAT (192.168.32.2) предназначена сеть VMnet8, для кото-
рой по умолчанию используется адресное пространство Скрипт спрашивает, куда складывать выполняемые
192.168.32.0. файлы. Ответ по умолчанию нас вполне удовлетворяет.
Также обратите внимание на тот факт, что виртуаль-
ные DHCP-сервера работают только в сетях VMnet2 и In which directory do you want to install the library files?
[/usr/lib/vmware]
VMnet8. Исходя из того факта, что в сетях VMnet1 и VMnet3
используются статические IP-адреса, DHCP-сервера этих Следующий вопрос касается того, куда нужно помес-
сетей отключены за ненадобностью. тить библиотечные файлы. Поступаем так же, как и в пре-
Итак, приступим к установке. На сайте производителя дыдущем случае.
заказываем себе тестовый серийный номер для Linux. Все
подобные лицензии действуют в течение 30 дней с мо- In which directory do you want to install the manual files?
[/usr/share/man]
мента заказа. Таким образом, мы получаем в свое распо-
ряжение на целый месяц полнофункциональную версию А здесь мы будем хранить документацию для VMWare
программы. Через несколько минут в наш ящик электрон- Workstation в формате man.
ной почты упадет два письма с серийными номерами для
разных платформ. Запрашивать новые тестовые лицен- In which directory do you want to install the documentation
files?
зии можно неограниченное количество раз, но на разные [/usr/share/doc/vmware]
почтовые ящики. Таким образом, можно использовать
VMWare Workstation, не нарушая никаких законов, сколь- Скрипт предложил поместить документацию в форма-
ко угодно долго. Подобная лояльная политика персонала те txt в директорию /usr/share/doc/vmware/. Пусть будет так,
VMWare.inc вызывает искреннее уважение. я не против, да и места на жестком диске не жалко.
Дело в том, что дистрибутив VMWare Workstation для
Linux распространяется в двух форматах – rpm и tar.gz. The path "/usr/share/doc/vmware" does not exist currently.
This program is going to create it, including needed parent
Скачать их можно тут: http://www.vmware.com/download/ directories. Is this what you want?
workstation.html. Также не забудьте взять фирменную до- [yes]
кументацию в формате pdf. Я расскажу о процедуре ус-
тановки каждого из этих дистрибутивов VMWare Жалуется на то, что директории /usr/share/doc/vmware

6
администрирование
не существует, и спрашивает, создавать ли ее. Отвеча- binary. Далее система хочет убедиться в том, что у нас
ем «yes». Кстати, после инсталляции, сходив в директо- установлен работоспособный компилятор языка C.
рию /usr/share/doc/vmware/, видим, что кроме лицензий
и инструкций по установке там больше ничего нет. Все Setup is unable to find the "make" program on your machine.
Please make sure it is installed. Do you want to specify
то же самое можно увидеть внутри директории doc дис- the location of this program by hand?
трибутива VMWare Workstation. Ну что же, не будем ос- [yes]
танавливаться и продолжим настройку.
Говорит, что не может найти утилиту make на нашей
What is the directory that contains the init directories машине, и предлагает поискать ее самостоятельно, а за-
(rc0.d/ to rc6.d/)?
[/etc/rc.d] тем сообщить правильный путь. Ну что же, попробуем
найти то, что нам нужно.
Тут нужно указать, где находится директория со скрип-
тами для разных уровней загрузки системы. Для исполь- # which make
which: no make in (/root/bin:/sbin:/usr/sbin:/usr/local/ ↵
зуемого мною дистрибутива это директория /etc/rc.d/. sbin:/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin)

What is the directory that contains the init scripts? Теперь посмотрим в списке установленных пакетов:
[/etc/rc.d/init.d]

Ну а тут находятся скрипты запуска демонов, исполь- # rpm -qa | grep make
зуемые при начальной загрузке системы.
Как ни грустно признать такой факт, но, судя по все-
Before running VMware Workstation for the first time, you му, этой утилиты у нас и вправду нет.
need to configure it by invoking the following command: "/
usr/bin/vmware-config.pl". Do you want this program to invoke Вставляем в привод первый диск дистрибутива и пе-
the command for you now? [yes] реходим в директорию с пакетами.

Можно считать инсталляцию завершенной. Скрипт # cd /mnt/cdrom/auto/ALTLinux/RPMS


спрашивает, нужно ли приступить к конфигурированию.
Оно производится с помощью скрипта /usr/bin/vmware- Ставим make:
config.pl. Теперь к нам присоединяются те, кто произво-
дили установку из rpm. Они должны запустить этот скрипт # rpm -i make-3.79.1-ipl6mdk.i586.rpm
вручную.
Узнаем версию ядра. Чуть позже эти знания обязатель- Те, у кого под рукой нет дисков с Alt Linux, но есть по-
но пригодятся нам. стоянное подключение к Интернету, могут воспользовать-
ся репозитарием пакетов сайта altlinux.ru. Устанавливать
# uname -a пакеты в этом случае можно с помощью программы apt-
Linux tigroid.net 2.4.20-alt5-up #1 Sun Feb 16 16:46:13 ↵
MSK 2003 i686 unknown unknown GNU/Linux get или synaptic.
После инсталляции make прерываем сценарий vmware-
Запускаем скрипт конфигурирования: config нажатием клавиш Ctrl+C и запускаем его опять.
Скрипт снова спрашивает о наличии компилятора, на
/usr/bin/vmware-config.pl это мы ему вновь отвечаем «yes».
You must read and accept the End User License Agreement to И в ответ получаем вот такую неприятную ошибочку.
continue. Press enter to display it.
Using compiler "/usr/bin/gcc". Use environment variable CC
to override.
Нажимаем Enter и читаем лицензионное соглашение.
Переход между страницами соглашения осуществляется i586-alt-linux-gcc: No such file or directory
Your compiler "/usr/bin/gcc" is not supported by this version
клавишей «Пробел». Дойдя до конца, видим приглаше- of VMware Workstation.
ние принять лицензию.
Unable to continue.
Do you accept? (yes/no) yes For more information on how to troubleshoot module-related
problems, please visit our Web site at "http://www.vmware.com/
download/modules/modules.html" and "http://www.vmware.com/
Отвечаем «yes» и движемся дальше. support/reference/linux/prebuilt_modules_linux.html".
Execution aborted.
Trying to find a suitable vmmon module for your running kernel.
None of VMware Workstation's pre-built vmmon modules is Начинаем разбираться с проблемой.
suitable for your running kernel. Do you want this program
to try to build the vmmon module for your system (you need
# rpm -qa | grep gcc
to have a C compiler installed on your system)? [yes]
libgcc3.2-3.2.1-alt2
gcc-common-1.2.1-alt2
Система рапортует о том, что не смогла найти моду-
ли, подходящие к нашему ядру. Список доступных моду- Судя по всему, компилятор действительно отсутству-
лей можно увидеть в директории /usr/lib/vmware/modules/ ет, в наличии только служебные пакеты для gcc.

№11(12), ноябрь 2003 7


администрирование
В ALT Linux для удобства администрирования исполь- What is the location of the directory of C header files that
match your running kernel?
зуется концепция альтернатив. Это означает, что все наи- [/usr/src/linux/include]
более важные системные утилиты должны иметь ссылки
на свои бинарные файлы из каталога /etc/alternatives: Смотрим, куда установили заголовочные файлы на-
шего ядра, на основе которых VMWare Workstation будет
#ll /etc/alternatives/gcc собирать модули, загружаемые в работающее ядро.
lrwxrwxrwx 1 root rpm 20 Aug 29 00:39 ↵
/etc/alternatives gcc -> /usr/bin/gcc_wrapper
# rpm -qpl kernel24-headers-2.4.20-alt5.i586.rpm
Таким образом, мы видим, что файл /etc/alternatives/
gcc указывает на файл /usr/bin/gcc_wrapper, который не Судя по всему, это директория /usr/lib/kernel/2.4.20-alt5/
является полноценным компилятором. А служит лишь для include/. Пишем ее в ответ на приглашение и снова жмем
того, чтобы выводить сообщение об ошибке на случай, «Enter». Система начнет компиляцию, и на экране начнут
если пользователь попытается запустить его. появляться надписи вроде:

# ./gcc_wrapper Extracting the sources of the vmmon module.


i586-alt-linux-gcc: No such file or directory
Building the vmmon module.
Такая вот своеобразная заглушка. Ну что же, значит,
make: Entering directory `/root/tmp/vmware-config0/vmmon-only'
придется снова ставить все самому. Переходим на диск 3 make[1]: Entering directory ↵
дистрибутива и пытаемся устанавливать пакет gcc2.96- `/root/tmp/vmware-config0/vmmon-only'
make[2]: Entering directory ↵
2.96-alt3.i586.rpm. Внимательный читатель может задать `/root/tmp/vmware-config0/vmmon-only/driver-2.4.20-alt5-up'
вопрос, почему мы используем gcc именно этой версии, make[2]: Leaving directory ↵
`/root/tmp/vmware-config0/vmmon-only/driver-2.4.20-alt5-up'
когда нам доступна гораздо более новая версия 3.2. От- make[2]: Entering directory ↵
вет очень прост: ядро, на котором работает система, со- `/root/tmp/vmware-config0/vmmon-only/driver-2.4.20-alt5-up'
make[2]: Leaving directory ↵
брано версией 2.96 компилятора gcc. Так что если попы- `/root/tmp/vmware-config0/vmmon-only/driver-2.4.20-alt5-up'
таться поставить что-то другое, скрипт инсталляции make[1]: Leaving directory ↵
`/root/tmp/vmware-config0/vmmon-only'
VMWare Workstation наотрез откажется работать. make: Leaving directory `/root/tmp/vmware-config0/vmmon-only'

# rpm -i gcc2.96-2.96-alt3.i586.rpm Система закончит сборку модуля vmmon и перейдет к


error: failed dependencies:
cpp2.96 = 2.96-alt3 is needed by gcc2.96-2.96-alt3 следующему модулю по имени vmnet. В результате сборки
binutils >= 1:2.13.90.0.4-alt2 is needed by gcc2.96-2.96-alt3 каждого модуля должна появляться вот такая надпись: «The
glibc-devel is needed by gcc2.96-2.96-alt3
module loads perfectly in the running kernel», говорящая, что
Итак, судя по результатам работы команды rpm, у нас созданный модуль загружается в ядро без конфликтов.
неудовлетворенные зависимости между пакетами. Нач- Далее отвечаем на вопрос, хотим ли мы, чтобы наши
нем разрешение конфликтов. Как всегда, ехидно замеча- виртуальные машины могли работать с сетью.
ем, что счастливчики, пользующиеся apt-get или synaptic,
подобных проблем не почувствуют. Мое нежелание ис- Do you want networking for your virtual machines? (yes/no/
help) [yes]
пользовать apt-get связано с тем, что я предпочитаю де-
лать все самостоятельно. Каким из перечисленных спо- Как обычно, радостно соглашаемся и переходим на
собов добавлять программное обеспечение в систему, следующую ступеньку.
оставляю на ваше усмотрение. Ну а я займусь увлека-
тельной игрой, суть которой сводится к поиску и установ- Configuring a bridged network for vmnet0.
ке следующих пакетов.
Сеть vmnet0 используется для работы с устройствами
# 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 Configuring a NAT network for vmnet8.
# rpm -i gcc2.96-2.96-alt3.i586.rpm Do you want this program to probe for an unused private
subnet? (yes/no/help)
[yes] no
Вновь запускаем скрипт, система снова спросит о ком-
пиляторе, а мы опять нажмем «Yes», соглашаясь с тем, Сеть vmnet8 по умолчанию используется для работы с
что вот теперь-то у нас точно есть компилятор. устройством NAT. Скрипт спрашивает, не желаем ли мы
автоматически выбрать свободную частную подсеть. Мы
Using compiler "/usr/bin/gcc". Use environment variable CC этого не хотим, потому как в наших планах построения
to override.
макета записано, что для данной цели будет использо-
На экране появится надпись о том, что в качестве ком- ваться сеть 192.168.32.0.
пилятора будет использоваться /usr/bin/gcc. Нас такой
поворот событий вполне удовлетворяет, поэтому с лег- What will be the IP address of your host on the private
network?
ким сердцем переходим к следующему шагу. [172.16.252.1] 192.168.32.1

8
администрирование
What will be the netmask of your private network? Мне такая возможность показалось полезной, и я раз-
[255.255.255.0]
решил ее включение. Кстати, в фирменной документа-
Соответственно описываем нужную нам для NAT-сеть ции сказано, что если на вашей машине уже работает
и ее маску. Samba, то в этом случае нужно в ответ на вопрос сказать
«no», потому что иначе в системе начнутся конфликты
The version of DHCP used in this version of VMware Workstation между полной и усеченной версиями Samba.
is licensed as described in the "/usr/share/doc/vmware/
DHCP-COPYRIGHT" file.
This system appears to have a CIFS/SMB server (Samba)
Hit enter to continue. configured for normal use. If this server is intended to
run, you need to make sure that it will not conflict with
Нажав «Enter», приступаем к изучению лицензии на the Samba server setup on the private network (the one that
we use to share the host's filesystem). Please check your /
усеченной версии сервера DHCP, поставляющегося в ком- etc/samba/smb.conf file so that:
плекте с VMWare Workstation.
. The "interfaces" line does not contain
"192.168.40.1/255.255.255.0"
Do you want to be able to use host-only networking in your . There is a "socket address" line that contains only your
virtual machines? real host IP address
[no] yes
Кстати, стоит отметить, что скрипт самостоятельно
Разрешаем использовать сети типа host-only. Что это за нашел на моей машине установленную, но не запущен-
сети и каково их предназначение, читайте в первой статье. ную в данный момент полноценную версию Samba. Про-
верить, правда ли это, можно, запустив на другой консо-
Do you want this program to probe for an unused private ли следующие команды:
subnet? (yes/no/help)
[yes] no
# rpm -qa | grep samba
samba-client-2.2.7-alt3
Запрещаем автоматический поиск свободных сетей, samba-2.2.7-alt3
потому что мы хотим самостоятельно выбирать адреса samba-client-cups-2.2.7-alt3
samba-common-2.2.7-alt3
раздаваемых сетей. Главное – случайно не напороться на
уже существующую в локальной сети подсеть. Иначе не- Ну что же, вернемся обратно к установке. Как всегда,
которое количество «приятных» минут вам обеспечено. сначала рассказали о лицензии на сервер Samba, с по-
мощью которого будет идти обмен файлами, а затем уве-
What will be the IP address of your host on the private домили, что Samba у нас функционирует нормально. За-
network? 192.168.40.0
тем прошел автоматический запуск демона VMWare
What will be the netmask of your private network? 255.255.255.0 Workstation.
The following hostonly networks have been defined:
Starting VMware services:
. vmnet1 is a host-only network on private subnet 192.168.40.0. Virtual machine monitor [ OK ]
Virtual ethernet [ OK ]
Вот так мы создали сеть Vmnet1 с адресным простран- Bridged networking on /dev/vmnet0 [ OK ]
Host-only networking on /dev/vmnet1 (background) [ OK ]
ством 192.168.40.0 и маской сети 255.255.255.0. Host-only networking on /dev/vmnet2 (background) [ OK ]
Повторяем те же действия для сетей vmnet2 и vmnet3. Host-only networking on /dev/vmnet3 (background) [ OK ]
Host-only networking on /dev/vmnet8 (background) [ OK ]
Только теперь в качестве адресов сетей используем со- NAT networking on /dev/vmnet8 [ OK ]
ответственно 192.168.80.0 и 192.168.120.0.
Снова принимаем поздравления с удачной установкой.
The following hostonly networks have been defined: Кстати, убедиться, что работает именно усеченная вер-
. vmnet1 is a host-only network on private subnet 192.168.40.0. сия Samba, можно с помощью запуска на другой консоли
. 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.

Cкрипт рапортует об успешном создании сетей vmnet1, # ps -ax | grep -v grep | grep mbd
1260 ? S 0:00 /usr/bin/vmware-nmbd -D ↵
vmnet2, vmnet3. В ответ на вопрос, не хотим ли мы на- -l /dev/null -s /etc/vmware/vmnet1/smb/smb.conf ↵
строить еще несколько сетей, отвечаем «no». -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 ↵
Do you want this program to automatically configure your -f /var/run/vmware-smbd-vmnet1.pid
system to allow your virtual machines to access the host's
filesystem? (yes/no/help) [no]
Теперь нужно решить, от имени какого пользователя
Хотим ли мы, чтобы виртуальные машины могли про- samba будет получать доступ к файлам, находящимся на
зрачно работать с файлами, находящимися на файло- диске основной операционной системы.
вых системах основной операционной системы? Реали-
зуется это через запуск под управлением основной опе- You have successfully configured VMware Workstation to allow
your virtual machines to access the host's filesystem. Would
рационной системы усеченной версии программного you like to add a username and password for accessing your
обеспечения Samba. Эта версия создана специально для host's filesystem at this time? (yes/no/help)
[yes] no
подобной цели, и, скорее всего, ни для чего другого не
годится. Мне показалось, что создавать еще одного пользова-

№11(12), ноябрь 2003 9


администрирование
теля только для того, чтобы разграничить доступ к файлам -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 ↵
ким образом, Samba будет работать от имени пользовате- -pf /var/run/vmnet-dhcpd-vmnet2.pid vmnet2
ля root, запустившего серверную часть VMWare Workstation. 7493 ? S 0:00 /usr/bin/vmnet-dhcpd ↵
-cf /etc/vmware/vmnet8/dhcpd/dhcpd.conf ↵
Проверить, как функционируют подсистемы VMWare -lf /etc/vmware/vmnet8/dhcpd/dhcpd.leases ↵
Workstation и какой у каждой из них статус, можно с по- -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 ↵
# service vmware status -c /etc/vmware/vmnet8/nat/nat.conf
At least one instance of VMware Workstation is still running. 7543 ? S 0:00 /usr/bin/vmnet-dhcpd ↵
-cf /etc/vmware/vmnet3/dhcpd/dhcpd.conf ↵
vmnet-bridge (pid 1165) is running... -lf /etc/vmware/vmnet3/dhcpd/dhcpd.leases ↵
vmnet-dhcpd (pids 1373 1287 1273 1239) are running... -pf /var/run/vmnet-dhcpd-vmnet3.pid vmnet3
vmnet-netifup (pids 1308 1251 1208 1182) are running...
Module vmmon installed Если вы помните, мы уже говорили, что в сетях vmnet1
Module vmnet installed
и vmnet3 все клиенты работают со статическими адреса-
Итак, первоначальная настройка VMWare Workstation ми, поэтому DHCP-сервера этих сетей работают вхолос-
закончена, и мы можем позволить себе посмотреть, как тую. Желательно не забыть отключить DHCP-компонен-
выглядят добавочные сетевые адаптеры, на основе кото- ты вышеназванных сетей. Впрочем, если вы этого не сде-
рых работают наши виртуальные сети. лаете, то ничего страшного не произойдет, но дизайн сети
будет уже не таким опрятным, да и системные ресурсы
# ifconfig все же не бесконечны.
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0 Все настройки VMWare Workstation хранятся внутри
UP LOOPBACK RUNNING MTU:16436 Metric:1 каталога /etc/vmware. Каждая из сетей имеет свою папку
RX packets:2 errors:0 dropped:0 overruns:0 frame:0
TX packets:2 errors:0 dropped:0 overruns:0 carrier:0 внутри вышеназванного каталога. Для наглядности давай-
collisions:0 txqueuelen:0 те посмотрим на содержимое папки /etc/vmware/vmnet1,
RX bytes:92 (92.0 b) TX bytes:92 (92.0 b)
в которой хранятся настройки для сети vmnet1. Как вы
vmnet1 Link encap:Ethernet HWaddr 00:50:56:C0:00:01 могли бы догадаться, /etc/vmware/vmnet1/dhcpd/ содержит
inet addr:192.168.40.1 Bcast:192.168.40.255 ↵
Mask:255.255.255.0 настройки сервера dhcp, а /etc/vmware/vmnet1/smb/ соот-
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 ветственно является местом хранения конфигурационных
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:65 errors:0 dropped:0 overruns:0 carrier:0 файлов усеченной версии сервера Samba.
collisions:0 txqueuelen:100 Для того чтобы остановить сервера DHCP, обслужи-
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
вающие сети vmnet1 и vmnet3, нужно удалить каталоги
vmnet2 Link encap:Ethernet HWaddr 00:50:56:C0:00:02 /etc/vmware/vmnet1/dhcpd/ и /etc/vmware/vmnet3/dhcpd/. Ну
inet addr:192.168.80.1 Bcast:192.168.80.255 ↵
Mask:255.255.255.0 и напоследок стоит убедиться, что в файле /etc/vmware/
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 vmnet2/dhcpd/dhcpd.conf есть вот такая секция:
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100 subnet 192.168.80.0 netmask 255.255.255.0 {
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) range 192.168.80.128 192.168.80.254;
option broadcast-address 192.168.80.255;
vmnet3 Link encap:Ethernet HWaddr 00:50:56:C0:00:03 option domain-name-servers 192.168.80.1;
inet addr:192.168.120.1 Bcast:192.168.120.255 ↵ option domain-name "localdomain";
Mask:255.255.255.0 option routers 192.168.80.2;
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 }
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 Иногда скрипт конфигурирования сети VMWare
collisions:0 txqueuelen:100 Workstation забывает дописать в эту секцию строку option
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
routers, отвечающую за адрес шлюза по умолчанию. Со-
vmnet8 Link encap:Ethernet HWaddr 00:50:56:C0:00:08 ответственно клиенты при работе с DHCP-сервером ус-
inet addr:172.16.252.1 Bcast:172.16.252.255 ↵
Mask:255.255.255.0 пешно получают IP-адреса, но дальше своей родной сети
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 пойти не могут, потому что не знают адреса маршрутиза-
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 тора. Осталось подправить одну крохотную, но в то же
collisions:0 txqueuelen:100 время очень важную настройку. Если мы хотим, чтобы
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
люди из внешнего мира видели наш виртуальный веб-сер-
Теперь проверим, какие процессы работают в систе- вер, работающий на машине Linux Mandrake, то нам нуж-
ме от имени VMWare Workstation но организовать проброс входящих соединений. Получа-
ется, что все соединения, приходящие на 80-й порт ре-
# ps -ax | grep -v grep | grep vm альной машины, нужно заворачивать на 80-й порт вирту-
7398 ? S 0:00 /usr/bin/vmnet-dhcpd ↵
-cf /etc/vmware/vmnet1/dhcpd/dhcpd.conf ↵ ального веб-сервера. Делается это очень просто, хотя и
-lf /etc/vmware/vmnet1/dhcpd/dhcpd.leases ↵ не так элементарно, как если бы VMWare Workstation ра-
-pf /var/run/vmnet-dhcpd-vmnet1.pid vmnet1
7411 ? S 0:00 /usr/bin/vmware-nmbd -D ↵ ботала под управлением Windwos. Нужно добавить в файл
-l /dev/null -s /etc/vmware/vmnet1/smb/smb.conf ↵ /etc/vmware/vmnet8/nat/nat.conf внутрь секции [incomingtcp]
-f /var/run/vmware-nmbd-vmnet1.pid
7431 ? S 0:00 /usr/bin/vmware-smbd -D ↵ следующие строки.

10
администрирование
# incoming www from outside on port 80  vmnet-sniffer – перехватчик трафика для виртуальных
80 = 192.168.40.32:80
интерфейсов, например, прослушивать данные, переда-
Затем необходимо перезапустить серверную часть ваемые через сеть vmnet3, можно с помощью команды
VMWare Workstation, заставив применить внесенные из- vmnet-sniffer -e /dev/vmnet3. Это бывает очень полезно
менения. для отладки разных проблем сетевой подсистемы;
 vmstat – показывает состояние виртуальной машины;
# service vmware restart
Stopping VMware services:
 vmware – собственно главный исполняемый файл си-
Virtual machine monitor [ OK ] стемы VMWare Workstation;
Bridged networking on /dev/vmnet0
DHCP server on /dev/vmnet1
[ OK
[ OK
]
]
 vmware-config.pl – наш старый знакомый скрипт на-
SMB share server on /dev/vmnet1 [ OK ] стройки;
SMB name server on /dev/vmnet1
Host-only networking on /dev/vmnet1
[ OK
[ OK
]
]
 vmware-loop – программа для экспорта данных из вир-
DHCP server on /dev/vmnet2 [ OK ] туальной файловой системы в реальную;
Host-only networking on /dev/vmnet2
DHCP server on /dev/vmnet3
[ OK
[ OK
]
]
 vmware-mount.pl – инструмент для управления монти-
Host-only networking on /dev/vmnet3 [ OK ] рованием разделов виртуальных дисков;
DHCP server on /dev/vmnet8
NAT networking on /dev/vmnet8
[ OK
[ OK
]
]
 vmware-nmbd – усеченная версия сервера имен NETBIOS;
Host-only networking on /dev/vmnet8 [ OK ]  vmware-ping – служит для проверки виртуальных сетей;
Virtual ethernet
Starting VMware services:
[ OK ]  vmware-smbd – усеченная версия демона для работы
Virtual machine monitor [ OK ] с SMB/CIFS (Samba);
Virtual ethernet
Bridged networking on /dev/vmnet0
[ OK
[ OK
]
]
 vmware-smbpasswd – программа управления пользо-
Host-only networking on /dev/vmnet1 (background) [ OK ] вателями и паролями из комплекта Samba;
Host-only networking on /dev/vmnet2 (background) [
Host-only networking on /dev/vmnet3 (background) [
OK
OK
]
]
 vmware-uninstall.pl – скрипт деинсталляции VMWare
Host-only networking on /dev/vmnet8 (background) [ OK ] Workstation;
NAT networking on /dev/vmnet8  vmware-wizard – программа, используемая внутри VMWare
Workstation для создания новых виртуальных машин.
Судя по выводу скрипта, DHCP-сервера отключились
во всех виртуальных сетях разом. На самом деле это не Как вы могли убедиться, VMWare Workstation постав-
так. Давайте проверим наличие демонов VMWare ляется с довольно богатым набором инструментов. Воз-
Workstation в памяти. Делать это нужно все той же доб- можно, некоторые из них мы будем использовать для ди-
рой старой командой ps: агностики и устранения неполадок, если таковые возник-
нут в наших виртуальных сетях.
# 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 теля root больше нет необходимости, поэтому нам стоит
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 ↵ и будем ежедневно работать с VMWare Workstation.
-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 ↵ $ /usr/bin/vmware
-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 появится главное окно клиентской части VMWare Workstation.
4645 pts/1 S 0:00 /usr/bin/vmnet-netifup ↵
-d /var/run/vmnet-netifup-vmnet8.pid /dev/vmnet8 vmnet8 Пользуясь меню Help → Enter Serial Number, активируем ус-
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

Затаив дыхание, рассматриваем вывод команды. И –


о чудо! – судя по надписям, демоны DHCP-сервера впол-
не нормально обслуживают сети vmnet2 и vmnet8. С на-
чальной настройкой покончено, можно двигаться дальше.
Также стоит посмотреть, что появилось в директории
/usr/bin/ после инсталляции:
 vmnet-bridge – программа для создания устройств
«мост»;
 vmnet-dhcpd – усеченная версия демона dhcp; Программа предложит зарегистрироваться в качестве
 vmnet-natd – демон, реализующий функции устройства пользователя на сервере vmware.com. Я решил, что делать
NAT; этого не желаю, и нажал «Cancel». Вы же можете посту-
 vmnet-netifup – программа для создания виртуальных пать, как захотите, потому что регистрация на сайте – ме-
сетевых интерфейсов; роприятие сугубо добровольное и на работу не влияющее.

№11(12), ноябрь 2003 11


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

В случае если VMWare Workstation в данный момент про-


изводит какие-либо действия с нашей виртуальной маши-
ной, в директории появится еще и файл блокировки досту-
па win98.vmx.WRITELOCK. Ну а если вдобавок ко всему
еще и гостевая система выполняется, то для каждого фай-
ла виртуального диска создается дополнительный файл
блокировки win98.vmdk.WRITELOCK. Также внутри дирек-
тории можно встретить файлы вида win98.vmss и
win98.vmsn. Соответственно первый из них содержит дан-
ные, полностью описывающие состояние виртуальной ма-
шины на тот момент, когда ее функционирование было
приостановлено с помощью команды Power → Suspend. Ну
а второй хранит данные моментального снимка виртуаль-
ной машины, получаемого с помощью команды Snapshot →
Save Snapshot. Время от времени внутри директории с
файлами гостевой системы на короткие промежутки вре-
Особое внимание cтоит обратить на дату, расположив- мени будут появляться различные служебные файлы, но
шуюся за надписью Expiration. Она указывает, до какой вы их, скорее всего, никогда не увидите.
даты мы сможем пользоваться лицензией, а значит, и са- Разобравшись с устройством виртуальной машины на
мой программой VMWare Workstation. файловом уровне, перейдем от теории к действиям. Для
Итак, закончив с первоначальной настройкой VMWare того чтобы мы могли работать с выбранной машиной, нуж-
Workstation, перейдем к созданию наших виртуальных ма- но объяснить VMWare Workstation, где находятся необхо-
шин. Этот процесс очень подробно описывался в первой димые нам файлы.
статье данного цикла. Если есть желание, можете выпол- Используем меню File → Open, получаем следующую
нить его снова. Хотя я думаю, что ничего нового вы для себя картинку.
не откроете. Ну а я как человек, искренне верящий в слова
«лень – двигатель прогресса», поступлю иначе. Если вы
помните, от предыдущей статьи нам в наследство остались
комплекты файлов виртуальных машин, созданных под
Windows. Сейчас мы займемся их переносом под Linux. Ма-
шина, на которой происходят все безобразия, описанные в
этой статье, имеет на борту две операционных системы –
ALT Linux и Windows 2000 Professional. Таким образом, нам
нужно примонтировать файловую систему Windows к дере-
ву Linux в директорию /mnt/win_d/VirtualMachines. Выполнив
эту задачу, мы получим доступ к файлам наших виртуаль-
ных машин. Итак, давайте посмотрим, из каких файлов со-
стоит любая виртуальная машина. В качестве примера
возьмем машину Windows 98.
Файлы win98-f001.vmdk и win98.vmdk отвечают за ра-
боту с жестким диском. Первый из них содержит образ
диска, а второй – его конфигурацию. Далее идет файл

12
администрирование
Выбираем файл win98.vmx и обязательно используем Совсем не понравилась VMWare Workstation моя ps/2
по прямому назначению кнопку «ОК». После того, как мышь glidepoint. Но это не беда, доктор сказал, что на этом
VMWare Workstation выполнит открытие всех нужных фай- свете почти все неприятности поправимы.
лов, можно запускать виртуальную машину с полученной
только что гостевой системой.
Тут нас ждет несколько неприятных неожиданностей. Как
из рога изобилия, начинают сыпаться ошибки и предупреж-
дения. Возможно, на вашей системе некоторые из них ни-
как не проявят себя, а взамен появятся какие-либо новые
конфликты. Но бояться этого все же не стоит. Большинство
из таких проблем поддаются коррекции довольно просто. Снова не совпадает наименование устройств систе-
мы. На этот раз нам отказала звуковая карта.

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

После того как гостевая система с горем пополам за-


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

В связи с разницей в имени гибкого диска между


Windows и Linux, диск A:\ тоже не хочет работать.

Итак, нам нужно вместо VMnet3 выбрать из ниспада-


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

№11(12), ноябрь 2003 13


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

Выбрав тот или иной путь для разрешения проблемы


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

Теперь займемся лечением устройства CD-ROM. Сра-


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

Настраивать мышь можно и вручную: для этого нужно


открыть файл /etc/X11/XF86Config-4, в котором находят-
ся настройки X-сервера. Ищем внутри него секцию, отве-
чающую за работу мыши, и вносим вместо нее следую-
щие строки:
Для начала указываем, что нужное нам физическое уст-
ройство называется /dev/cdrom/. И обязательно устанавли- Section "InputDevice"
Identifier "Mouse1"
ваем переключатель опции «Legacy emulation». Таким обра- Driver "mouse"
зом, включается режим совместимости со старыми образ- Option "Protocol" "IMPS/2"
Option "Device" "/dev/psaux"
цами устройств CD-ROM. Это дает дополнительную стабиль- Option "ZAxisMapping" "4 5"
ность функционирования. Затем выбираем один из двух EndSection
путей: либо приказываем работать с виртуальным CD-ROM
в формате IDE-устройства, либо маскируем его под SCSI- Вешаем на стену скальп еще одной решенной пробле-
устройство. В результате должна получиться одна из двух мы и переходим к следующей. Сейчас нам нужно почи-
изображенных ниже комбинаций настроек. нить устройство для работы с гибкими дисками. Под
Windows оно называется A:\ , ну а под Linux это будет одно
из устройств семейства /dev/fd. В моей системе это уст-
ройство называется /dev/fd0.

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

Судя по всему, гостевая система, запущенная первой,


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

Разобравшись со всеми проблемами, закрываем


VMWare Workstation и все остальные приложения. Те-
перь нужно перезапустить X-сервер для того, чтобы из-
менения в настройках мыши вступили в действие. На-
жимаем комбинацию кнопок Ctrl+Alt+BackSpace. Пос-
ле перезагрузки X-сервера снова входим в систему и
запускаем VMWare Workstation и внутри нее гостевую
машину Windows 98. Уж теперь-то все должно зарабо-
тать на ура.
Используя вышеописанную методику, чиним все ос- Таким образом, устройство для работы с гибкими
тальные гостевые системы. Таким образом, у нас появят- дисками будет отключено по умолчанию. Мы сможем
ся работоспособные виртуальные машины с FreeBSD, включить его обратно в любой момент, когда нам нуж-
NetBSD, Linux, Windows 2000. Кстати, перед запуском каж- но будет поработать с ним. А затем, когда необходи-
дой из них вы будете видеть вот такую картинку, предуп- мость в его услугах отпадет, будем возвращать его в
реждающую о том, что в системе работает несколько го- первозданное состояние. Самый простой способ вклю-
стевых систем, и совместный доступ к аппаратным уст- чить или выключить устройство – это воспользоваться
ройствам может работать некорректно. меню Edit → Removable Devices, а затем выбрать нуж-
ное устройство и вид действия, производимого над ним.
Например, для отключения обсуждавшего выше дис-
ковода гибких дисков нужно пройти через следующую
цепочку меню Edit → Removable Devices → floppy0 →
Disconnect.
Разобравшись с первым конфликтом, переходим к
следующему. Тут мы видим, что таймер реального вре-
мени, в качестве которого выступает устройство /dev/rtc,
также заблокирован первой гостевой системой.
К таким устройствам можно отнести CD-ROM, гиб-
кие диски и таймер реального времени. Если не хоти-
те, чтобы подобные надписи впредь появлялись на эк-
ране, воспользуйтесь переключателем «Never show this
hint again». Хотя такой подход все равно не спасет от
конфликтов, зато избавит от постоянного лицезрения
данной надписи. Загрузив первую гостевую систему,
сразу же запускаем вторую и моментально получаем
первый конфликт.

Прочитав фирменную документацию по VMWare


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

№11(12), ноябрь 2003 15


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

Пугаться этого не стоит, вероятность того, что вы ис-


портите свою гостевую систему, слишком мала. Просто
по непонятным причинам конфигурационный файл ока-
зывается заблокирован для записи. Чтобы решить эту
проблему, нужно закрыть вкладку виртуальной машины
внутри VMWare Workstation и открыть ее снова.
На следующей картинке можно увидеть одновремен-
ную работу всех систем, на импортирование которых мы
потратили столько труда. Для наглядности каждая из них
запущена в отдельном окне. Конечно, можно было запус-
тить их внутри разных вкладок родительского окна, но я
решил, что так картинка будет выглядеть недостаточно
эффектно. Добиться подобного вида можно, используя
меню File → New → New Window. Во вновь появившемся
окне, следуя укоренившейся привычке, выбираем File →
Open. Внимательный читатель может спросить, зачем все Впрочем, использовать такие приемы в практической
эти сложности. Мой ответ будет довольно прост. Такой работе не стоит, потому что совершенно непонятно, как
подход позволяет разложить виртуальные машины в нуж- поведут себя обе гостевые системы, если им одновремен-
ном порядке по виртуальным столам оконного менедже- но потребуется записать какие-либо данные в файл вир-
ра. Лично мне это кажется весьма удобным. туального диска.
У подобной методики работы есть один щекотливый Мы немного отвлеклись от темы нашего повествова-
момент. Если внутри любого окна создана вкладка с гос- ния. После переноса и успешного запуска всех гостевых
тевой операционной системой, то эта система становит- систем настал момент проверить, насколько правильно
ся не доступна для запуска из другого окна. Все дело в работает наш макет. Для этого на Windows-машинах вы-
том, что VMWare Workstation в момент открытия конфигу- полняем команду ipconfig /all и смотрим, какие настройки
рации виртуальной машины создает файл эксклюзивной у нашей сетевой подсистемы. Например, на следующем
блокировки. Называется такой файл обычно «имя госте- снимке можно увидеть результат выполнения вышеука-
вой системы.vmx.WRITELOCK». Причем файл создается занной команды на машине Win2000.
еще до запуска гостевой системы и остается до тех пор,
пока не будет закрыта вкладка гостевой системы или за-
вершится работа VMWare Workstation. Получается, что
конфигурация гостевой системы будет заблокирована в
любом случае, вне зависимости от того, работает госте-
вая система или нет. Если попытаться открыть эту госте-
вую систему еще раз, то получим по рукам.

16
администрирование
Так как все остальные системы, используемые в на- mtu 16384
inet6 ::1 prefixlen 128
шем макете, являются диалектами Unix, то для просмот- inet6 fe80::1%lo0 prefixlen 64 scopeid 0x6
ра состояния их сетевых интерфейсов нужно использо- inet 127.0.0.1 netmask 0xff000000
ppp0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500
вать команду ifconfig. Например, для машины FreeBSD sl0: flags=c010<POINTOPOINT,LINK2,MULTICAST> mtu 552
вывод команды выглядел вот так:
Таким образом, проверив правильность настройки
lnc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX, ↵ сетевых компонентов всех подопытных систем, начина-
MULTICAST> mtu 1500
inet 192.168.40.2 netmask 0xffffff00 ↵ ем смотреть, как по тестовым сетям передаются данные.
broadcast 192.168.40.255 Для этого на любой машине выполняем команду ping с
inet6 fe80::20c:29ff:fec7:b430%lnc0 ↵
prefixlen 64 scopeid 0x1 адресами всех остальных машин. Если ping работает, то
ether 00:0c:29:c7:b4:30 переходим к следующему этапу. Теперь любым браузе-
lnc1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX, ↵
MULTICAST> mtu 1500 ром заходим на адрес 192.168.40.32. Должны увидеть что-
inet 192.168.80.2 netmask 0xffffff00 ↵ то вроде такой страницы с приветствием от веб-сервера
broadcast 192.168.80.255
inet6 fe80::20c:29ff:fec7:b43a%lnc1 ↵ Apache.
prefixlen 64 scopeid 0x2 Затем с любой машины, находящейся за пределами
ether 00:0c:29:c7:b4:3a
lnc2: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX, ↵ созданной виртуальной сети, пытаемся сходить браузе-
MULTICAST> mtu 1500 ром на адрес нашей реальной машины. В ответ должны
inet 192.168.120.2 netmask 0xffffff00 ↵
broadcast 192.168.120.255 получить тот же самый привет от Apache. Судя по всему,
inet6 fe80::20c:29ff:fec7:b444%lnc2 ↵ задача по созданию виртуального полигона, полностью
prefixlen 64 scopeid 0x3
ether 00:0c:29:c7:b4:44 соответствующего схеме, наконец-то выполнена. Как все-
lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> ↵ гда, прощаемся до следующей статьи, которая будет по-
mtu 1500
faith0: flags=8002<BROADCAST,MULTICAST> mtu 1500 священа разным трюкам, заметно облегчающим жизнь
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> ↵ при работе с VMWare Workstation.

№11(12), ноябрь 2003 17


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

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

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

18
администрирование
Что мне нравится в OС GNU/Linux, так это гибкость во серверах, то она уже не удовлетворяет обычным тре-
всем, практически можно собрать систему под опреде- бованиям – большие разделы жесткого диска, быстрое
ленные задачи, выбрав необходимое из множества ком- восстановление после сбоев, высокопроизводительные
понентов. Кроме патчей к ядру, различных версий биб- операции ввода/вывода, потребность в хранении тысяч
лиотек и компиляторов, есть возможность выбора и фай- и тысяч файлов, представляющих терабайты данных.
ловой системы, на которой будет работать ОС. В данной Все это уже превышает возможности данной файловой
статье я предлагаю пробежаться по многообразию и оп- системы. Еще одной особенностью этой файловой си-
ределиться с выбором, узнать о достоинствах и недостат- стемы является тройная косвенная адресация для ука-
ках предлагаемых файловых систем. зания расположения блоков больших файлов. Выгля-
Под файловой системой понимается физический спо- дит это примерно так. Вся информация о расположе-
соб организации данных на дисковом разделе, т.е. воз- нии блоков данных, принадлежащих данному файлу,
можность их хранения, нахождения и манипулирования хранится в inode. Если файл маленький, то в его мета-
ими (запись, стирание). Думаю, такого простенького оп- данных хватает места для размещения нужной инфор-
ределения вполне достаточно, чтобы понять, какие тре- мации, и туда помещаются прямые ссылки на ячейки
бования выдвигаются к файловой системе. До недавнего (логические блоки), в которых хранятся данные, – пря-
времени в Linux предлагалась для использования факти- мая адресация. При увеличении же объема файла, так
чески только одна файловая система ext2fs. Да, возмож- как отведенное место уже не может адресовать зани-
но было, конечно, и установить ее в раздел FAT, но заня- маемое пространство, то блоки метаданных указыва-
тие это кажется мне крайне нездоровым, да и производи- ют уже на косвенные блоки, в которых содержатся ад-
тельность и стабильность при таком размещении только реса с данными, определенными в файле (простая кос-
страдает. Также изначально в ядре поддерживается воз- венная адресация), или опять же указатели на следую-
можность взаимодействовать с файловыми системами щие косвенные блоки (тройная косвенная адресация).
других ОС, расположенных на одном диске. Их можно по- То есть если файл увеличивается в размере и для
смотреть, набрав: пользователя это проходит как единичная операция,
внутри выглядит несколько иначе: поначалу распреде-
#make xconfig ляются новые блоки, для того чтобы содержать новые
данные, затем модифицируется inode, чтобы сделать
и зайдя в пункт меню File system, все я их перечислять не запись о новых указателях и новых размерах, а затем,
буду, для включения их поддержки ядром его необходи- в конце концов, производится запись данных. Вот те-
мо иногда пересобрать, активировав необходимый пункт. перь представьте, что будет, если при записи файла
Да и то для наиболее распространенных, таких как NTFS произойдет сбой. Возможно несколько вариантов. На-
Windows NT и UFS (FFS) FreeBSD, запись в них помечена пример, запись уже произведена или еще не начина-
как DANGEROUS, плюс еще не забыта даже MINIX (стоит лась – это самый оптимистичный вариант, в первом слу-
ли говорить о позавчерашнем дне). чае после перезагрузки вы так и будете работать с до-
Но сейчас предлагаемый ассортимент несколько увели- кументом, ничего не заметив, а во втором случае про-
чился, в современных ядрах добавилась возможность рабо- сто теряется пара часов работы, но с файловой систе-
ты с так называемыми журналируемыми файловыми сис- мой ничего такого страшного не произойдет. А вот если
темами – ext3fs, ReiserFS, XFS и JFS. Не говоря уж о под- система «упала» именно в момент сохранения файла,
держке технологий Soft-RAID и LVM. Но и это еще не все, то это худшее из того, что могло произойти. Если за-
для тех, кому нужна повышенная конфиденциальность ин- пись производилась в зону метаданных, то теперь ин-
формации, хранимой на компьютере, вполне подойдет CFS, формация, содержащаяся в них, не будет соответство-
свободная криптографическая файловая система от Матта вать реальному расположению файлов на диске. Ситу-
Блейза (Mutt Blaze) для Unix/Linux (http://www.crypto.com/ ация несколько усугубляется еще и тем, что Linux, в
software/) или TCFS (Transparent Cryptographic File System) отличие от Windows, не обязательно записывает обнов-
(http://www.tcfs.it/). В данной статье будут рассмотрены ленный файл поверх старого, при записи во избежа-
только классические файловые системы как наиболее ние фрагментации выбирается место, чтобы он влез
часто применяемые на компьютерах, об остальных пого- полностью и на соседние блоки. Поэтому-то в этой си-
ворим как-нибудь отдельно в следующий раз. Итак, по стеме нет программ дефрагментаторов, мне доводи-
старшинству. лось видеть фрагментацию данных максимум 1-2 %, да
и то на переполненном диске, что, согласитесь, очень
Ext2fs мало (вообще на переполненных дисковых разделах су-
Как уже говорилось, данная файловая система в Linux – щественно падает скорость операций IO, что характер-
это уже стандарт де-факто, ее характеризует довольно но для всех Unix-файловых систем). Так вот, а если
высокая надежность и самое высокое из рассматрива- данные заносились в каталог (а ведь это тоже файл),
емых файловых систем быстродействие, которые в то после перезагрузки мы можем недосчитаться одно-
свою очередь достигаются дублированием особо важ- го каталога или, что хуже, вообще целого раздела. Ну
ных метаданных и очень эффективным механизмом кэ- а если произошел сбой при записи в область данных,
ширования дисковых операций. Но так как Linux исполь- то, что он будет потом содержать, зависит от вашего
зуется все чаще и чаще на высокопроизводительных везения, особенно в случае, если производилась запись

№11(12), ноябрь 2003 19


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

20
администрирование
ственно, некоторый полезный объем теперь приходит- бывало, не замечая подмены. К тому же идентичность
ся отводить под сам журнал, но он, как правило, не за- файловых систем позволяет оперативно переходить как
нимает места больше 32 Мб, что по нынешним време- с еxt3fs на ext2fs, так и наоборот. Поясню. Мне часто при-
нам не так уж и много. ходится устанавливать другие дистрибутивы, в том чис-
Самый главный вывод такой: журналируемые фай- ле и со старыми ядрами, не поддерживающими новинку.
ловые системы предназначены не для восстановления Так вот все разделы, на которых используется ext3fs, я
всех ваших данных любой ценой, главная их задача зак- монтирую просто как ext2fs, и никаких, повторяю, ника-
лючается в поддержании непротиворечивости метадан- ких недоразумений при использовании не происходит.
ных файловой системы на момент сбоя и ускорения Другое преимущество данной файловой системы состо-
процесса загрузки системы после сбоя. ит в том, что она, в отличие от остальных, поддерживает
Также в большинстве современных journaling-фай- режим журналирования данных (полное или частичное).
ловых систем поддерживаются: Естественно, добавление журнала, казалось, должно ухуд-
 более быстрое распределение свободных блоков, для шить производительность данной системы по сравнению
этого многие из них построены на основе сбалансиро- с «нежурнальным» вариантом. Оказалось, что за счет
ванных деревьев, иначе известных как B+ деревья; улучшения алгоритма движения головки жесткого диска
 большее количество файлов в каталоге, т.к. в этом слу- данная файловая система в некоторых случаях даже об-
чае обычная связка name-inode становится неэффек- ходит ext2fs. Ext3fs имеет три режима работы:
тивной, то для хранения имен файлов используются B+  data=writeback – режим, при котором не выполняется
деревья. В некоторых случаях возможно использова- никакого журналирования данных, только метаданные,
ние всего одного B+ дерева для полной системы, что самый ограниченный режим журналирования (кстати,
намного укорачивает поиск файла и соответственно применяемый во всех других ФС, рассматриваемых
операции по работе с ним. Плюс динамическое выде- ниже), не гарантирующий сохранности данных после
ление inоdes вместо неэффективного статического. сбоя. Но за счет этого возрастает скорость работы
такой файловой системы, и фактически журнал пред-
Старая методика прямого, косвенного и тройного кос- назначен только для того, чтобы уменьшить время на-
венного механизма хранения информации о нахождении чальной загрузки системы.
данных файла очень неудобна при работе с файлами боль-  По умолчанию же используется data=ordered – «золо-
шого размера по причине долгого поиска информации и тая» середина между полным журналированием дан-
в современных файловых системах заменена на более ных и предыдущим режимом. Официально в этом слу-
удобную, позволяющую работать с большими файлами чае журналируются только метаданные, но блоки со-
«напрямую». ответствующих им данных записываются первыми. В
Кроме того, некоторые новые файловые системы име- большинстве случаев такой режим гарантирует сохран-
ют более совершенный механизм управления внутренней ность данных, особенно если данные дописывались в
фрагментацией (что это такое, объясню чуть позже) и рас- конец файла, чего в большинстве случаев предоста-
пределения inodes, чем ext2. Может, конечно, сложиться точно. Производительность, естественно, чуть ниже
впечатление, что место журналируемых файловых сис- предыдущей и выше полного журналирования, кото-
тем где-нибудь на сервере, нет, они подходят на все сто рому отвечает режим.
процентов для использования на клиентских машинах, где  data=journal – в котором все новые данные сначала пи-
тоже есть необходимость в сохранении данных. Теперь, шутся в журнал и только после этого переносятся на
когда мы точно знаем, что ожидать от описываемых фай- свое постоянное место. В случае аварийного отказа
ловых систем, перейдем к их конкретной реализации. журнал можно повторно перечитать, приведя данные
и метаданные в непротиворечивое состояние. Кстати,
Ext3fs данный режим в случае, когда диск интенсивно загру-
Хотя данная файловая система не была первой поддер- жен операциями IO, оказывается даже быстрее всех
живаемой ядром Linux официально (появилась только с остальных.
версии 2.4.16), все-таки, я думаю, справедливо будет на-
чать именно с нее. Разработана она в недрах компании Выбранный режим, отличный от установленного по
Red Hat (там и следует искать все новинки о ее работе) умолчанию, необходимо указать с помощью опции -o.
доктором Stephen Tweedie. Найти патчи для ядра можно Например:
по адресу ftp://ftp.linux.org.uk/pub/linux/sct/fs/jfs/. Чтобы не
изобретать колесо, в данном случае поступили просто, #mount -o data=journal -t ext3 /dev/hda5 /usr/local
прикрутив к стандартной ext2fs журнал. Фактически только
добавив файл журнала (в зависимости от опций монти- или в /etc/fstab:
рования можно и не видеть, находится в ./.journal) и заме-
нив драйвер ядра, отвечающий за файловую систему, по- /dev/hda5 /usr/local ext3 data=writeback 1 0
этому она, естественно, наследует все достоинства и не-
достатки, присущие ext2fs. Но что это дало? Самое глав- или если режим по умолчанию, то просто:
ное – это то, что утилиты ext2fs, которые шлифовались в
течение нескольких лет, работают в ней как ни в чем не /dev/hda5 /usr/local ext3 defaults 1 0

№11(12), ноябрь 2003 21


администрирование
Если же теперь хочется отказаться от него, то, испра- мое использование файловой системы вместо форми-
вив ext3 на ext2, можно забыть о журнале: рования уровней специального назначения типа баз дан-
ных и т. п. Правда, надо отметить, что они не первые,
/dev/hda5 /usr/local ext2 defaults 1 0 еще при создании BeFS первоначально это было сдела-
но, и с большим успехом, работа filesystem как базы дан-
Для того чтобы к обычной ext2fs добавить журнал, до- ных, но в конечном счете вернулись назад к атрибутам и
статочно выполнить команду: индексированному доступу. Некоторое движение в этом
направлении сделано и в MacOS. При этом для добав-
# /sbin/tune2fs -j /dev/hdà5 ления новых возможностей используется plugins. А во-
обще на сайте проекта наилучшая документация из всех
причем можно даже файловую систему не размонтиро- рассматриваемых. Но предупреждаю, ее там много. Ба-
вать перед этим, так как гарантируется сохранность дан- зируется файловая система на оптимизированных b* сба-
ных (но предварительная архивация данных никому еще лансированных деревьях (одно на файловую систему),
не вредила). Для того чтобы изначально создать ext3 на использование которых, кроме увеличения поизводитель-
пустом, только что созданном разделе диска, достаточно ности, снимает ограничение на количество каталогов,
выполнить команду: хотите – 100 000, без проблем. Но текущая на данный мо-
мент версия 3.6 поддерживает журналирование только
# /sbin/mke2fs -j /dev/hdb5 метаданных, хотя при необходимости полного журнали-
рования можно использовать патч от Chris Mason и до-
Начиная с версии 0.9.5 ext3fs, можно использовать дру- полнительно в новой версии ReiserFS v.4 release, которая
гой диск для хранения файла журнала. Подробности мож- будет доступна вместе с ядром 2.6. Также будет задей-
но узнать по адресу http://www.zipworld.com.au/~akpm/linux/ ствован подобный режим.
ext3/ext3-usage.html. Главное преимущество данной файловой системы
Вот и все о данной файловой системе. Что и говорить, проявляется в работе с маленькими файлами. Как я уже
это предсказуемая и главное – удобная файловая систе- говорил, информация на физическом носителе хранит-
ма. До недавнего времени добрая половина разделов ся не как попало, а отдельными блоками, размер кото-
жесткого диска на моем домашнем компьютере была от- рых зависит и от размера раздела (это связано с макси-
форматирована именно под ext3, но эксперименты с ла- мально возможной адресацией) в том числе (устанав-
тентностью ядра при обработке музыки убедили, что пора ливается при форматировании), в большинстве случаев
с ней красиво расставаться (хотя доводилось слышать и используется 4 Кб. Так вот, еxt2 (и ext3, и FAT тоже) мо-
полностью противоположное мнение). Плюс у нее есть гут адресовать только целое количество блоков. Ну и
еще недостаток, доставшийся по наследству, который что? Имеем файл 10 Кб, размер блока 4 Кб. Получает-
практически полностью решен в другой файловой систе- ся, что файл займет 2 целых блока и один только напо-
ме. Но интересно, что в дистрибутивах RedHat програм- ловину. 4 + 4 + 2 (и 2 осталось незанятыми, это и назы-
ма установки, несмотря на наличие стольких альтерна- вается внутренней фрагментацией). Для единичного
тив, позволяет создать только ext2 и ext3, хотя ядро под- файла это нестрашно, но если их несколько тысяч? Кста-
держивает JFS и RaiserFS. Что это – упорное продвиже- ти, Fast File System (FFS), применяемая в BSD, умеет
ние своей файловой системы или нежелание идти в ногу адресовать субблоки, а во всеми любимой FAT придется
с прогрессом? мириться с неизбежной потерей места. Разработчики
ReiserFS не стали решать множество противоречивых
ReiserFS задач, а остановились на одной и довели ее до конца.
Это первая «сторонняя» файловая система, появивша- ReiserFS может запросто упаковывать несколько малень-
яся в официальном ядре, начиная с версии 2.4.4, но в ких файлов в один дисковый блок (tail packing), а совсем
первое время ее работа вызывала одни только нарека- маленькие вообще просто запихать в inode (внутрь
ния, и поэтому использовали ее только любители ост- b*tree). По необходимости для файла может ассигновать-
рых ощущений. Данный проект начинался в 90-х годах, ся точный размер. Такой режим работы предусмотрен
первый прототип носил название TreeFS. Разработана по умолчанию, но для повышения быстродействия есть
Хансом Райзером (Hans Reiser) и его компанией Namesys возможность ее отключить. Хотя показатели ReiserFS
(http://www.namesys.com/), причем задачи они перед со- при работе с большими файлами также высоки, имен-
бой поставили очень, я бы сказал, революционные. Раз- но работа с маленькими файлами (меньше Кб) и обслу-
работчики системы мечтают создать не только файловую живание большого их количества выделяет данную ФС.
систему, но вообще механизм иерархического именова- По работе с ними она превосходит по быстродействию
ния объектов. Они считают, что лучшая файловая систе- все представленные файловые системы (видел цифры
ма та, которая формирует единую общедоступную среду, в 8-15 раз) и именно за счет того, что данные и мета-
названную namespace. Для достижения этого файловая данные хранятся рядом, и головке диска не придется
система должна выполнять часть работы, традиционно вы- рыскать по всему диску. Плюс, как видите, достигает-
полнявшуюся приложениями, что уменьшит количество ся значительная экономия дискового пространства.
несовместимых API узкоспециального назначения. При та- Различные источники называют ReiserFS самой устой-
ком подходе пользователи часто могут продолжать пря- чивой из всех рассматриваемых ФС, ее, я думаю, мож-

22
администрирование
но рекомендовать для корневого раздела, который к вой системы таким образом, что весь процесс восстанов-
тому же состоит из маленьких файлов. Такая себе ра- ления сводится к копированию этих данных из журнала в
бочая лошадка. Но для работы с данной файловой си- файловую систему. Размер журнала задается при созда-
стемой, кроме поддержки ее самим ядром, необходи- нии системы, он должен быть не меньше 32 Мб; а боль-
мы также свои собственные утилиты для работы и об- ше, наверное, и не надо – такое количество незакрытых
служивания разделов, хотя они уже входят в стандарт- транзакций тяжело получить. Тесты на производитель-
ную поставку всех современных дистрибутивов, а если ность показывают бесспорное преимущество XFS, осо-
нет, то возьмите по адресу 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 и имеются не- пытается кэшировать как можно больше данных и «осно-
обходимые утилиты, то, набрав: ванием» для сброса на диск является заполнение памя-
ти, а не интервал времени, как это принято в других фай-
# /sbin/mkreiserfs /dev/hda2 ловых системах (кроме, наверное, ReiserFS v4). Любое
дисковое устройство при создании файловой системы
можно создать на ней соответствующую файловую сис- XFS разбивается на несколько равных по размеру линей-
тему. Для автоматического монтирования ее при загруз- ных областей (0.5-4 Гб), в терминологии XFS они имену-
ке достаточно прописать в файле /etc/fstab: ются «allocation group». Уникальность allocation group в
том, что каждая группа управляет своими собственными
/dev/hda4 /home reiserfs defaults 0 0 inodes и свободным местом, что превращает группы в
своего рода автономные файловые системы, сосуществу-
или ющие в рамках общей XFS. Такая организация позволяет
эффективно организовать параллельную обработку опе-
#/sbin/mount -t /reiserfs dev/hda4 /home раций ввода/вывода, которая особенно проявляется на
многопроцессорных системах. В каждой такой группе ис-
при монтировании вручную. Если для увеличения произ- пользуется три В+ дерева, два из которых отвечают за
водительности необходимо отключить упаковку хвостов, свободные inodes (allocation). В этой системе реализова-
то добавьте опцию notail: на очень хорошая возможность, позволяющая избежать
фрагментации файлов, называемая delayed allocation. При
/dev/hda4 /home reiserfs notail 0 0 этом файловая система, получая данные для записи, по-
началу лишь резервирует под них необходимое свобод-
А опция -genericread может увеличить (а может и нет) ное место, откладывая саму запись до момента факти-
производительность при операциях поиска файлов, т.е. ческого сброса данных. Когда же такой момент наступа-
когда головка мало считывает, а много перемещается по ет, то XFS решает, куда необходимо их поместить. Если
диску. И, кстати, проект Reiser4, в котором не последнее осуществляется дозапись, то подбираются соседние сек-
место уделено security, поддерживается DARPA (Defense тора. Но наибольший эффект в такой задержке получа-
Advanced Research Projects Agency). ется еще за счет того, что, если создается временный
файл с малым временем жизни, то он вообще при таком
XFS случае на диск не пишется (соответственно не приходит-
Основа следующей файловой системы XFS была создана в ся занимать/освобождать метаданные). Для борьбы с
начале 90-х (1992-1993) фирмой Silicon Grapgics (сейчас SGI) внешней фрагментацией (против которой борятся про-
для мультимедийных компьютеров с ОС Irix, заменив уже не граммы типа Norton Speed Disk) имеется утилита xfs_fsr.
удовлетворявшую требованиям времени EFS, но немного Текущим ядром серии 2.4.* данная файловая система не
очищенная от некоторого кода GPL версия 1.0 стала дос- поддерживается (но уже имеется в тестовых ядрах 2.6),
тупна только 1 мая 2001 года. Найти всю необходимую ин- хотя в некоторых дистрибутивах (Gentoo, Lunar Linux) она
формацию можно по адресу: http://oss.sgi.com/projects/xfs. уже предлагается пользователю, поэтому необходимо схо-
Интересно, что «любимица» всех линуксоидов, компания дить на сайт разработчика за патчем (ftp://oss.sgi.com/
SCO, и здесь засветилась, назвав выход XFS под лицензи- projects/xfs/download/) и необходимыми утилитами (как
ей GPL «примером ярких работ нарушения авторских прав». миниум xfsprogs) для работы с ней. Сейчас на сайте дос-
Эта файловая система с самого начала была ори- тупен релиз 1.3. Теперь, пересобрав ядро и установив не-
ентирована на очень большие файлы (9 000 петабайт – обходимые утилиты, можно создать файловую систему:
9 миллионов терабайт – 1018 байт) и файловые системы
(18 000 петабайт ), это достигается тем, что она, в отли- #/sbin/mkfs.xfs /dev/hdb2 èëè mkfs -t xfs /dev/hdb2
чие от предыдущих, является полностью 64-битной, что
позволяет адресовать большие массивы данных. Особен- Для увеличения производительности в некоторых слу-
ностью этой файловой системы является устройство жур- чаях может помочь опция -l size=32m, фиксирующая жур-
нала – в него пишется часть метаданных самой файло- нал на 32 Мб, и с помощью -d agcount=x лучше устано-

№11(12), ноябрь 2003 23


администрирование
вить минимально возможное количество allocation groups нения маленьких файлов в пределах inode. Если каталог
(т.е. взяв максимально возможные 4 Гб на группу), на- имеет до 8 файлов, то информация о них содержится внут-
пример, при разделе 18 Гб устанавливаем: ри inode, при увеличении же их количества используются
уже знакомые B+ деревья. Для уcтановки необходимы ути-
#/sbin/mkfs.xfs -d agcount=5 -l size=32m -f /dev/hdb2 лита jfsutils, патч к ядру jfs-2.4.х-patch и код файловой си-
стемы jfs-2.4-1.0.20.tar.gz, хотя вероятно, что поддержка
Необязательная опция -f позволяет создать XFS поверх данной файловой системы в ядре уже имеется. После
любой существующей ФС, но при создании раздела по- установки и компиляции всех программ для создания раз-
верх ReiserFS (и наоборот) необходимо заполнить нулями дела достаточно выполнить команду:
начальный раздел, содержащий метаданные перед пере-
форматированием, т.к. команда mount может неправильно # mkfs.jfs /dev/hdb3
распознать, какая из файловых систем установлена.
и смонтировать ее:
# dd if=/dev/zero of=/dev/hdb2
# mount -t jfs /dev/hdb3 /jfs
И прервать секунд через 10-20 комбинацией Ctr+C. Смон-
тировать вновь созданный раздел теперь можно командой: Для возможности работы с внешним журналом необ-
ходимо создать два неиспользуемых раздела, например:
# mount -t xfs =/dev/hdb2 /home
# mkfs.jfs -j /dev/hdb1 /dev/hda6
# mount -t jfs /dev/hda6 /jfs
или в файле /etc/fstab:
или в /etc/fstab:
/dev/hdb2 /home xfs defaults 0 0
/dev/hda6 /jfs jfs defaults 1 2
Для повышения производительности можно задать не-
которые опции noatime, nodiratime, osyncisdsync, вместе Напоследок хочу отметить, что все описываемые фай-
помогающие добиться асинхронного вывода информации, ловые системы на данный момент поддерживают уста-
и практически имитировать поведение ext2, а также logbufs, новку на Soft-RAID и LVM, при наложении соответствую-
устанавливающий размер буфера, имеющий значение по щих патчей возможно применение ACL.
умолчанию, равное 2 (но, например, 8 при 128 Мб опера- Как видите, ОС Linux предоставляет пользователю воз-
тивной памяти устанавливать не стоит). можность выбрать даже файловую систему, оптимизиро-
ванную под конкретные задачи. И самое главное, не обя-
/dev/hdb2 /home xfs noatime, nodiratime, ↵ зательно, чтобы была установлена только одна из этих
osyncisdsync, logbufs=4 0 0
файловых систем. Но вот однозначно сказать, что такая
Еще в документе Linux XFS FAQ, доступном на сайте файловая система намного лучше, я не могу. Как вы по-
разработчика, сказано, что на данный момент загрузка с нимаете, все зависит от конкретной задачи, ведь прило-
раздела XFS поддерживается полностью загрузчиком жения, которые используются на сервере, могут отличать-
GRUB версий 0.92 и выше, LILO же позволяет загружать- ся. Но для раздела /boot лучшим решением будет ext2,
ся только при установке в MBR (Master Boot Record), при для корневого раздела, состоящего из мелких файлов –
установке в корневой раздел есть вероятность, что заг- ReiserFS. Для сравнения приведу результат теста Linux:
рузиться не получится. В CVS доступны утилиты xfsdump Benchmarking Filesystems In 2.6.0-test2, найденный мной
и xfsrestore, позволяющие сохранить и при необходимос- на странице http://kerneltrap.org/node/view/715. Там же мож-
ти восстановить образ раздела диска. Остальную инфор- но найти и мнения различных людей по поводу получен-
мацию посмотрите в каталоге /usr/src/linux/Documentation/ ных результатов.
filesystems xfs.txt. Как установить XFS в корневой раз- При записи и копировании каталога (mozilla build
дел, можно посмотреть в документе Linux+XFS-HOWTO tree) размером 295 Мб файловые системы показали
(http://www.linuxdoc.org/HOWTO/Linux+XFS-HOWTO/). такой результат, который, я думаю, в комментариях не
нуждается.
JFS (Journaled File System)
Создана фирмой IBM для своей OS/2 Warp, а затем вы-
пущена по лицензии GPL и портирована под Linux. Всю
необходимую информацию можно получить по адресу
http://oss.software.ibm.com/jfs. По своим характеристикам
и архитектуре очень схожа с предыдущей, поэтому под-
робно останавливаться на них не буду. Подобно преды- Литература:
дущей в этой файловой системе раздел логически под- Серия статей Advanced filesystem implementor’s guide
разделяется на «агрегаты», включающие, кроме данных, Daniel Robbins: http://www-106.ibm.com/developerworks/
и отдельный журнал, и каждый из таких сегментов можно linux/library/l-fs1/, перевод которых можно найти на сай-
монтировать отдельно. Также имеется возможность хра- те http://www.softerra.ru/.

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

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

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

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

26
администрирование
Основные компоненты Суперблок
файловой системы ext2 Суперблок – основной элемент файловой системы ext2.
Как и в любой файловой системе UNIX, в составе файловой Он содержит следующую информацию о файловой сис-
системы ext2 можно выделить следующие составляющие: теме (список неполный):
 блоки и группы блоков;  общее число блоков и inode в файловой системе;
 информационный узел (information node);  число свободных блоков и inode в файловой системе;
 суперблок (superblock).  размер блока файловой системы;
 количество блоков и inode в группе;
Блоки и группы блоков  размер inode;
Все пространство раздела диска разбивается на блоки  идентификатор файловой системы;
фиксированного размера, кратные размеру сектора –  номер первого блока данных.
1024, 2048 и 4096 байт. Размер блока указывается при
создании файловой системы на разделе жесткого диска. Другими словами, это номер блока, содержащего су-
Меньший размер блока позволяет экономить место на перблок. Этот номер всегда равен 0, если размер блока
жестком диске, но также ограничивает максимальный файловой системы больше 1024 байт, и 1, если размер
размер файловой системы. Все блоки имеют порядковые блока равен 1024 байт.
номера. С целью уменьшения фрагментации и количества От целостности суперблока напрямую зависит рабо-
перемещений головок жесткого диска при чтении боль- тоспособность файловой системы. Операционная систе-
ших массивов данных блоки объединяются в группы. ма создает несколько резервных копий суперблока для
возможности его восстановления в случае повреждения.
Информационный узел Главная копия находится по смещению 1024 байт от на-
Базовым понятием файловой системы является инфор- чала раздела, на котором создана файловая система (пер-
мационный узел, information node, или inode. Это специ- вые 1024 байта зарезервированы для загрузчика опера-
альная структура, которая содержит информацию об ат- ционной системы).
рибутах и физическом расположении файла. Атрибутами Ранние версии файловой системы ext2 создавали ко-
файла являются его тип (обычный файл, каталог и т. д.), пии суперблока в начале каждой группы блоков. Это при-
права доступа к нему, идентификатор владельца, размер, водило к большим потерям дискового пространства, по-
время создания. Информация о физическом расположе- этому позже количество резервных копий суперблока
нии представляет собой последовательность абсолютных было уменьшено, и для их размещения были выделены
номеров блоков, содержащих данные файла. группы блоков 0, 1, 3, 5 и 7.

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

№11(12), ноябрь 2003 27


администрирование
Формат группы блоков ми, либо файлами. Абсолютное путевое имя файла со-
Обобщенная структурная схема файловой системы ext2 стоит из имен всех каталогов, ведущих к указанному фай-
представлена на рис. 1. лу, начиная с корневого каталога. Так, путевое имя /home/
Практически все группы блоков имеют одинаковый test.file означает, что файл test.file расположен в каталоге
формат. В каждой группе, помимо информационных бло- home, который, в свою очередь, находится в корневом
ков, хранится информация о занятости блоков и inode каталоге «/».
группы в виде битовой карты. В состав группы блоков 0 Каталог, так же как и файл, описывается при помощи
входят также суперблок и таблица дескрипторов групп, inode. Содержимое каталога представляет собой массив
которую мы рассмотрим ниже. записей, каждая из которых содержит информацию о
Битовая карта занятости блоков обычно расположена файле, который находится «внутри» текущего каталога.
в первом блоке группы. Если в группе присутствует ре- Запись каталога имеет следующий формат:
зервная копия суперблока, битовая карта располагается  порядковый номер inode файла;
во втором блоке группы. Размер битовой карты – один  длина записи в байтах;
блок. Каждый бит этой карты обозначает состояние бло-  имя файла;
ка. Если бит установлен (1), то блок занят, если сброшен  длина имени файла.
(0) – блок свободен. Первому блоку группы соответству-
ет нулевой бит карты, второму блоку – первый бит и т. д. Поиск номера inode файла всегда начинается с корне-
Inode, находящиеся в пределах одной группы, собра- вого каталога. Например, чтобы получить порядковый
ны в таблицу. В битовой карте занятости inode группы номер inode файла, находящегося в корневом каталоге,
каждый бит характеризует состояние элемента в табли- операционная система должна получить содержимое кор-
це inode группы. невого каталога, найти в нем запись с именем этого фай-
Каждая группа блоков описывается при помощи деск- ла и извлечь из этой записи порядковый номер inode фай-
риптора группы блоков. Дескриптор группы – это струк- ла.
тура, которая содержит информацию об адресах битовой Несколько первых номеров inode зарезервированы
карты занятости блоков, битовой карты занятости inode и файловой системой, их перечень содержится в заголо-
таблицы inode соответствующей группы. Все дескрипто- вочном файле <linux/ext2_fs.h>:
ры групп собраны в таблицу дескрипторов групп, которая
хранится в группе блоков 0. Так же, как и для суперблока, /*
* 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 */
Каждый inode, как и блок, имеет порядковый номер, уни- #define EXT2_UNDEL_DIR_INO 6 /* Undelete directory inode */
кальный в пределах файловой системы, и содержит ин-
формацию только об одном файле. Таким образом, для Для записи корневого каталога зарезервирован inode
получения доступа к содержимому файла необходимо под номером 2 (root inode). Этот inode находится в группе
знать порядковый номер соответствующего ему inode. блоков 0 и занимает вторую позицию в таблице inode этой
Как было сказано выше, информация о физическом группы. Номер первого незарезервированного inode хра-
расположении файла содержится в inode. Эта информа- нится в суперблоке.
ция представляет собой последовательность 32-битных Определив порядковый номер inode файла, ядро вы-
номеров блоков, содержащих данные файла (рис. 1). Пер- числяет номер группы, в которой этот inode расположен,
вые 12 номеров – это прямые ссылки на информацион- и его позицию в таблице inode группы. Считав из этой
ные блоки (direct blocks number). 13-й номер является кос- позиции inode, операционная система получает полную
венной ссылкой (indirect blocks number). В нем находится информацию о файле, включая адреса блоков, в которых
адрес блока, в котором хранятся адреса информацион- хранится содержимое файла.
ных блоков. 14-й номер – двойная косвенная ссылка Номер группы блоков, в которой расположен inode,
(double blocks number), 15-й номер – тройная косвенная вычисляется по формуле:
ссылка (triple blocks number).
Имя файла в состав inode не входит, установление group = (inode_num - 1) / inodes_per_group
соответствия между именами файлов и порядковыми но-
мерами inode выполняется через каталоги. где:
 group – искомый номер группы блоков;
Каталоги  inode_num – порядковый номер inode, определяюще-
Файлы в UNIX- и POSIX-системах хранятся в древовид- го файл;
ной иерархической файловой системе. Корень файло-  inodes_per_group – число inode в группе (эта инфор-
вой системы – это корневой каталог, обозначенный сим- мация находится в суперблоке).
волом «/». Каждый промежуточный узел в дереве фай-
ловой системы – это каталог. Конечные вершины дере- Позиция inode в таблице inode группы определяется
ва файловой системы являются либо пустыми каталога- по формуле:

28
администрирование
index = (inode_num - 1) % inodes_per_groupe 5. Из группы блоков A считывается блок, содержащий
записи корневого каталога.
где index – позиция inode в таблице. 6. Выполняется поиск записи с именем «test.file». Если
Рассмотрим пример получения содержимого файла такая запись найдена, из нее извлекается порядковый
test.file, находящегося в корневом каталоге. Для чтения номер inode файла «test.file».
файла /test.file необходимо:
 в массиве записей корневого каталога найти запись Определив номер inode, можно получить доступ к ин-
об этом файле; формационным блокам файла (этапы 7-11):
 извлечь порядковый номер inode файла, вычислить но- 7. Вычисляется номер группы, в которой находится данный
мер группы, в которой этот inode расположен; inode, и его позицию в таблице inode группы (предполо-
 из дескриптора данной группы извлечь адрес табли- жим, что номер группы равен B, а позиция в таблице – X).
цы inode группы; 8. Из таблицы дескрипторов групп извлекаем дескрип-
 вычислить позицию inode в этой таблице; тор группы блоков B, и из него считывается адрес таб-
 считать inode файла; лицы inode этой группы блоков.
 из inode извлечь адреса информационных блоков и 9. Из группы блоков B считывается таблица inode.
осуществить чтение информации, находящейся в этих 10. Из таблицы inode группы блоков B считывается inode,
блоках. находящийся в позиции X.
11. Из считанного inode извлекаются адреса блока с со-
На рис. 2 подробно показаны этапы чтения файла /test.file. держимым файла /test.file и выполняется чтение ин-
Этапы 1-6 – чтение корневого каталога: формации из блока с указанным адресом.
1. Из группы блоков 0 считывается таблица дескрипто-
ров групп.
2. Из таблицы дескрипторов групп извлекается дескрип- Программная реализация
тор группы блоков 0 и из него считывается адрес таб- алгоритма чтения файла
лицы inode группы 0. Исходные данные: имеется раздел жесткого диска, на ко-
3. Из группы блоков 0 считывается таблица inode. тором создана файловая система ext2. Этому разделу
4. Порядковый номер inode корневого каталога фик- соответствует файл устройства /dev/hda3. В корневом
сирован и равен 2, поэтому из таблицы inode груп- каталоге раздела создан подкаталог home, а в нем нахо-
пы 0 считывается второй элемент, который содер- дится файл test.file следующего содержания:
жит адрес блока с содержимым корневого катало-
га. Предположим, что этот блок расположен в груп-  ÷àùàõ þãà æèë áû öèòðóñ?
Äà, íî ôàëüøèâûé ýêçåìïëÿð!
пе блоков A. 1234567890-=

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

№11(12), ноябрь 2003 29


администрирование
Не подумайте плохого, это не бред, а тестовое упраж-  __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 – время последнего доступа к файлу;
Наша задача – используя файл устройства /dev/hda3,  __u32 i_ctime – время создания файла;
осуществить чтение файла /home/test.file методом прямого  __u32 i_mtime – время последней модификации;
доступа к его информационным блокам.  __u32 i_blocks – количество блоков, занимаемых фай-
Рассмотрим программную реализацию модуля, выпол- лом;
няющего эту операцию.  __u32 i_block[EXT2_N_BLOCKS] – адреса информаци-
Заголовочные файлы: онных блоков (включая все косвенные ссылки).

#include <stdio.h> Значение EXT2_N_BLOCKS определено в файле


#include <sys/types.h>
#include <fcntl.h> <linux/ext2_fs.h>:
#include <unistd.h>
#include <errno.h>
#include <linux/ext2_fs.h> /*
* Constants relative to the data blocks
*/
В заголовочном файле <linux/ext2_fs.h> определены #define EXT2_NDIR_BLOCKS 12
#define EXT2_IND_BLOCK EXT2_NDIR_BLOCKS
структурные типы, описывающие основные компоненты #define EXT2_DIND_BLOCK (EXT2_IND_BLOCK + 1)
файловой системы ext2 – суперблок, дескриптор группы #define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK + 1)
#define EXT2_N_BLOCKS (EXT2_TIND_BLOCK + 1)
блоков, информационный узел, запись каталога.
Рассмотрим кратко поля, которые входят в каждую из 4. Структура записи каталога struct ext2_dir_entry_2:
этих структур:
1. Структура суперблока struct ext2_super_block: #define EXT2_NAME_LEN 255
 __u32 s_inodes_count – общее число inode в файло-
вой системе;  __u32 inode – номер inode файла;
 __u32 s_blocks_count – общее число блоков в файло-  __u16 rec_len – длина записи каталога;
вой системе;  __u8 name_len – длина имени файла;
 __u32 s_free_blocks_count – количество свободных бло-  char name[EXT2_NAME_LEN] – имя файла.
ков;
 __u32 s_free_inodes_count – количество свободных inode; Определим имя раздела, на котором создана файло-
 __u32 s_first_data_block – номер первого блока дан- вая система, глобальные структуры и переменные.
ных (номер блока, в котором находится суперблок);
 __u32 s_log_block_size – это значение используется для #define PART_NAME "/dev/hda3"
вычисления размера блока. Размер блока определя- struct ext2_super_block sb;
ется по формуле: block size = 1024 << s_log_block_size; /* áóôåð äëÿ õðàíåíèÿ òàáëèöû äåñêðèïòîðîâ ãðóïï */
unsigned char buff_grp[4096];
 __u32 s_blocks_per_group – количество блоков в группе; unsigned char buff[4096]; /* èíôîðìàöèîííûé áóôåð */
 __u32 s_inodes_per_group – количество inode в группе; int indev; /* äåñêðèïòîð ôàéëà óñòðîéñòâà */
int BLKSIZE; /* ðàçìåð áëîêà ôàéëîâîé ñèñòåìû */
 __u16 s_magic – идентификатор файловой системы
ext2 (сигнатура 0xEF53); Определим несколько функций, которые нам понадо-
 __u16 s_inode_size – размер информационного узла бятся для работы:
(inode); Функция чтения суперблока:
 __u32 s_first_ino – номер первого незарезервирован-
ного inode. void read_sb()
{
memset(&sb,0,1024);
2. Структура дескриптора группы блоков struct
ext2_group_desc: Смещаемся на 1024 байта от начала раздела и считы-
 __u32 bg_block_bitmap – битовая карта занятости бло- ваем суперблок в структуру struct ext2_super_block sb:
ков группы;
 __u32 bg_inode_bitmap – битовая карта занятости inode if(lseek(indev,1024,0) < 0) {
perror("lseek");
группы; exit(-1);

30
администрирование
} Из таблицы дескрипторов групп извлекаем дескрип-
if(read(indev,(char *)&sb,sizeof(sb)) < 0) {
perror("read"); тор группы group и копируем его в структуру struct
exit(-1); ext2_group_desc gd:
}

Проверяем идентификатор файловой системы: memset((void *)&gd, 0, sizeof(gd));


memcpy((void *)&gd, buff_grp + (group * (sizeof(gd))), ↵
sizeof(gd));
if(sb.s_magic != EXT2_SUPER_MAGIC) {
printf("Íåèçâåñòíûé òèï ôàéëîâîé ñèñòåìû!\n");
exit(-1); Вычисляем позицию inode c порядковым номером
} inode_num в таблице inode группы group и считываем этот
inode в структуру struct ext2_inode:
Значение EXT2_SUPER_MAGIC определено в заголо-
вочном файле <linux/ext2_fs.h>. 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;
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); void read_iblock(struct ext2_inode *in, int blk_num)
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); __u64 pos;
printf("First data block\t-\t%u\n\n",sb.s_first_data_block);
return; Входные параметры функции – структура inode и но-
} мер блока (имеется в виду номер из последовательности
адресных блоков, расположенных в inode).
Функция чтения таблицы дескрипторов групп: Вычисляем смещение к информационному блоку на
разделе и считываем этот блок в глобальный буфер buff:
void read_gdt()
{ pos = ((__u64)in->i_block[blk_num]) * BLKSIZE;
pread64(indev, buff, BLKSIZE, pos);
Вычисляем размер блока файловой системы:
return;
}
BLKSIZE = 1024 << sb.s_log_block_size
Функция получения содержимого корневого каталога:
Таблица дескрипторов групп находится в блоке, кото-
рый расположен сразу же за первым блоком данных (за void get_root_dentry()
{
суперблоком). struct ext2_inode in;
Считываем таблицу:
Порядковый номер inode корневого каталога известен,
if(lseek(indev, (sb.s_first_data_block + 1) * BLKSIZE, 0) < 0) { поэтому получаем содержимое inode корневого каталога
perror("lseek");
exit(-1); и считываем в буфер buff его содержимое:
}
if(read(indev,buff_grp,BLKSIZE) < 0) {
perror("read"); get_inode(EXT2_ROOT_INO, &in);
read_iblock(&in, 0);
exit(-1);
}
В буфере buff будет находиться содержимое корнево-
return; го каталога.
}

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


}

void get_inode(int inode_num, struct ext2_inode *in) Функция получения номера inode по имени файла:
{

Входные параметры функции – порядковый номер int get_i_num(char *name)


{
inode и структура struct ext2_inode.
Входные параметры функции – имя файла. Возвра-
struct ext2_group_desc gd; щаемое значение – порядковый номер inode файла.
__u64 group, index, pos;

Вычисляем номер группы блоков, в которой находит- int i = 0, rec_len = 0;


struct ext2_dir_entry_2 dent;
ся inode с порядковым номером inode_num:
В буфере buff находится массив записей каталога. Для
group = (inode_num - 1) / sb.s_inodes_per_group; определения порядкового номера inode файла необходи-

№11(12), ноябрь 2003 31


администрирование
мо найти в этом массиве запись с именем этого файла: }
}
buff1[n] = '\0';
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; файла определяем порядковый номер inode, считываем
}
этот inode в память и затем получаем содержимое нуле-
return dent.inode; вого блока:
}

А теперь распишем главную функцию: i_num = get_i_num(buff1);


get_inode(i_num, &in);
read_iblock(&in, 0);
int main()
{
Отобразим информацию о файле (имя, порядковый
Переменные и структуры: номер inode, размер файла и его тип):

struct ext2_inode in; printf("Inode number - %u\n", i_num);


// àáñîëþòíîå ïóòåâîå èìÿ ôàéëà printf("File name - %s\n", buff1);
unsigned char *full_path = "/home/test.file"; printf("File size - %u\n",in.i_size);
unsigned char buff1[EXT2_NAME_LEN];
static int i = 1; Тип файла определяют старшие четыре бита поля
int n, i_num, outf, type; i_mode структуры struct ext2_inode:

Первым символом в абсолютном путевом имени фай- type = ((in.i_mode & 0xF000) >> 12);
printf("Type - %d ",type);
ла должен быть прямой слэш (/). Проверяем это:
switch(type) {
case(0x04) :
if(full_path[0] != '/') { printf("(êàòàëîã)\n\n");
perror("slash"); break;
exit(-1); case(0x08) :
} printf("(îáû÷íûé ôàéë)\n\n");
break;
case(0x06) :
Открываем файл устройства, считываем суперблок и printf("(ôàéë áëî÷íîãî óñòðîéñòâà)\n\n");
таблицу дескрипторов групп: break;
case(0x02) :
printf("(ôàéë ñèìâîëüíîãî óñòðîéñòâà)\n\n");
indev = open(PART_NAME,O_RDONLY); break;
if(indev < 0) { default:
perror("open"); printf("(unknown type)\n");
exit(-1); break;
} }
read_sb();
read_gdt(); Проверяем тип файла. Если это обычный файл – пре-
рываем цикл:
Получаем содержимое корневого каталога:
if(type & 0x08) {
get_root_dentry();
В буфере buff будет находиться информация, считан-
Сейчас в буфере buff находятся все записи корневого ная из информационных блоков файла /home/test.file. За-
каталога (если хотите, можете сохранить их в отдельном пишем эту информацию в файл:
файле). Теперь, имея записи корневого каталога, мы мо-
жем добраться до содержимого файла test.file, используя outf = open("out",O_CREAT|O_RDWR,0600);
write(outf, buff, sizeof(buff));
вышеприведенный алгоритм чтения файла. С этой целью close(outf);
организуем цикл. В теле цикла проведем разбор абсолют- break;
}
ного путевого имени файла, выделяя его элементы – под- }
каталоги (он у нас один, home) и имя искомого файла
(test.file). Для каждого элемента определим порядковый Выходим:
номер inode, считаем этот inode и затем получим содер-
жимое нулевого блока (из последовательности адресных close(indev);
return 0;
блоков, находящихся в inode): }

while(1) { На этом рассмотрение логической структуры файло-


memset(buff1,0,sizeof(buff1)); вой системы ext2 завершим.
for(n = 0 ; n < EXT2_NAME_LEN; n++, i++) {
buff1[n] = full_path[i]; Ссылки:
if((buff1[n] == '/') || (buff1[n] == '\0')) { 1. http://www.nongnu.org/ext2-doc
i++;
break; 2. http://e2fsprogs.sourceforge.net/ext2intro.html

32
bugtraq
login:crypt_passwd:
Sql-инъекция и неавторизованный доступ
в Spaiz-Nuke и PHP-nuke где login=логин, crypt_passwd=зашифрованный пароль.
Программа: Spaiz-Nuke версии <= 1.2beta, PHP-nuke все Получаем хеш. Теперь можно получить доступ к пане-
версии. ли администрирования, используя следующий URL:
Опасность: Высокая. www.site.com/admin.php?admin=ваш_хэш
Описание: Несколько уязвимостей обнаружено в Spaiz-Nuke Вручную использование данной уязвимости немного не-
и PHP-nuke. Удаленный пользователь может выполнить про- удобно, поэтому был написан эксплоит, позволяющий доба-
извольный Sql-код на уязвимой системе. Удаленный пользо- вить нового администратора со всеми правами. Посмотреть
ватель может получить доступ к системе без пароля. эксплоит можно здесь: http://rst.void.ru/download/r57nuke.txt
 Внедрение Sql-кода в модуле администрирования. URL производителя: http://www.php-nuke.org
Уязвимость обнаружена в сценарии auth.php в функции Решение: Способов устранения обнаруженной уязвимо-
проверки логина и пароля. Атакующий может получить за- сти не существует в настоящее время.
шифрованный пароль администратора. Отсутствие про-
верки ввода обнаружено в переменной $aid, содержащей Удаленное переполнение буфера
логин для авторизации. Используя кавычку, можно пере- в Washington University FTP daemon (Wu-FTPd)
направить вывод в произвольный файл на сервере. Программа: Wu-FTPd version 2.6.2 (с поддержкой SKEY).
Эксплоит: www.site.com/admin.php?op=login&pwd=123&aid= Опасность: Высокая.
Admin’%20INTO%20OUTFILE%20'/path_to_file/pwd.txt Описание: Переполнение буфера обнаружено в Washington
Проверялось только на Spaiz-Nuke. После ввода данной University FTP daemon (Wu-FTPd). Удаленный атакующий
строки в браузере на уязвимом сервере будет создан файл может выполнить произвольный код на уязвимом сервере
/path_to_file/pwd.txt, содержащий зашифрованный пароль с root-привилегиями.
для логина «Admin». Переполнение стекового буфера обнаружено в коде,
Решение: Включите magic_quotes_gpc в файле php.ini. который обрабатывает SKEY-идентификацию в Wu-FTPd-
 Внедрение Sql-кода в модуле web_links. сервере. Представляя специально обработанные опозна-
Отсутствие проверки ввода обнаружено в переменной $cid вательные мандаты, удаленный атакующий может ава-
в модуле web-links. Атакующий может внедрить произволь- рийно завершить работу демона или выполнить произ-
ный Sql-код. вольный код с root-привилегиями. Переполнение распо-
Эксплоит: показывает пример получения логинов и за- ложено в функции skey_challenge() в src/ftpd.c файле:
шифрованных паролей администраторов движка. Рабо-
тает на БД, поддерживающих команду UNION (mysql > 4). char *skey_challenge(char *name, struct passwd *pwd, int
pwok)
Для других БД необходимо изменять вид sql-запроса. $
{
$
1. Для php-nuke static char buf[128];
Данная строка выдаст все логины: www.site.com/modules.php ...
if (pwd == NULL || skeychallenge(&skey, pwd->pw_name,
?name=Web_Links&l_op=viewlink&cid=2%20UNION%20select% sbuf))
20counter,%20aid,%20pwd%20FROM%20nuke_authors%20— $
sprintf(buf, "Password required for %s.", name);
Данная строка выдаст все зашифрованные пароли: else
www.site.com/modules.php?name=Web_Links&l_op= sprintf(buf, "%s %s for %s.", sbuf,
pwok ? "allowed" : "required", name);
viewlink&cid=2%20UNION%20select%20counter,%20pwd, return (buf);
%20aid%20FROM%20nuke_authors%20— }
в коде не проверяются размеры параметра *name. Уязви-
2. Для Spaiz-Nuke мы системы, поддерживающие SKEY-идентификацию.
Изменить nuke_authors в строке на spnuke_authors. URL производителя: http://www.wuftpd.org/
Решение: Отключите поддержку SKEY или примените
3. Внедрение Sql-кода в модуле download * следующий патч:
Для PHP-nuke: www.site.com/modules.php?name=Downloads
&d_op= viewdownload&cid=2%20UNION%20select%20counter, % diff -u ftpd.c fixed-ftpd.c
--- ftpd.c 2001-11-29 17:56:11.000000000 +0100
%20aid,%20pwd%20FROM%20nuke_authors%20— +++ fixed-ftpd.c 2003-10-20 20:43:58.000000000 +0200
Для Spaiz-Nuke так же, как и в предыдущем случае. @@ -1662,9 +1662,9 @@
/* Display s/key challenge where appropriate. */

4. Доступ без расшифровки пароля 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);
ма md5, однако атакующий может получить доступ, даже else
- sprintf(buf, "%s %s for %s.", sbuf,
не зная расшифрованного пароля. Сначала следует зашиф- + snprintf(buf, 128-1, "%s %s for %s.", sbuf,
ровать полученные логин и зашифрованный md5-пароль с pwok ? "allowed" : "required", name);
return (buf);
помощью алгоритма base64. Сделать это можно, например, }
здесь:http://www.isecurelabs.com/base64.php %
Шифруем этим алгоритмом следующую строку: Cоставил Александр Антипов

№11(12), ноябрь 2003 33


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

МАРК КРИЧМАР
34
администрирование
О настройках самого сервера LDAP написано достаточ- ./squid –z
но много, поэтому останавливаться на этом не буду. Ин-
теграция службы каталогов с разными службами осве- Теперь необходимо внести изменения в конфигураци-
щена тоже достаточно подробно, см., например: http:// онный файл SQUID.
www.linuxrsp.ru/artic/LDAP-HOWTO.html. Следующая строчка заставляет кэширующий сервер
В этой статье я не нашел, как подружить proxy-сервер доверять авторизацию внешней программе.
SQUID с вышеозначенной службой, это и сподвигло меня
на сей труд, не судите строго. auth_param basic program ↵
/usr/local/squid/libexec/squid_ldap_auth –P ↵
В данный момент подобная конфигурация работает на –b dc=mydomain,dc=ru ↵
платформе Dell PowerEdge 2500, операционная система Linux –f (&(uid=%s)(description=active)) –h 127.0.0.1
RHAS release 2.1 (Pensacola). Тестировалось на различных
версиях RH Linux, на других дистрибутивах *NIX-like систем Понятно, что всё пишется на одной строке.
не пробовал, но затруднений возникнуть не должно. Другие auth_param нужно закомментировать.
Итак, начнем. Задача достаточно проста – заставить Теперь пояснения по поводу параметров:
SQUID не только авторизовать пользователей, но и за-  -P – оставлять соединение с LDAP-сервером откры-
быть, наконец, об acl-листах, в которых описаны группы. тым, для большого числа пользователей, для малого
Согласитесь, приятней добавить пользователя в опреде- числа, LDAP смысла поднимать нет;
ленную группу LDAP и все, а пользователь получает по-  -b – с чего начинать поиск, в моем случае – с самого
чтовый ящик и доступ в Интернет через proxy-сервер. верха;
Причем ничего не надо перезапускать.  -f – применить (&(uid=%s)(description=active)) данный
Первым делом скачиваем свежую версию SQUID, я фильтр, для проверки пары логин-пароль. В жизни при-
рассматриваю на примере SQUID-2.5.STABLE2.tar.gz. ходится сталкиваться с тем, что необходимо лишить
Распаковываем: пользователя доступа к Интернету, но не удалять же
из-за этого его запись, тем более, мы не запрещаем
tar zxvf SQUID-2.5.STABLE2.tar.gz ему пользоваться почтой, которая тоже работает че-
рез LDAP. Поэтому я и использовал поле description в
Переходим в созданный каталог с исходниками proxy- LDAP для своих нужд.
сервера и начинаем собирать:
Небольшое пояснение по поводу пары логин-пароль, это,
./configure --enable-delay-pools ↵ как вы уже догадались, два поля в LDAP: uid и userpassword,
--enable-cache-err-language=Russian-1251 ↵
--enable-linux-netfilter ↵ логин и пароль соответственно.
--enable-external-acl-helper=ldap_group ↵ Вернемся к полю description, если в нем находится
--enable-basic-auth-helpers=LDAP
строчка active и логин-пароль совпадают, то все чудесно,
Небольшое пояснение, обо всех параметрах запуска если в этом поле пусто или что-то другое, то извиняйте,
смысла писать нет, достаточно понятно, а вот два после- доступ через SQUID-сервер невозможен. Фактически мы
дних нам как раз и нужны для интеграции с LDAP-сервером. заставляем проверять на истинность не два параметра –
Последний ключ --enable-basic-auth-helpers=LDAP, соб- логин и пароль, а три. Кстати, ничто не мешает таким же
ственно, и указывает кэширующему серверу SQUID, что образом вставить в фильтр еще значения, я не представ-
проверку пары логин-пароль на предмет правильности он ляю зачем, но жизнь многогранна, кто знает, кому что по-
поручает внешней программе. надобится.
Ключ --enable-external-acl-helper=ldap_group необхо- И последний параметр -h 127.0.0.1, где, собственно,
дим, чтобы группы в LDAP соотносились с группами в по- запущен LDAP-сервер, в данном случае на одной маши-
нимании SQUID. не с кэширующим сервером.
Далее, следуя INSTALL: Следующая строчка в файле squid.conf настраивает
кэширующий сервер на поддержку внешних групп, так
make all называемых acl-листов.
make install

Копируем 2 файла: external_acl_type ldap_group %LOGIN ↵


/usr/local/squid/libexec/squid_ldap_group –P ↵
–b dc=mydomain,dc=ru ↵
cp helpers/basic_auth/LDAP/squid_ldap_auth ↵ –f (&(uid=%v)(member=ou=%a,dc=mydomain,dc=ru)) ↵
/usr/local/squid/libexec –h 127.0.0.1 –p 389
cp helpers/external_acl/ldap_group/squid_ldap_group ↵
/usr/local/squid/libexec Опять же все на одной строке.
Ключи -P, -b и -f, -h имеют те же значения, что и выше.
Переходим во вновь созданное дерево кэширующего Ключ -p – порт, который слушает LDAP-сервер, этот па-
сервера SQUID, в моем случае /usr/local/squid/sbin: раметр можно опустить, если используется стандартный
порт.
cd /usr/local/squid/sbin По поводу параметров фильтра требуется специаль-
ное пояснение, каждая запись пользователя, кроме все-
Создаем кэш: го прочего, должна быть членом класса groupOfNames, в

№11(12), ноябрь 2003 35


администрирование
этом случае у каждого пользователя появляется обяза- Затем создаем файл example.ldif с описанием корне-
тельное поле member. вого дерева и групп пользователей, например, такого со-
Пример ldif-файла для создания пользователя, груп- держания:
пы я приведу в конце.
Ну и наконец, описываю сами группы, механизм тот #Êîðåíü íàøåãî äåðåâà äèðåêòîðèé
dn: dc=mydomain,dc=ru
же самый, что и при стандартном описании, сравним: objectClass: top
Старое:
#Ãðóïïà àäìèíîâ
dn: ou=admin,dc=mydomain,dc=ru
acl users proxy_auth dima petya vasya objectClass: top
authenticate_program /usr/local/squid/bin/ncsa_auth ↵ objectClass: organizationalUnit
/usr/local/squid/etc/passwd ou: admin
#Ãðóïïà äëÿ ïîëüçîâàòåëåé icq
Новое: dn: ou=icq,dc=mydomain,dc=ru
objectClass: top
objectClass: organizationalUnit
acl users external ldap_group accounts ou: icq
acl admin external ldap_group admin
acl icq_only external ldap_group icq
#Ãðóïïà äëÿ ïðîñòûõ ïîëüçîâàòåëåé
Далее все как обычно: dn: ou=accounts,dc=mydomain,dc=ru
objectClass: top
objectClass: organizationalUnit
http_access allow admin ou: accounts
#Äîáàâëÿåì 1 ïîëüçîâàòåëÿ â ãðóïïó admin
и так далее. dn: uid=boss,ou=admin,dc=mydomain,dc=ru
objectClass: top
Описание стандартных настроек кэширующего серве- objectClass: person
ра выходит за рамки данной статьи, предполагается, что objectClass: organizationalPerson
objectClass: inetOrgPerson
вы уже знакомы с ними. #Ýòî äëÿ Qmail
А теперь поподробнее о настройке LDAP-сервера. objectClass: qmailUser
#Îáÿçàòåëüíûé êëàññ, ÷òîáû ïîÿâèëîñü ïîëå member
Конфигурационный файл должен иметь такое содер- objectClass: groupOfNames
жание: #Åñëè active òî âñå ïó÷êîì:)
description: active
#Ñþäà ÿ çàáèâàþ âðåìÿ ñîçäàíèÿ äàííîé çàïèñè, íà âñÿêèé ñëó÷àé
# destinationIndicator: 01.02.03
include /usr/local/etc/openldap/schema/core.schema #Çäåñü ÿ óêàçûâàþ ëèìèò â áàéòàõ, êîòîðûé óñòàíîâëåí
include /usr/local/etc/openldap/schema/cosine.schema #äëÿ äàííîãî ïîëüçîâàòåëÿ
include /usr/local/etc/openldap/schema/inetorgperson.schema preferredLanguage: 50000000
include /usr/local/etc/openldap/schema/nis.schema #Ýòî ïîëå òîëüêî äëÿ Qmail
#Ýòà ñõåìà äëÿ ïîääåðæêè qmail accountStatus: active
include /usr/local/etc/openldap/schema/qmail.schema #Èìåííî ïî ýòîìó ïîëþ ïðîâåðÿåòñÿ ïðèíàäëåæíîñòü
#ïîëüçîâàòåëÿ ê ãðóïïå
member: ou=admin,dc=mydomain,dc=ru
pidfile /usr/local/var/slapd.pid sn:: 0J/Rg9GC0LjQvQ==
argsfile /usr/local/var/slapd.args cn:: 0J/Rg9GC0LjQvSDQktC70LDQtNC40LzQuNGAINCS0LvQsNC00L ↵
jQvNC40YDQvtCy0LjRhw==
#Â ïîëå userPassword ëåæèò ïàðîëü ïîëüçîâàòåëÿ. Åãî ìîæåò userPassword: 123
#ïðî÷èòàòü è èçìåíèòü òîëüêî ñàì ïîëüçîâàòåëü, íó è ñåáÿ telephoneNumber: 111-11-11
#ëþáèìîãî íå çàáûë. title:: 0J/RgNC10LfQuNC00LXQvdGC
access to attr=userPassword ou:: 0JzQvtGB0LrQstCwINC60YDQtdC80LvRjA==
by self write givenName:: 0JLQu9Cw0LTQuNC80LjRgA==
by anonymous auth initials:: 0JLQu9Cw0LTQuNC80LjRgNC+0LLQuNGH
by dn="cn=Manager,dc=mydomain,dc=ru" write mail: boss@mydomain.ru
by * none uid: boss
#Ýòî ïîëå òîëüêî äëÿ Qmail
#Åñëè â ýòîì ïîëå active – Èíòåðíåò åñòü, èíà÷å – íåò mailMessageStore: /var/qmail/maildirs/boss
access to attr=description #Ýòî ïîëå òîëüêî äëÿ Qmail
by self read mailHost: mailhost.boss.ru
by anonymous read
by dn="cn=Manager,dc= mydomain,dc=ru" write #Äîáàâëÿåì 1 ïîëüçîâàòåëÿ â ãðóïïó icq
by * none dn: uid=icq_user,ou=icq,dc=mydomain,dc=ru
#Íà îäíîé ñòðî÷êå objectClass: top
access to attr=title,ou,telephoneNumber,cn,sn,givenName,o, ↵ objectClass: person
initials,physicalDeliveryOfficeName,destinationIndicator objectClass: organizationalPerson
by self write objectClass: inetOrgPerson
by anonymous read objectClass: groupOfNames
by users read description: active
by dn="cn=Manager,dc= mydomain,dc=ru" write member: ou=icq,dc=mydomain,dc=ru
access to * sn: Sidoriv
by self read cn: Sidorov Fedor Petrovich
by anonymous read userPassword: 321
by users read telephoneNumber: 999-99-99
by dn="cn=Manager,dc= mydomain,dc=ru" write title: Doctor
ou: Departament
database ldbm givenName: Fedor
suffix "dc= mydomain,dc=ru" initials: Petrovich
rootdn "cn=Manager,dc= mydomain,dc=ru" mail: icq_user@mydomain.ru
rootpw secret uid: icq_user

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

36
администрирование
dn: uid=Ivan,ou=accounts,dc=mydomain,dc=ru Теперь пора добавить наши данные.
objectClass: top
objectClass: person В случае работающего OpenLDAP:
objectClass: organizationalPerson
objectClass: inetOrgPerson /path/ldapadd –x –D “cn=Manager,dc=mydomain,dc=ru” –W ↵
objectClass: groupOfNames –f /path/example.ldif
description: active
member: ou=icq,dc=mydomain,dc=ru
sn: Ivanov /path/ – реальное местоположение утилиты ldapadd и фай-
cn: Ivanov Ivan Ivanovich ла example.ldif.
userPassword: 333
telephoneNumber: 999-99-99 В заключение хочется добавить, что лень и нехват-
title: Doctor ка времени заставили меня написать некоторое коли-
ou: Departament
givenName: Ivan чество скриптов, в основном на Perl, которые проверя-
initials: Ivanovich ют и расходование трафика пользователями и блоки-
mail: Ivan@mydomain.ru
uid: Ivan ровки доступа в Интернет с посылкой уведомления по
почте.
Запись для первого поля почти реальная, форма, а не Мои пользователи через веб-интерфейс правят свои
содержание. Последние две записи несколько аскетич- учетные записи на предмет рабочих телефонов, места ра-
ные, если вам не нужна ни адресная книга, ни поддержка боты, смены пароля – это реализовано на PHP.
QMail, то это как раз необходимый минимум. Этим я хочу сказать, что трудностей с созданием ваших
Небольшое пояснение. Поля sn, cn и др. заполнены программ для манипулирования LDAP быть не должно.
русским текстом в формате utf8. Ничего не имею против Для создания записей в OpenLDAP я пользуюсь GQ-0.6.0:
английского, но некоторые пользователи жалуются. К тому http://biot.com/gq/.
же появляется адресная книга вашей фирмы, не советую Вот, собственно, и всё. Удачи!
пользоваться адресной книгой в Outlook Express, на ред- Благодарность Henrik Nordstrom hno@squid-cache.org
кость неудобная реализация. Я пользуюсь той, что идет в за то, что написал модуль squid_ldap_group и объяснил
пакете Mozilla, но это дело вкуса. мне, как им пользоваться.

№11(12), ноябрь 2003 37


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

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

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


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

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

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

Так уж вышло, что физическое месторасположение мос-


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

№11(12), ноябрь 2003 39


администрирование
#############
# 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;
}
}

Кратко прокомментирую самое главное. Клиент полу-


чит 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).
ты с BOOTROM (энергонезависимая память с прошив-
кой, осуществляющей загрузку). Давно, еще на старень-
ких NE2000, появилась возможность установки и исполь-
зования этих самых BOOTROM. Только в наше время это
дело выбора.
Можно найти сетевую карту со слотом для ПЗУ, доку-
пить саму ПЗУ, сделать прошивку, необходимую вам, и
наслаждаться проделанной работой. А можно сразу ку-
пить сетевую карту, поддерживающую загрузку по сети.
Сейчас распространены прошивки Intel PXE, лучше оста-
новиться на версии v2.x. У автора как раз завалялось не-
сколько таких карточек, а именно 3Com905C-TX-M. Уста-
навливаем, входим в BIOS сетевой карты, настраиваем,
чтобы загружалась по сети.
Все, на этом настройка клиента заканчивается. Но что,
если у вас нет под рукой такого 3Com, но нашлась какая-
нибудь другая карта с уже установленным ПЗУ. Вам по-
могут либо etherboot, либо netboot [3]. Клиент настроен,
включен и рассылает запросы по сети, ожидая ответа от
DHCP-сервера в виде сетевых настроек и TFTP-сервера,
с которого необходимо забрать образ.

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

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

№11(12), ноябрь 2003 41


администрирование
Второй шаг. Настройка TFTP дистрибутива ядро скачивает с TFTP-сервера согласно
TFTP-сервер поставляется в комплекте практически с параметрам (см. конфигурационный файл).
любым дистрибутивом. Скорее всего и в вашем Linux он
уже установлен. Автор не стал запускать TFTP под на- Безопасность
блюдением INETD (именно в моем случае это просто из- Используйте firewall, дабы прикрыть новые сервисы. Мож-
лишне, для себя решайте сами). Вся настройка сервиса но ограничить доступ к ним только из одной сети, но
(если без INETD) укладывается в указание нужных пара- iptables позволяет ограничить доступ даже по MAC-адре-
метров при запуске [6]. сам. Для DHCPD укажите сетевой интерфейс, который бу-
дет обслуживаться этим сервисом.
/usr/sbin/in.tftpd -l -v -s /tftpboot/
Заключение
В директорию /tftpboot/ (у меня это линк на /usr/local/ Не бойтесь экспериментировать. Собрать и настроить та-
tftpboot/) копируем бинарник pxelinux.0 из пакета SYSLINUX. кой bridge несложно, зато практическая польза – все 100%.
Это все, что понадобится нам из этого пакета. Конфигу- К тому же, настроив одну станцию и собрав один малень-
рационные файлы для PXELINUX хранятся в корне TFTP- кий дистрибутив, вам наверняка захочется сменить еще
сервера в каталоге «pxelinux.cfg». Чтобы клиент легко ра- парочку маршрутизаторов на бездисковые.
зобрался, какой конфигурационный файл предназначен
именно ему, файлы соответствуют IP-адресам клиентов, Ссылки:
но в шестнадцатеричном представлении. Так, для наше- [1]Что такое bridge и чем он отличается от router, должен
го клиента, имеющего IP-адрес 192.168.0.2, конфигура- знать каждый системный администратор. К тому же, как
ционный файл для pxelinux.0 должен находиться по сле- настроить bridge, описывалось в статье Заклякова П.
дующему адресу: Разводной мост на Linux (Bridging Firewalls). – //Журнал
«Системный администратор» №4(5), апрель 2003 г. –
/tftpboot/pxelinux.cfg/C0A80002 42-54 с. Хотя лично у меня есть небольшие расхожде-
ния в реализации. В основном они сводятся к упроще-
Как вы думаете, как будет выглядеть конфигурацион- нию. Например, вместо того чтобы патчить ядро, мож-
ный файл для 192.168.0.0/24? Правильно – «C0A8». но просто использовать последнюю версию оного. Сна-
Вот мой конфигурационный файл: чала прочтите Bridge+Firewall-HOWTO, вы сами все пой-
мете. Вот несколько ссылок, которые помогут вам до
default /kernels/test/bzImage initrd=/images/initrd.br ↵ конца разобраться:
load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=16384 ↵
rw root=/dev/ram0 console=ttyS0 http://bridge.sourceforge.net/
prompt 1 http://www.linux.org/docs/ldp/howto/Bridge/index.html
display /images/default.txt
F1 /images/help.txt http://www.linux.org/docs/ldp/howto/Bridge+Firewall.html
timeout 50 http://www.linux.org/docs/ldp/howto/BRIDGE-STP-
label linux
kernel /kernels/bare.i/bzImage HOWTO/index.html
append - http://www.ibiblio.org/
label bare.i
kernel /kernels/bare.i/bzImage [2]По всем параметрам, которые можно задать ядру через
append initrd=/images/initrd.br load_ramdisk=1 ↵ командную строчку, есть хороший man – man 7 bootparam.
prompt_ramdisk=0 ramdisk_size=8192 ↵
rw root=/dev/ram SLACK_KERNEL=bare.i [3]Подробнее о etherboot и о netboot можно узнать, найдя
эти проекты на http://www.sf.net
Примечание. Убедительная просьба – прочтите докумен- [4]Homesite dhcpd: http://www.isc.org/products/DHCP/
тацию по настройке PXELINUX. PXELINUX обладает широ- [5]Homesite syslinux: http://syslinux.zytor.com/index.php
кими возможностями, с его помощью вы можете загрузить [6]man in.tftpd
любую операционную систему и даже восстанавливать ее [7]http://www.ibiblio.org/pub/Linux/docs/HOWTO/Diskless-
после краха. Если внимательно разобрать конфигурацион- HOWTO
ный файл, вы поймете, что ядра Linux и сами образы систе- http://www.ibiblio.org/pub/Linux/docs/HOWTO/Kernel-
мы хранятся в разных директориях (автору так удобнее). HOWTO
Собрать ядро для бездисковой станции проблем не [8]BusyBox представляет собой «набор» основных ути-
составит. Прочтите HOWTO на тему Diskless и Kernel [7]. лит Linux, только они специально несколько упроще-
Главное, включите поддержку ram-дисков и ext2. От NFS- ны. Все равно очень удобно. Очень удачно описана
ROOT автор отказался наотрез, ну не нужен он там. Луч- сборка дистрибутива в статье «Создание загрузочных
ше собрать свой маленький дистрибутив или воспользо- дискет и CD-дисков Linux» Всеволода Стахова, кото-
ваться каким-нибудь однодискетным. Автор собрал тако- рая была опубликована в журнале «Системный адми-
вой в стиле Slackware, основанный на BusyBox [8]. Образ нистратор» №6(7), июнь 2003 г. – 44-51 с.

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

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


В ACTIVE DIRECTORY

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

44
администрирование
Поводом для появления данной статьи послужила инфор- разделение, выяснить, как с ним можно связаться (конеч-
мация, опубликованная в журнале «Windows & .Net но же, речь здесь не идет о стандартных учетных записях
Magazine/RE» №5 за 2003 год под названием «Утилита типа «Администратор», «Administrator», «Guest», «Гость»,
LDIF Directory Exchange», подсказавшая решения, кото- и другие).
рые можно было использовать для того, чтобы обеспе- И в-третьих, выполнение требований политики безо-
чить необходимый уровень автоматизации при проведе- пасности предприятия подразумевает, что усилия и ад-
нии аудита учетных записей пользователей в Active министраторов, и пользователей должны быть направле-
Dircectory. В статье было приведено описание основных ны на то, чтобы учетная запись использовалась только ее
возможностей двух утилит Ldifde.exe и Csvde.exe, обес- владельцем. То есть, если протокол выполнения опера-
печивающих добавление, изменение и удаление объек- ций работы с какой-либо из программ показал, что пользо-
тов Active Directory. ватель вошел под учетной записью Иванова Ивана Ива-
Информация, изложенная ниже, ориентирована на ис- новича, то абсолютно нерационально будет тратить вре-
пользование Windows-платформ и предназначена в ос- мя на дополнительные разборки с ситуациями, когда вы-
новном для людей, отвечающих за вопросы компьютер- ясняется, что учетной записью пользуются (из-за недо-
ной безопасности аудиторов, специализирующихся в дан- статочных знаний компьютера или обычной лени) все со-
ной области. Надеемся, что статья будет полезна и лю- трудники отдела, в котором трудятся пять человек.
дям, профессионально занимающимся администрирова-
нием локальных сетей. Обзор возможностей по работе
с учетными записями
Постановка проблемных вопросов Попробуем перечислить те возможности, которые есть под
В определенный момент времени наступает то критичес- руками у администратора для работы с учетными запися-
кое состояние для списка пользователей локальной сети ми пользователей в Active Directory, и то, насколько они
предприятия, когда нежелание остановиться и провести могут быть использованы для проведения аудита.
анализ его содержимого может повлечь большие затра- Оснастка Active Directory – пользователи и компьютеры
ты и проблемы, нежели своевременное проведение ра- (которую можно найти в разделе «Администрирование» на
бот по аудиту и устранению выявленных недостатков. сервере). Замечательная возможность для добавления,
О чем идет речь? В организациях, где число сотрудни- редактирования свойств и удаления пользователей доме-
ков, работающих с компьютерной техникой, превышает на, но, к сожалению, достаточно бесполезная в вопросах
100 человек, администрированием занимаются, как пра- проведения ревизии и аудита. К положительным момен-
вило, два-три сотрудника. Не все они, в силу различных там можно отнести возможность проведения экспорта спис-
обстоятельств, с достаточным педантизмом относятся к ка пользователей, в который можно включить такие поля,
работе по внесению во вновь создаваемые учетные за- как – «имя входа пользователя», «имя», «выводимое имя»,
писи информации о владельцах. Кроме того, админист- «фамилия», «изменен». Отметим, что поле «изменен» по-
раторы обычно не включены в список тех сотрудников, казывает время и дату последних изменений для учетной
которым обязаны сообщать об увольнениях. Два этих об- записи администратором (производилась коррекция на-
стоятельства являются основными причинами, из-за ко- строек) или владельцем (смена пароля).
торых и происходит накопление учетных записей «мерт- Системная утилита Net.exe. С помощью этой утилиты
вых душ». вы можете обеспечить работу с данными конкретного
Попробуем провести некоторую систематизацию наи- пользователя (вариант вызова – «Net user») – получить
более значимых и очевидных проблем для списка пользо- дату и время последней регистрации в сети, а также оп-
вателей Active Directory. ределить, когда завершается срок действия пароля.
Во-первых, лишние записи в списке пользователей, Программы-сканеры, задача которых заключается в
которые могут быть: сборе информации о состоянии локальной сети или конк-
 учетными записями уволенных сотрудников; ретного компьютера. Среди наиболее интересных про-
 учетными записями работающих сотрудников, которы- грамм в плане получения информации о пользователях
ми не пользуются и владельцы которых уже вряд ли по- отметим CFI LANguard Network Security Scanner (ver 3.1.5).
мнят имена для входа в сеть (не говоря уже о паролях); Она предоставляет возможность получения достаточно
 учетными записями заблокированных пользователей, подробной информации об учетных записях, такой как
для которых администратор выполнил первый шаг пе- дата и время последней регистрации; данные о том, ког-
ред удалением, но так и не закончил процедуру; да пароль будет просрочен; количество регистраций
 учетными записями, созданными для тестирования, ко- пользователя в сети; значение индекса попыток входа с
торые обычно имеют достаточно высокие привилегии, некорректным паролем. Кроме того, программа позво-
и которые администратор забыл удалить, после того ляет на основании данных двух сохраненных протоко-
как процесс тестирования был завершен. лов сканирования сформировать отчет о расхождениях
и получить перечень заведенных и удаленных учетных
Во-вторых, к недопустимым можно отнести те учетные записей. Справедливости ради отметим, что программа
записи, которые однозначно не идентифицируют владель- имеет существенные недостатки, особенно для русско-
ца, т.е. дополнительная информация в которых не позво- язычной категории пользователей, так как она некоррек-
ляет назвать человека, определить его должность и под- тно обрабатывает русские названия (в именах и допол-

№11(12), ноябрь 2003 45


администрирование
нительных параметрах учетных записей и пр.). Кроме того, Òàáëèöà 1. Îïèñàíèå íåêîòîðûõ ïîëåé ó÷åòíûõ çàïèñåé
отсутствует возможность сохранить в отдельном файле LDAP-êàòàëîãà
информацию о найденных расхождениях в списках учет-
ных записей.
Перейдем теперь к рассмотрению утилит, которые, на
наш взгляд, предоставляют возможность получения наи-
более полной информации по пользователям – 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


Для наглядности, вместо полного описания параметров
работы с утилитой приведем пример, на основе которого
можно построить запросы для всех необходимых для ауди-
та случаев.
Форматы представления данных
csvde -f USERS_WORK.CSV -b GUEST MICROSOFT *
-r "(&(objectClass=user)(!(objectClass=computer)) ↵
даты и времени
(!(userAccountControl=514))(!(userAccountControl=66050)))" Если вы были наблюдательны, то заметили, что в табли-
-l "DN, memberOf, badPasswordTime, lastLogon, logonCount, ↵ це 1 имеются два различных варианта представления
sAMAccountName, userAccountControl, whenChanged, whenCreated"
значений даты и времени.
Использование данной команды позволяет сохранить Если формат вида ГГГГММДДЧЧММСС.0Z (тип
в файле наиболее интересную с точки зрения аудита ин- GeneralizedTime для ASN.1 кодирования), используемый для
формацию по действующим (не заблокированным) полей whenChanged, whenCreated по Гринвичу достаточно
учетным записям пользователей. понятен, то параметры, такие как lastLogon, pwdLastSet,
В файл USER_WORK.CSV (параметр -f) будут записа- accountExpires, представляют информацию о дате и вре-
ны данные учетных записей пользователей домена. Про- мени в 32-битном UNIX-формате, и содержат значения се-
грамма будет производить обработку данных, которые кунд, прошедших начиная с 1 января 1970 г., GMT. Для на-
должны быть доступны пользователю GUEST домена глядности приведем некоторые значения, которые могут
MICROSOFT, пароль для которого должен быть введен в содержаться в файле выгруженных значений для парамет-
процессе выполнения команды (параметр -b). ров даты и времени в Unix-формате:
Из всех объектов LDAP-каталога будут отобраны
только учетные записи пользователей, для которых в 126858492000000000 – ñîîòâåòñòâóåò 1.01.2003 00:00
127014876000000000 – ñîîòâåòñòâóåò 1.07.2003 00:00
поле параметра userAccountControl отсутствует инфор- 127014912000000000 – ñîîòâåòñòâóåò 1.07.2003 01:00
мация о блокировке учетной записи (параметр -r). В
качестве логических операций для фильтра использу-
ются – «!» – логическое НЕТ, «&» – логическое И, «|» – Использование функций преобразований
логическое ИЛИ. для данных CSV-формата
В результате выполнения команды в CSV-файле бу- Информацию по учетным записям, которая выгружена с
дут сохранены данные полей, перечисленных в пара- помощью команды, аналогичной, указанной в начале раз-
метре -l (список наиболее интересных полей приведен дела «Использование утилиты Csvde.exe», можно попы-
в таблице 1). таться загрузить в Microsoft Access, однако, в связи с тем,
Примечание: команда «Net user» некорректно обра- что программа некорректно обрабатывает символ-разде-
батывает данные поля pwdLastSet, а также некоторые литель «,» в структурах типа «CN=Bill Gates,CN=Users,
значения времени. Для поля pwdLastSet, в случае если DC=Microsoft,DC=com», то лучше воспользоваться анало-
пароль не был задан, выводятся текущие дата и время. гичными возможностями программы Microsoft Excel (см.
Для данных времени вместо значений вида 00:mm AM и рис. 1). Далее, информацию для удобства использования
00:mm PM выводятся значения 12:mm AM и 12:mm PM можно обработать с помощью имеющихся в Microsoft Excel
соответственно. возможностей (макросы, функций).

46
администрирование
= ÅÑËÈ(
ÇÍÀ×ÅÍ(ËÅÂÑÈÌÂ(F2;11))=0;
-1;
ÎÊÐÓÃËÂÍÈÇ((ÇÍÀ×ÅÍ(ËÅÂÑÈÌÂ(F2;11))- 12685849200)/24/3600; 0)
)

Ðèñóíîê 1. Ïðèìåð äàííûõ CSV-ôàéëà ïîñëå ýêñïîðòà Полученное на первом этапе значение сдвига дней
â Microsoft Excel относительно 1 января 2003 г. (в ячейке E2) используется
На рисунках приведена информация CVS-файла сразу для формирования даты в стандартном формате.
после проведения его загрузки в Microsoft Excel (рис. 1) и
после проведенных преобразований (рис. 2). Примеры =ÅÑËÈ( E2=-1;
"Îòñóòñòâóåò";
таких преобразований приведены ниже. Предлагаемые ÑÖÅÏÈÒÜ(
варианты преобразований не претендуют на логическую ÄÅÍÜ(ÄÀÒÀÇÍÀ×("1/1/2003")+E2);
".";
законченность, но могут являться той основой, с помо- ÌÅÑßÖ(ÄÀÒÀÇÍÀ×("1/1/2003")+E2);
щью которой за короткий срок может быть разработан ".";
ÃÎÄ(ÄÀÒÀÇÍÀ×("1/1/2003")+E2)
необходимый механизм обработки под каждый конкрет- )
ный случай.

Обработка данных даты и времени


формата GeneralizedTime
для ASN.1 кодирования
Преобразование числа в формате ГГГГММДДММСС.0Z в
формат ДД.ММ.ГГГГ ЧЧ:ММ

=ÑÖÅÏÈÒÜ(
Ðèñóíîê 2. Âèä èíôîðìàöèè CSV-ôàéëà ïîñëå ïðåîáðàçîâàíèé ÏÑÒÐ(N2;7;2); "."; ÏÑÒÐ(N2;5;2); "."; ÏÑÒÐ(N2;1;4); " ";
ñ èñïîëüçîâàíèåì âîçìîæíîñòåé Microsoft Excel ÏÑÒÐ(N2;9;2); ":"; ÏÑÒÐ(N2;11;2)
)
Получение данных из структуры поля DN
Для получения имени пользователя из структуры вида
«…CN=Имя_пользователя,…» в ячейке A2, может быть Обработка значения поля
использована следующая формула преобразования: userAccountControl
о блокированности записи
=ÏÑÒÐ(A2; Получение данных о состоянии учетной записи по значе-
ÍÀÉÒÈ("CN=";A2)+3;
ÍÀÉÒÈ(","; A2; нию поля userAccontControl, содержащемуся в ячейке G2:
ÍÀÉÒÈ( "CN="; A2 )+3
) - ÍÀÉÒÈ("CN=";A2) -3
) =ÅÑËÈ(ÅÏÓÑÒÎ(G2);"";
ÅÑËÈ(ÈËÈG2=514; G2=66050);"Çàáëîêèðîâàííàÿ";"Äåéñòâóþùàÿ")
)
Для получения информации из структуры вида
«…OU=Данные,…» в ячейке A2 может быть использова- Подробные пояснения и описание формата хранения
на следующая формула преобразования: данных в поле userAccountControl можно найти в статье
Microsoft «How to Use the UserAccountControl Flags to
=ÅÑËÈ(ÅÏÓÑÒÎ('0'!A2);""; Manipulate User Account Properties» (http://support.
ÅÑËÈ(ÅÎØÈÁÊÀ(ÍÀÉÒÈ("OU=";'0'!A2)); "USERS";
ÏÑÒÐ( '0'!A2; microsoft.com/?kbid=305144). Отметим только, что если
ÍÀÉÒÈ("OU=";'0'!A2)+3; параметры учетной записи не заданы, то десятичное зна-
ÍÀÉÒÈ(","; '0'!A2;
ÍÀÉÒÈ("OU=";'0'!A2)+3) – чение userAccountControl равно 512; десятичное значение
ÍÀÉÒÈ("OU=";'0'!A2) -3 для блокированной учетной записи при отсутствии дру-
)
) гих параметров – 514.
)
Заключение
В статье предложен достаточно простой метод получе-
Обработка данных даты ния данных для аудита учетных записей пользователей в
и времени Unix-формата Active Directory, не требующий специальных навыков и
Получение даты в формате ДД.ММ.ГГГГ на основании знаний языков программирования.
данных в Unix-формате предлагаем производить в два Отметим, что кроме изложенного метода может быть
этапа. На первом этапе вычисляется количество дней, использован вариант, рекомендуемый Microsoft, предпо-
прошедших с 1 января 2003 г. На втором формируется лагающий использование интерфейсов службы Active
строка даты в стандартном формате. Directory (ADSI), которые предоставляют простой, мощ-
Для получения количества дней, прошедших с 1 янва- ный, объектно-ориентированный доступ к ресурсам Active
ря 2003 г., на основании данных в ячейке F2, заданных в Directory. Интерфейсы ADSI позволяют программистам и
Unix-формате даты и времени, может быть использована администраторам создавать программы каталога с ис-
следующая формула преобразования: пользованием инструментальных средств высокого уров-

№11(12), ноябрь 2003 47


администрирование
ня, например, Microsoft Visual Basic, Java, C или Visual C++,  данные учетной записи о том, что последняя регист-
не заботясь о различиях в пространствах имен. Интер- рация в сети происходила три и более месяца назад,
фейсы ADSI полностью поддерживают сценарии, что об- могут указывать на то, что сотрудник, которому при-
легчает их использование администраторами. надлежала учетная запись, уже уволен;
И напоследок, в качестве рекомендаций перечислим  если количество регистраций в сети для учетной за-
те нюансы, на которые следует обратить внимание при писи равно нулю, а со времени ее создание прошло
проведении анализа данных списка пользователей, кото- свыше одного месяца, то это может говорить о том,
рые могут указывать на существующие проблемы при ис- что созданная учетная запись оказалась невостребо-
пользовании учетных записей: ванной;
 заблокированные учетные записи (после анализа пос-  большое количество регистраций в сети может указы-
ледней даты регистрации могут быть удалены в слу- вать на то, что учетная запись используется для входа
чае, если необходимость в них отсутствует); в сеть не только владельцем.

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

WINDOWS SERVER 2003:


ВЗГЛЯД СИСТЕМНОГО
АДМИНИСТРАТОРА

АЛЕКСЕЙ ДОЛЯ
МИХАИЛ МЕЛЬНИКОВ
50
администрирование
Не так давно всемирно известная группа Gartner про- ющей или предполагаемой информационной структу-
вела весьма интересное исследование рынка сервер- ры компании.
ных операционных систем семейства Windows, в ре- «При разработке Windows Server 2003 мы ставили во
зультате выяснилось, что подавляющее большинство главу угла повышение безопасности системы, – заявил
компаний и администраторов предпочитают базировать Билл Вегте, вице-президент подразделения Windows
свои серверы на старой как мир Windows NT 4.0 (она Server Division корпорации Microsoft. – Безопасность яв-
занимает порядка 60-70% рынка), и переход на Windows ляется одной из главных забот пользователей, и новые
2000 Server, а тем более на недавно вышедшую функции, реализованные в этой версии, значительно
Windows Server 2003 для них выглядит непривлекатель- облегчают создание защищенных систем. Windows
ной идеей. Microsoft же, в свою очередь, незадолго до Server 2003 представляет собой надежную безопасную
выхода Windows Server 2003 также провела статисти- платформу, обогащенную целым рядом новаторских ре-
ческое исследование, в котором рынку Windows NT 4.0 шений».
отводится всего лишь 35%. Более того, было развер- И действительно, выход операционной системы от-
нуто свыше 10 000 серверов вне стен Microsoft под уп- кладывался (по заявлениям Microsoft для того, чтобы
равлением Windows Server 2003 еще до официального максимально эффективно и качественно пройти этап
дня презентации. Кому верить – вопрос риторический. тестирования нового продукта), ее названия (по срав-
Однако время на месте не стоит, да и сама Microsoft нению с бэта-версиями) менялись. Ключевой довод раз-
дышит оптимизмом: с момента появления NT 4.0 воды работчиков сводился к повышению безопасности но-
утекло довольно много, а вариантов серверных Windows вой ОС. Что ж, будем надеяться, что цели поставлен-
помимо самой Windows NT 4.0 набралось уже два: ные разработчиками, реализованы.
Windows 2000 Server, и вот, встречайте, Windows Server Возвращаясь к цифрам статистики, можно сделать
2003 (как всегда в нескольких редакциях и ценовых ка- вывод, что не раз наученные горьким опытом админис-
тегориях: Enterprise, Web, Datacenter и, конечно же, траторы из принципа не переходят на новую версию
Standard). Каждый из вариантов системы позициони- Windows. А сама миграция им представляется переез-
руется компанией Microsoft для решения конкретных за- дом на Гондурас без денег и запасного белья. Некото-
дач в ориентации на разную производительность, фун- рые ждут как минимум двух официальных патчей, ко-
кциональность и гибкость, и масштаб организационной торые по идее должны исправить практически все не-
инфраструктуры. дочеты разработчиков, другие же закрывают глаза на
Windows Server 2003 Datacenter разработана для кри- все, и по-прежнему каждый день в меню «Пуск» наблю-
тичных бизнес-приложений, она позволяет решать за- дают надпись Windows NT 4.0 или Windows 2000.
дачи, требующие масштабируемости и доступности вы-
сокого уровня. Например, решения для баз данных, пла-
нирования ресурсов на предприятии, высокоскоростной
интерактивной обработки транзакций и консолидации
серверов. Windows Server 2003 Datacenter Edition под-
держивает 32-потоковую мультипроцессорную обработ-
ку данных (SMP) и до 64 Гб оперативной памяти (речь
идет о 32-разрядной версии, 64-разрядная поддержи-
вает соответственно 128 Гб ОЗУ), а также предостав-
ляет стандартные функции: восьмиузловую кластери-
зацию и службы балансировки нагрузки.
Windows Server 2003 Web Edition будет применяться
для конкретных задач, ориентированных на использо-
вание веб-технологий. Эта версия предназначена для
разработки и поддержки хостинга веб-приложений, веб-
страниц и веб-служб XML. Web Edition разработана для
использования в основном в качестве веб-сервера IIS Ðèñóíîê 1. Ïðèìåð ïðîåêòèðîâàíèÿ ñèñòåìû áåçîïàñíîñòè ñåðâåðà
версии 6.0 и предоставляет платформу для успешной Компания Microsoft призывает администраторов пе-
разработки и развертывания веб-служб XML, которая реходить на Windows Server 2003, не дожидаясь перво-
использует технологию ASP.NET, являющуюся одной из го сервис-пака. Тем не менее выход сервис-пака уже
основных частей .NET Framework. Кстати говоря, пред- официально назначен на декабрь этого года.
полагается, что Windows Server 2003 Web Edition при- Впрочем, стоит заметить, что при недочетах Windows
обрести в розничной продаже будет нельзя, поскольку 2000, в новой Windows 2003 таковых (во всяком случае
она будет распространяться исключительно через офи- пока) не обнаружено, и после разговора с несколькими
циальных партнеров Microsoft. администраторами крупных компаний, которые уже ус-
В свою очередь Windows Server 2003 Standard Edition пели перейти на Windows Server 2003, складывается
от Enterprise Edition предоставляемым функционалом впечатление, что система действительно внушает до-
во многом схожи, и по рекомендации Microsoft могут верие.
использоваться в зависимости от масштаба существу- Для начала давайте рассмотрим некоторые предпо-

№11(12), ноябрь 2003 51


администрирование
сылки к миграции на новую ОС. В первую очередь это Весьма интересным и значительным изменениям под-
удобство в администрировании сервера: подобно но- вергся и весь процесс управления системой. В Windows
венькой BMW, «водителю» не нужно прилагать излиш- Server 2003 повышена надежность и доступность средств
них телодвижений для того, чтобы нажать какую-либо управления, введенных ранее в Windows 2000, и усовер-
кнопку. То же самое и здесь. шенствованы основные функции, такие как инструмен-
Наиболее интересным приложением в новой ОС яв- тарий управления Windows, групповая политика и ре-
ляется мастер управления сервером (см. рисунок), ко- зультирующая политика.
торый будет встречать вас каждый раз при включении Благодаря службам управления IntelliMirror все при-
компьютера, начиная с самого первого запуска систе- ложения, данные и настройки доступны пользователям
мы. Он введен взамен прежнего мастера настройки независимо от точки входа в систему, что, несомненно,
сервера. С его помощью выполняются базовые опера- повышает производительность. Как и в Windows 2000,
ции администратора над сервером, которые раньше установка, удаление и обновление приложений могут
требовали значительно больших затрат времени. Одна выполняться удаленно. В конечном счете адекватно
из главных целей мастера управления сервером – пре- задачам развернутой инфраструктуры эффективное
доставить системным администраторам удобную воз- использование всех сервисов предполагает для конеч-
можность настраивать сервер для выполнения конкрет- ного пользователя наличие гибкой, управляемой сис-
ных задач, например, создания DNS-серверов, контрол- темы для работы, исключая необходимость настраивать
лера домена, DHCP-серверов и т. д. рабочие места под сервер.

Ðèñóíîê 2. Ìàñòåð óïðàâëåíèÿ ñåðâåðîì â äåéñòâèè Ðèñóíîê 3. Îïðåäåëåíèå ïóòè ìèãðàöèè äëÿ ñåðâåðà ïðè ïåðåõîäå
Как и всегда, разработчики делают ставку на повы- íà ïëàòôîðìó Windows Server 2003
шение надежности и производительности нового про- Миграция – процесс нелегкий и недешевый. Его целе-
дукта. С Windows Server 2003 все эти обещания выгля- сообразность всегда стоит под вопросом. Тем не менее
дят как нельзя более внушительно. Внесены усовершен- Windows Server 2003 – отличная замена старым NT 4.0 и
ствования в такие технологии, как балансировка нагруз- Windows 2000 Server.
ки сети, служба Active Directory (об этом ниже), класте- Причин для миграции с прежних серверных версий
ры серверов. Кроме того, интегрирована новая среда – Windows на Windows Server 2003 много, и для каждого
так называемая CLR (Common Language Runtime). Клю- предприятия они могут быть персональными. Кто-то
чевым свойством CLR с точки зрения администратора использует в качестве сервера Windows 2000 Server, а
является возможность обеспечения программной изо- кто-то до сих пор базирует свой сервер на основе
ляции приложений, исполняемых в общем адресном Windows NT 4.0. Если у вас последний случай, то стоит
пространстве. Это осуществляется с помощью безопас- заметить, что Windows Server 2003 не просто превос-
ного в отношении типов (type safety) доступа ко всем ходит Windows NT 4.0 по многим параметрам, но и яв-
областям памяти при исполнении безопасного управ- ляется более надежной ОС. К тому же использование
ляемого кода. Некоторые компиляторы могут создавать всех возможностей Windows Server 2003 позволит вам
MSIL-код, который не только безопасен в отношении значительно повысить не только производительность и
типов, но и поддается простой проверке на безопас- надежность сети, но и упростить само ее администри-
ность исполнения. Этот процесс называется верифи- рование. Например, служба Microsoft Active Directory уп-
кацией и позволяет серверам легко проверять написан- рощает администрирование крупных и территориаль-
ные на MSIL пользовательские программы, и запускать но распределенных сетей и дает возможность пользо-
только те, которые не будут производить опасных об- вателям быстро находить необходимые данные неза-
ращений к памяти. Такая независимая верификация висимо от размеров сети и количества серверов. Усо-
важна для действительно масштабируемых серверов, вершенствования, которые внесены в эту технологию,
исполняющих пользовательские программы и скрипты. по заявлениям разработчиков имеют важное стратеги-

52
администрирование
ческое значение для сетей предприятий любых разме- ность и масштабируемость, а также облегчить админист-
ров. В число нововведений и усовершенствований Active рирование сети в общем.
Directory входит переименование домена, что позволяет Ну и самое заметное усовершенствование в Active
изменять DNS- и NetBIOS-имена уже зарегистрирован- Directory, конечно же, повышение общей производи-
ных доменных имен в составе логической схемы лес тельности. В Windows Server 2003 организовано более
(forest) таким образом, что результирующий состав леса эффективное управление репликацией и синхрониза-
остается синтаксически корректным. цией содержимого Active Directory. Благодаря этому ад-
министраторам будет легче контролировать типы дан-
ных, подлежащих репликации и синхронизации между
контроллерами одного или нескольких доменов. Кроме
того, Active Directory предлагает больше возможностей
в плане интеллектуального отбора данных, подлежа-
щих репликации. Например, можно выбирать только из-
менившиеся данные, исключая необходимость обнов-
лять полностью весь каталог.
Нельзя не рассказать и о новшествах в плане Internet
Information Server (IIS), который теперь наделен порядко-
вым номером 6.0.
Теперь IIS предоставляет ряд новых функций и усо-
вершенствований, среди которых новые программные
средства, функции безопасности, новая архитектура об-
работки запросов и новые функции обеспечения быстро-
действия и масштабируемости.
Ðèñóíîê 4. Âëèÿíèå îáíîâëåíèÿ äîìåíîâ íà äîâåðèòåëüíûå Функция отслеживания состояния системы (WAP),
îòíîøåíèÿ интегрированная в IIS 6.0, поможет вам следить за со-
Также следует отметить появление в Active Directory стоянием рабочих процессов посредством периодичес-
поддержки класса inetOrgPerson – теперь администра- кой проверки связи с ними. Естественно, цель подоб-
тор может использовать данную возможность для вы- ных «процедур» состоит в выявлении блокировки того
полнения миграции объектов inetOrgPerson из катало- или иного процесса. Если какой-либо процесс блоки-
га LDAP в Active Directory при необходимости сравнить рован, служба WAP закрывает его и взамен запускает
содержимое Active Directory с другими каталогами LDAP другой, идентичный ему процесс.
или создать объекты inetOrgPerson в Active Directory. Привязка к процессорам в IIS 6.0 также играет да-
леко не последнюю роль. Каждый рабочий процесс
можно привязать к отдельному процессору, и при этом
попадания в кэш процессора (L1 или L2) происходят
чаще.
В плане безопасности в IIS 6.0 введены такие функ-
ции, как блокировка сервера, усовершенствование про-
токола SSL, интеграция так называемого паспорта
(Microsoft Passport), авторизация URL и многое другое.
Windows Server 2003 содержит значительное количе-
ство поправок и усовершенствований Active Directory, и
перечисленные выше нововведения и обновления AD –
это всего лишь маленькая доля всего, что появилось но-
вого в этой службе.
При помощи специальных служб сертификации и
средств управления сертификатами организации могут
создавать собственную инфраструктуру открытых клю-
Ðèñóíîê 5. Ïðåèìóùåñòâà ìèãðàöèè íà ïëàòôîðìó Windows Server 2003 чей (так называемую Public Key Infrastructure, PKI). Инф-
î÷åâèäíû, îñîáåííî åñëè âû èñïîëüçóåòå Windows NT 4.0 раструктура PKI позволяет администраторам внедрять
Windows Server 2003 является достойной альтернати- технологии обеспечения безопасности, основанные на
вой Windows NT 4.0 и побуждает системных администра- стандартах, (например, вход в систему с использовани-
торов, избавиться от старого ПО и перейти к новому. В ем смарт-карт, проверку подлинности клиентов по про-
качестве основного довода Microsoft приводит аргумент, токолам Secure Sockets Layer (SSL) и Transport Layer
формулирующийся примерно так: пора выкинуть старое Security (TLS).
железо под управлением Windows NT 4.0 и заменить его Службы сертификации позволяют администраторам
новыми высокопроизводительными кластерами под уп- создавать доверенные центры сертификации, отвеча-
равлением Windows Server 2003 – это позволит упростить ющие за выдачу и отзыв сертификатов X.509 V3. Бла-
топологию сети предприятия, повысить производитель- годаря этому организации могут и не зависеть от ком-

№11(12), ноябрь 2003 53


администрирование
мерческих систем проверки подлинности, даже если  Диспетчер авторизации (Authorization Manager) обес-
такая система интегрирована в инфраструктуру откры- печивает возможность авторизации на основе прин-
тых ключей отдельной организации. ципа прикладных ролей, упрощая системным адми-
Весьма интересной возможностью, которую вы по- нистраторам управление доступом конечных пользо-
лучите при миграции на Windows Server 2003 также яв- вателей к веб-службам.
ляется консоль управления групповой политикой, кото-
рая была задумана в качестве дополнительного компо- «А стоит ли надеяться на непроверенную надеж-
нента Windows Server 2003. С ее помощью админист- ность, в то время как уже полюбившаяся и настроен-
ратор может использовать групповую политику для на- ная «под ключ» система работает без сбоев несколько
стройки параметров и определения действий пользо- лет и никаких сюрпризов не преподносит?», – спросит
вателей и компьютеров. В отличие от локальной, груп- рядовой администратор сети, не желающий иметь лиш-
повую политику можно использовать для настройки ние проблемы. Вопрос, конечно, риторический, и для
правил, применяемых на заданном узле, в домене или каждого на него найдется свой ответ. Но все же, если
же подразделении Active Directory. вы как администратор гонитесь за стабильностью, бы-
В ближайшее время Microsoft предложит пользова- стродействием и крайне высокой надежностью, а глав-
телям несколько дополнительных программных моду- ное – исключительно личным комфортом, то переход
лей для обеспечения безопасности. Одним из них яв- на Windows Server 2003 может стать праздником.
ляется Secure Configuration Wizard (мастер создания за- Все же обойдемся без иронии. Презентация систе-
щищенных конфигураций) – дополнительный модуль мы, прошедшая несколько месяцев назад по всем круп-
для Windows Server 2003, помогающий автоматизиро- ным городам России, прошла более чем скромно. Обус-
вать настройку серверов с целью обеспечения макси- ловлено это было тем, что само слово «Server» уже пре-
мальной безопасности (с использованием функцио- дусматривает небольшой круг потенциально заинтере-
нальных ролей). сованных лиц и не требует такой глобальной рекламы,
Кроме того, Microsoft расширит спектр предлагае- какая, например, была перед выходом Windows XP осе-
мых шаблонов и рекомендаций (Patterns and Practices), нью 2001 года.
добавив к ним практические рекомендации по таким Также не стоит строить иллюзий на предмет новой
вопросам, как инфраструктура идентификации и инф- серверной ОС от Microsoft. Было бы глупо отрицать, что
раструктура мобильного доступа, что поможет пользо- сами разработчики не предполагают выпуск как минимум
вателям создавать и эксплуатировать защищенные си- двух-трех патчей, которые должны «залатать дыры», не-
стемы на основе Windows Server 2003. предусмотренные программистами как по части безопас-
Windows Server 2003 обладает рядом новых и усо- ности, так и по части просто стабильной работы системы.
вершенствованных функций для создания защищенных Все же есть несколько весьма впечатляющих дово-
серверных конфигураций на платформе Windows. Бла- дов в пользу Windows Server 2003, если сравнивать ее
годаря этим нововведениям заказчикам будет легче со- с Windows 2000. Сразу отметим, что производитель-
здавать безопасные конфигурации и управлять ими. В ность системы в общем плане повысилась на 10-15%.
частности, можно будет безопасно предоставлять дос- Скорость загрузки системы возросла на 20-30%. Коли-
туп в корпоративную сеть конечным пользователям, а чество ошибок стало значительно ниже, однако все же
также своим партнерам, поставщикам и клиентам. Ниже вызывают некоторые трудности небольшие программы,
перечислены некоторые функции, обеспечивающие по- к которым мы так привыкли. Например, ICQ в некото-
вышенную безопасность Windows Server 2003. рых случаях (опять же определить трудно, в каких имен-
 Значительно переработанные службы инфраструк- но) подключается к серверу Mirabilis только в режиме
туры открытых ключей (PKI) обеспечивают пользо- администратора. Пользователи же подключиться к ICQ
вателей простой системой управления сертифика- не могут. Эта проблема может решиться обеспечени-
тами, повышающей безопасность основанных на ем сетевого доступа к папке, где хранится сама про-
IPSec виртуальных частных сетей (VPN) и сетевых грамма для всех пользователей. Но все же не факт, что
коммуникаций, систем аутентификации, использую- это поможет.
щих беспроводные протоколы семейства 802.1x, И такие проблемы встречаются далеко не с одной
процессов входа в систему с использованием мик- ICQ. Приводить полный список в виде «программа –
ропроцессорных карточек, шифрующей файловой ошибка» смысла не имеет.
системы и других служб. По части игр, дорогие администраторы, тоже стоит
 Открытый защищенный протокол аутентификации заметить, что играть по сети в Quake в рабочее время
(Protected Extensible Authentication Protocol – PEAP) не получится – подобные игры теперь просто не рабо-
предлагает средства парольной аутентификации, тают под управлением Windows 2003. Правда, после
призванные повысить безопасность сетевых соеди- брожений по сетевым форумам, где «лучшие умы рос-
нений. PEAP идеально подходит пользователям, ко- сийской кибернетики» пытаются «научить» Windows за-
торым необходима возможность использования бес- пускать любимые игры, стало понятно, что Windows
проводной связи, но которые не обладают ресурса- 2003 – операционная система не обязательно сервер-
ми, необходимыми для построения полноценной ин- ная, но и домашняя. Во всяком случае при желании она
фраструктуры открытых ключей. может стать таковой.

54
безопасность

ЗАЩИТНИК СЕТИ

СЕРГЕЙ ЯРЕМЧУК
56
безопасность
Главной задачей администратора является обеспечение
бесперебойной работы компьютеров и безопасности ком-
пьютерной сети. Если для малых сетей, когда компьютеры
находятся в соседних помещениях, обычно обходятся ус-
тановкой и конфигурированием firewall на маршрутизато-
ре и антивирусом на каждом компьютере, то в больших
сетях задача усложняется. Уследить за происходящим в
подопечной сети в этом случае задача уже далеко не три-
виальная и требующая совсем другого подхода. Теперь
сисадмину, чтобы не бегать по этажам в поисках неисп-
равностей, желательно иметь систему удаленного мони-
торинга компьютеров. В целях же обеспечения безопасно-
сти, кроме установки firewall, необходимо использовать
системы обнаружения вторжения, позволяющие оценить
происходящее в сети в целом, не ограничиваясь только
защитой наиболее важных компонентов сети по отдельно-
сти. И желательно, чтобы не прерывать контроля за подчи-
ненной сетью в случае остановки сервера по какой-либо
причине, установить эту систему на отдельный компьютер.
В качестве последнего вполне может подойти любой из
списанных (с подходящей мощностью, естественно).
Настройка и отладка подобных систем – задача совсем
не простая и требующая много времени и сил для поиска
и подбора необходимых компонентов и чтения докумен-
тации и сбора всего этого воедино. Поэтому хотелось бы
иметь инструмент, позволяющий установить все одним
махом с удобной и понятной настройкой. Успех операци-
онной системы Linux во многом состоит и в том, что каж-
дый может собрать дистрибутив конкретно под свои нуж-
ды, а собрав, показать, естественно, другим. Нашелся сре-
ди того большого разнообразия и удовлетворяющий по-
ставленной выше задаче. На сайте, кроме ISO-образа дистрибутива, можно най-
Шведский дистрибутив Compledge Sentinel (http:// ти исходники, документацию и несколько дополнительных
compledge.com/sentinel/) размером всего 147 Мб предназ- пакаджей. Установка особой сложности не представляет,
начен для мониторинга работы компьютеров, аудита бе- необходимо просто заполнять запрашиваемые пункты для
зопасности сетей и обнаружения вторжения в компьютер- последующей настройки, после чего просто распакуется
ные сети. То есть представьте себе отдельный компью- архив с системой. Удобно, что в отличие от большинства
тер с установленной Linux-системой, который только тем дистрибутивов, предназначенных для администратора
и занимается, что отслеживает происходящее в контро- (ClarkConnect, SmoothWall, Astaro Security Linux), програм-
лируемой сети и в случае чего сигнализирует сисадмину, ма установки позволяет разбить диск вручную (при помо-
принимает меры по недопущению распространения даль- щи cfdisk) с последующим указанием точек монтирова-
нейшей угрозы. И самое главное, так как Sentinel пред- ния, а не автоматически уничтожая при этом все данные,
ставляет собой законченное решение, поэтому и усилий что позволяет установить эту систему второй для перво-
для первоначальной настройки необходимо приложить начального ознакомления. В дальнейшем монитор с кла-
минимум. Достаточно всего лишь установить его и запус- виатурой можно отключить и получать информацию при
тить необходимые сервисы. помощи веб-интерфейса. Для осуществления задуманно-
го имеется полный комплект необходимых приложений.
Nagios (http://www.nagios.org/) представляет собой
программу удаленного системного мониторинга, позво-
ляющую отслеживать ошибки в работе серверов и сер-
висов и выдавать собранную информацию через веб-
интерфейс, в том числе и на пейджер или сотовый те-
лефон посредством SMS и WAP, есть возможность
пользователю добавлять свои программы оповещения.
Nagios позволяет производить мониторинг таких сете-
вых сервисов, как SMTP, TELNET, SSH, HTTP, DNS,
POP3, IMAP, NNTP и многих других. Кроме этого, есть
возможность добавлять свои скрипты мониторинга и
реакции на определенные события. Управлять систе-

№11(12), ноябрь 2003 57


безопасность

мой мониторинга также можно не только локально, но


и удаленно, в том числе и с мобильного телефона че-
рез wap-интерфейс. Nagios после запуска контролиру-
ет работоспособность только локального компьютера,
для мониторинга остальных его необходимо предвари-
тельно настроить. Более подробно о настройке Nagios
читайте в статьях Андрея Бешкова [1, 2, 3].

Nagat (http://nagat.sourceforge.net/) – утилита веб-адми-


нистрирования Nagios, использующая php. В настоящее
время доступна только CVS-версия. Мне лично не очень
нравится, но многие сочтут ее более удобной, чем на-
стройка непосредственно в конфигурационных файлах.
Nessus (http://www.nessus.org) – относится к сканерам
обнаружения вторжения (remote security scanner) и при-

58
безопасность

№11(12), ноябрь 2003 59


безопасность
меняется для поиска уязвимостей и слабозащищенных в которые могут быть включены время, датчик, сигнатура,
сервисов. Основан на части кода от другого известного протокол, IP-адрес, TCP/UDP-порты, классификация и пр.
сканера портов nmap. Имеет клиент-серверную и модуль- OpenMosix (http://openmosix.sourceforge.net/) – прило-
ную архитектуру. В качестве сервера используется Unix- жение кластеризации для Linux, заставляющее несколь-
система, клиенты бывают как для Unix-машин, так и под ко компьютеров работать как один. В комплекте
Windows – NessusWX (имеется в комплекте Compledge Compledge Sentinel имеется четыре перекомпилирован-
Sentinel). Все уязвимости, о которых «знает» программа, ных ядра: два из которых передназначены для систем с
описываются в виде отдельных модулей на специально одним процессором и два – для многопроцессорных сис-
разработанном для этой цели языке NASL (Nessus Attack тем, одно из двух ядер имеет поддержку openMosix и одно
Scripting Language), которые можно добавлять по мере без таковой. Необходимое ядро выбирается при установ-
пополнения базы модулей. ке системы и в дальнейшем используется по умолчанию.
И для обеспечения работоспособности и доступа через
веб-интерфейс для настройки вышеописанных сервисов
имеется Apache c OpenSSL, PHP и MySQL (первоначаль-
ный пароль для доступа сompledge), которые используют-
ся для хранения событий ACID и получения информации
через защищенный веб-интерфейс. При этом система вы-
дает подробнейшую информацию по дням, протоколам, уз-
лам, портам, сигнатурам и пр. Вся необходимая информа-
ция для функционирования этих сервисов – пароли, IP-ад-
реса, расположение баз данных – вводится во время уста-
новки. И поэтому в дальнейшем по конфигурационным
Snort (http://www.snort.org) – cетевая cистема детекти- файлам лазить не придется, хотя для более тонкой настрой-
рования вторжения (NIDS), проверяющая сеть и выявля- ки каждого сервиса все-таки придется, предварительно
ющая попытки атак и сканирования. Распознаются рас- ознакомившись с документацией на сайте.
пространенные попытки осуществления атак buffer Что я могу сказать напоследок. Установка и настройка
overflows, CGI attack и др., а также практически все мето- каждого из вышеописанных приложений требует больших
ды сканирования и сбор «баннеров», т.е. информации о временных затрат и усилий, не говоря уже о необходимых
системах (fingerprinting). навыках, знаниях и желании этим всем заниматься. Но вре-
ACID – Analysis Console for Intrusion Databases (http:// мя обычно на стороне нападающего. Строить защиту по
www.andrew.cmu.edu/~rdanyliw/snort/snortacid.html) пред- принципу «а кому это нужно» или «времени предостаточ-
ставляет собой систему на основе языка PHP, предназна- но» – плохая идея. После того как компьютер будет подклю-
ченную для поиска и обработки базы данных инцидентов, чен к Интернету, сразу найдутся желающие покопаться в
замеченных при помощи программ защиты типа IDS и чужой информации. И в этой ситуации Compledge Sentinel
firewalls (например, в нашем случае Snort и tcpdump, есть может прийти на выручку. Он уже практически готов к бою.
вариант, анализирующий программы ipchains, iptables и Литература:
ipfw). Программа содержит интерфейс поиска предупреж- 1. Бешков А. Установка Nagios. – //Журнал «Системный
дений, соответствующих фактически любым критериям, администратор» №2(3), февраль 2003 г. – 6-14 с.
включая время прибытия, время сигнатуры, адрес/порт 2. Бешков А. Мониторинг Windows-серверов с помощью
источника/адресата, флаги, полезный груз, и т. д. ACID так- Nagios. Часть 1. – //Журнал «Системный администра-
же обеспечивает способность аннотировать и логически тор»№7(8), июль 2003 г. – 12-19 с.
группировать связанные события, удалять ложные и уже 3. Бешков А. Мониторинг Windows-серверов с помощью
обработанные предупреждения. Все это затем выводится Nagios. Часть 2. – //Журнал «Системный администра-
в виде разнообразных статистических отчетов и графиков, тор»№8(9), август 2003 г. – 12-23 с.

ВТОРОЙ СЕМИНАР
СИСТЕМНЫХ АДМИНИСТРАТОРОВ И ИНЖЕНЕРОВ SYSM.02
В середине декабря 2003 года портал SysAdmins.RU проводит второй Семинар системных администраторов и инже-
неров – SYSM.02. Первая подобная встреча проводилась в июле этого года (см. журнал «Системный администратор»
№9(10), 2003 г). При планировании SYSM.02 организаторы учитывают все позитивные и негативные моменты перво-
го Семинара. К участию приглашаются системные и сетевые администраторы, инженеры, IT-директора и аналитики,
представители прессы. На мероприятии будут обсуждаться многие проблемы IT-рынка, планирование карьеры IT-
специалистом, многие юридические аспекты и правовые вопросы, так или иначе связанные с работой системных
адмнистраторов и инженеров. Также будет проведено учредительное собрание профсоюза «Работников сферы ин-
формационных технологий». Более подробную информацию можно получить на портале SysAdmins.RU, на офици-
альном сайте Семинара http://sysm.ru и в декабрьском номере журнала.

60
безопасность

УДОБНЕЕ, ЭФФЕКТИВНЕЕ, ЛУЧШЕ:

ПАВЕЛ ЗАКЛЯКОВ

62
безопасность
Описанный в статье [1] способ настройки IDS Snort, при Занесение данных из IDS Snort в БД
котором логи ведутся в текстовый файл, имеет как поло- Для начала мы возьмём относительно простую и свобод-
жительные моменты, так и отрицательные. Среди поло- но распространяемую БД MySQL. Её выбор обоснован
жительных моментов можно назвать простоту. С тексто- большей распространённостью среди простых БД и на-
выми файлами человек может работать «напрямую», про- личием достаточного числа литературы к ней на русском
сматривая их в текстовом редакторе, используя различ- языке [5].
ные возможности их обработки с помощью средств shell Напомню основные моменты по установке Snort (под-
и perl. Удобства очевидны: не требуются дополнительные робнее см. [1]). Как и обычно, скачиваем и ставим после-
программы и прочие утилиты. Однако если смотреть шире, дний Snort, если он не стоит:
то по мере увеличения возможностей СОА эти преиму-
щества обращаются в недостатки. Приведём один такой # 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
этого: «А зачем изобретать велосипед, не проще ли вос-
пользоваться уже какой-нибудь готовой СУБД для веде- Распаковываем скачанное куда-нибудь, например в
ния логов в неё?». Дополнительные плюсы от использо- директорию /progi/snort-2.0.2, и запускаем там конфигу-
вания СУБД очевидны: во-первых, СУБД стандартизиро- рирование с опцией --with-mysql:
вана, во-вторых, легче решается вопрос переноса дан-
ных в другую СУБД, если у неё вдруг окажутся лучшие #./configure --with-mysql
математические возможности по анализу данных. Также
в случае использования нескольких сенсоров (сбора дан- не забываем про библиотеку libpcap. Если она не стоит и
ных с нескольких узлов) с СУБД проблем не будет, а с выдаётся ошибка:
текстовыми файлами может возникнуть путаница в име-
нах лог-файлов, либо простои из-за периодических бло-
кировок одного и того же лог-файла, так как одновремен-
но данные из двух мест туда писаться не могут.
На наше счастье все эти проблемы по более компакт-
ному хранению информации, более удобному её анализу
и организации многопользовательского доступа уже ре- копируем со второго диска (RedHat v.7.3) и ставим:
шены в многопользовательских реляционных базах дан-
ных. (Под пользователями в данном случае можно пони- # rpm -ihv libpcap-0.6.2-12.i386.rpm
мать все процессы на одном или нескольких компьюте-
рах, желающие работать в один и тот же момент с БД.) Если БД MySQL у вас не установлена, то вам выдаст-
Далее мы попытаемся настроить Snort для работы с ся следующее сообщение в процессе конфигурирования:
БД 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.

№11(12), ноябрь 2003 63


безопасность
Обладатели других версий Linux могут установить себе var HOME_NET [10.1.1.0/24,192.168.1.0/24]
БД самостоятельно, при этом, наверное, будет лучше ска- var RULE_PATH rules
чать последнюю версию прямо с сайта MySQL [6].
Решение всех возникших проблем при этом ложит- Вторая и четвёртые части у нас не изменились, а в
ся на ваши плечи. Мы же пишем все нужные файлы для третьей, отвечающей за вывод данных, как раз и будут
MySQL в отдельную директорию и ставим их все вмес- главные изменения. Там мы укажем, что необходимо вес-
те, так как это проще, чем соблюдать последователь- ти вывод в БД MySQL.
ность установки, дабы избежать ошибок с зависимос- Мы находим закомментированные строчки:
тями о необходимости установки того rpm перед этим
или после этого. # 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
/etc/rc.d/init.d/mysqld в директориях /etc/rc.d/rc?.d на запуск
и останов, либо запускаем:
Раскомментируем первую, нужную нам для MySQL
# chkconfig mysqld on строчку, или сделаем её копию и укажем имя БД, пароль
и пользователя для доступа к ней, которые зададим пос-
который делает это за нас. (Замечание: в некоторых не- ле. Пусть пользователь БД будет называться snort, пароль
rpm поставках mysqld называется mysql.) будет ваш_пароль№1, пользоваться мы будем БД snort.
Далее либо перезапускаемся, либо запускаем MySQL Имя нашего хоста будет localhost.
руками: В итоге получим:

# /etc/rc.d/init.d/mysqld start output database: log, mysql, user=snort ↵


password=âàø_ïàðîëü¹1 dbname=snort host=localhost

Как легко догадаться, БД может называться как угод-


но, пароль и имя пользователя могут быть любыми, лишь
бы они соответствовали учётным записям в БД, кото-
рые мы сейчас создадим. Также БД может быть запуще-
на и на другом компьютере, но об этом мы поговорим,
Далее повторно (если у вас не был установлен MySQL) когда будем строить распределённую систему сенсоров
запускаем конфигурацию из директории, где у нас уста- для обнаружения распределённых телекоммуникацион-
новлен дистрибутив Snort. ных атак.
Для того чтобы делать записи в БД, нужно, чтобы в
# ./configure --with-mysql этой самой БД существовала не только необходимая БД
с соответствующим именем, но и были созданы таблицы,
Запускаем компиляцию: куда, собственно, и будут добавляться записи. Если мы
прочитаем файл README.database, на который есть ссыл-
# make ка в комментариях к строчкам выше, то оттуда мы можем
узнать, что можно вести логи не только в MySQL, кото-
И устанавливаем Snort: рый мы выбрали вначале, но и в:
 PostgreSQL;
# make install  любую unix ODBC БД;
 MS SQL Server;
Далее из snortrules-stable.tar.gz копируем правила  Oracle.
(файлы *.rules) в /etc/snort/rules. Остальные файлы по-
мещаем в /etc/snort. После этого редактируем /etc/snort/ Список вполне неплохой.
snort.conf. Если почитать README.database внимательно, то там
Точная настройка и разбор snort.conf-файла вообще будет написано практически всё, чем мы займёмся даль-
заслуживает отдельной статьи. ше, правда, на английском языке.
Основные моменты, что мы меняли в [1]: Если БД MySQL у вас установлена впервые или вы её
В первом разделе это были переменные: ранее не настраивали, то вам в целях безопасности при-
дётся немного поднастроить её сейчас, в частности, за-
var HOME_NET 123.45.45.45 дать пароль на суперпользователя БД – root (root для
MySQL и root для системы – это разные пользователи).
или для диапазона адресов: Для этого подключаемся к БД от имени пользователя root:

64
безопасность
# mysql -u root Это долго и неудобно, велика вероятность ошибки. По-
этому лучше воспользоваться уже готовым cписком ко-
Далее нам выдастся обычное приглашение уже самой манд, благо для популярных БД они поставляются с дист-
базы данных. рибутивом Snort в директории contrib.
Нужный нам файл называется create_mysql. Мы огра-
ничимся лишь быстрым просмотром этого файла для оз-
накомления, а если у вас будет своя, уникальная БД, тог-
да вам лучше взять подобный файл и разобраться со
структурой таблиц досконально, а пока я не вижу смысла
придумывать велосипед.
Команды следует набирать после приглашения «mysql>»: Создать описанную структуру можно командой:

mysql> set password for ↵ # mysql -D snort -u root ↵


'root'@'localhost'=password('âàø_ïàðîëü¹2'); -p < /progi/snort-2.0.2/contrib/create_mysql

в ответ должно выдастся что-то вроде: Однако мы сделаем это немного по-другому, в инте-
рактивном режиме, чтобы было более понятно. Для этого
Query OK, 0 rows affected (0.39 sec) файл create_mysql мы помещаем в директорию, из кото-
рой будем запускать MySQL, чтобы он его видел без ука-
Затем создаём БД snort (это нужно и тем, у кого MySQL зания лишних путей.
уже давно настроена): Запускаем:

mysql> create database snort; # mysql -u root -p

Иногда слова CREATE DATABASE пишут заглавными Введя ваш_пароль№2, в приглашении БД указыва-
буквами, но в данном случае это не важно. Далее следу- ем, что мы хотим подключиться и работать с БД snort.
ет выйти из БД командой:
mysql> connect snort
mysql> exit
После успешного подключения указываем, что нам не-
Теперь, после того как мы установили пароль для за- обходимо выполнить содержимое файла create_mysql, то
хода в БД, нам следует набирать пароль при входе в БД и есть фактически создать нужную нам структуру таблиц.
заходить уже другой командой, с лишним ключом «-p»,
говорящим о необходимости запрашивать пароль: mysql> source create_mysql

# mysql -u root -p В ответ на это мы должны увидеть множество строчек


вида:
на запрос пароля при входе следует вводить «ваш_па-
роль№2», заданный выше. Далее необходимо создать Query OK, 0 rows affected (0.00 sec)
пользователей, от имени которых мы будем работать с БД, Query OK, 1 row affected (0.00 sec)
задать им права на выполнение тех или иных действий,
пароли и структуру таблиц БД snort. Количество таблиц, означающих, что выполнение той или иной SQL-коман-
которые использует Snort, велико для того, чтобы зада- ды прошло успешно. В директории /var/lib/mysql/snort
вать их все вручную: должны появиться файлы, соответствующие созданным
 schema таблицам.
 event Далее нам необходимо создать пользователя snort, от
 signature имени которого Snort будет работать с БД, задать ему па-
 sig_reference роль и вручить ему права на те или иные действия с БД
 reference snort. Например, на добавление новых записей в табли-
 reference_system цы и пр.
 sig_class Явной команды вроде adduser для добавления пользо-
 sensor вателей, как в Linux, здесь нет, объясняется это тем, что
 iphdr сведения о пользователях хранятся также в самой БД в
 tcphdr её таблицах, поэтому при задании каких-либо атрибутов
 udphdr пользователю, то есть его прав или пароля, пользователь
 icmphdr автоматически вносится в БД. Именно исходя из сообра-
 opt жений безопасности по доступу к таблице с данными
 data пользователей мы выше ввели пароль для суперпользо-
 encoding вателя БД.
 detail Вручаем права пользователю snort:

№11(12), ноябрь 2003 65


безопасность
mysql> grant CREATE,INSERT,SELECT,DELETE,UPDATE ↵ Параметр, указывающий на каком интерфейсе будет
on snort.* to snort;
слушать Snort: «-i eth0», можно опустить.
для того чтобы можно было работать с БД, локально за- Замечание: если у вас пароль, указанный в snort.conf
пускаем всё то же самое, но для snort@localhost: (ваш_пароль№1), не соответствует заданному в БД для
пользователя snort (тоже ваш_пароль№1) из-за ошибки
mysql> grant CREATE,INSERT,SELECT,DELETE,UPDATE ↵ в написании, то вам может выдасться в процессе запуска
on snort.* to snort@localhost;
Snort сообщение:
Далее, забегая вперёд, создадим ещё одного пользо-
вателя и вручим ему права только на просмотр БД. В прин- ERROR: database: mysql_error: Access denied for user:
'snort@localhost' (Using password: YES)
ципе, если этим пользователем будет php-скрипт на на-
шем компьютере, достаточно одной (второй) записи для Если вы следовали изложенному выше, у вас проблем
локального доступа. Пользователя назовём acidviewer, а быть не должно.
из прав дадим ему те же, что и выше, кроме права В случае успешного ручного запуска создаём скрипт
DELETE. для автоматизации этого процесса при загрузке компью-
тера. Скрипт назовём snortd и поместим его в /etc/rc.d/init.d:
mysql> grant CREATE,INSERT,SELECT,UPDATE ↵
on snort.* to acidviewer; #!/bin/bash
mysql> grant CREATE,INSERT,SELECT,UPDATE ↵ #
on snort.* to acidviewer@localhost; # snortd Start/Stop the snort IDS daemon.
#
# chkconfig: 2345 79 11
Теперь зададим пароли для созданных аккаунтов. Так # description: snort is a lightweight network intrusion
как информация о паролях хранится в БД mysql, а мы # detection tool that currently detects more than 1100 host
# and network vulnerabilities, portscans, backdoors, and more.
сейчас работаем с БД snort, переключимся на первую. #
# June 10, 2000 -- Dave Wreski <dave@linuxsecurity.com>
# - initial version
mysql> connect mysql #
# July 08, 2000 Dave Wreski <dave@guardiandigital.com>
# - added snort user/group
Поскольку аккаунтов для одного и того же пользова- # - support for 1.6.2
теля два, один для доступа извне, а другой с localhost,
# Source function library.
то пароли будут задаваться также два раза. Можно за- . /etc/rc.d/init.d/functions
дать разные пароли, но будет велик риск запутаться. Па-
# Specify your network interface here
роль ваш_пароль№1 используется тот, что мы указали INTERFACE=eth0
выше при редактировании файла snort.conf в третьей
# See how we were called.
секции. Пароль для acidviewer следует придумать, назо- case "$1" in
вём его ваш_пароль№3. start)
echo -n "Starting snort: "
# ifconfig eth0 up
mysql> set password for ↵ daemon /usr/local/bin/snort -o -i $INTERFACE ↵
'snort'@'localhost'=password('âàø_ïàðîëü¹1'); -d -D -c /etc/snort/snort.conf
mysql> set password for 'snort'@'%'=password('âàø_ïàðîëü¹1'); touch /var/lock/subsys/snort
mysql> set password for ↵ sleep 3
'acidviewer'@'localhost'=password('âàø_ïàðîëü¹3'); if [ -f /var/log/snort/alert ]
mysql> set password for ↵ then
'acidviewer'@'%'=password('âàø_ïàðîëü¹3'); rm /var/log/snort/alert
fi
echo
Далее сбрасываем привилегии и выходим. ;;
stop)
echo -n "Stopping snort: "
mysql> flush privileges; killproc snort
mysql> exit rm -f /var/lock/subsys/snort
echo
Сейчас Snort полностью готов для того, чтобы вести ;;
restart)
логи в созданную нами БД. $0 stop
Замечание: дотошный читатель скажет, что пользова- $0 start
;;
телю snort мы задали несколько больше привилегий, чем status)
ему это необходимо. Сделано это было специально с це- status snort
;;
лью не запутывать читателя лишней информацией и лиш- *)
ними пользователями. Поэтому два пользователя были echo "Usage: $0 {start|stop|restart|status}"
exit 1
объединены в одного и от имени snort будет работать не esac
только Snort, но и программа (скрипт), с помощью кото-
exit 0
рой мы будем просматривать БД и, возможно, редакти-
ровать её. Как раз для редактирования расширенные пра- Замечание: закомментированная строчка «ifconfig
ва и нужны. eth0 up» имеет следующий смысл: если при каких-то ус-
Пробуем запустить Snort вручную. ловиях (смена номера запуска или какой-то сбой при за-
пуске network) Snort будет запускаться до запуска сети
# /usr/local/bin/snort -o -i eth0 -d -c /etc/snort/snort.conf и поднятия интерфейса, то при её наличии ошибки не

66
безопасность
будет. Повторное поднятие уже поднятого интерфейса # tail -f èìÿ_ýòîãî_ôàéëà
ошибок давать не должно. Строчку «rm /var/log/snort/alert»
и несколько соседних можно закомментировать, если вы для просмотра вновь появляющихся записей или:
не хотите, чтобы у вас при запуске этот файл начинался
с нуля. # cat èìÿ_log_ôàéëà
Далее, либо руками прописываем мягкие ссылки на
/etc/rc.d/init.d/snortd в директориях /etc/rc.d/rc?.d на запуск для просмотра содержимого всего файла. Для работы с
и останов, соблюдая последовательность запуска, чтобы БД нам необходимо наличие большего объёма знаний.
Snort запускался после MySQL, например: Счастлив тот, кто знает СУБД как свои пять пальцев, – он
может смело пропустить несколько абзацев ниже. Со все-
# 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
snort с помощью SQL-запросов.
либо запускаем: Для начала нам необходимо подключиться к СУБД
MySQL. Сделать это можно как от имени суперпользо-
# chkconfig snortd on вателя root, так и от имени заведённых пользователей
snort и acidviewer. Выберем пользователя snort и выпол-
или ним команду:

# chkconfig --level 3 snortd on # mysql -u snort -p

(сделать ссылки только для уровня 3), который делает это В качестве пароля необходимо ввести ваш_пароль№1.
за нас. Вся последующая работа с БД ведётся с помощью
Автоматизация этого процесса не даёт гарантии того, SQL-запросов. Для получения более-менее наглядного
что запуск Snort окажется после MySQL, а останов на- представления о таблицах с данными мы выполним не-
оборот, поэтому этот момент следует проконтролировать сколько простых SQL-запросов. Более глубокое изуче-
вручную, посмотрев, чтобы номер у S??snortd был боль- ние языка запросов читатели могут выполнить самосто-
ше, чем у S??mysqld, а номер у K??snortd был меньше, ятельно. После того как мы убедимся, что данные в таб-
чем у K??mysqld. лицах есть, мы перейдём к настройке средств более
Напомню, что в дистрибутиве Snort, в директории удобного просмотра БД, а именно ACID. Первая коман-
contrib имеется файл S99snort, аналогичный snortd. да, которую мы выполним, покажет нам, какие БД име-
В случае успешного выполнения вышенаписанных ются в нашей СУБД.
действий по автоматизации процесса запуска Snort дол-
жнен запуститься либо при запуске вручную скрипта ав- mysql> SHOW DATABASES;
томатизации, как это будет сделано ниже, либо после
перезапуска компьютера.
В любом случае в ответ на ваши действия вы должны
увидеть зелёное ok, а на команду status вам должно вы-
даваться, что Snort выполняется.

Замечание: регистр команд не имеет значения, MySQL


Если это так, то половина нужного нам результата обработает запрос, даже если вы смешаете регистры,
получена, и мы смело можем переходить ко второй ча- однако мы будем писать команды в верхнем регистре, как
сти, а именно к настройке и изучению средств просмот- стандарт де-факто при использовании языка SQL. Коман-
ра БД snort, куда запущенный нами Snort исправно за- ды можно вводить в несколько строчек, концом команды
писывает свои замечания о проходящем через него тра- считается знак «;», а не символ перевода строки. Это
фике. очень удобно при написании длинных команд, так как не
теряется наглядность.
Просмотр содержимого БД snort В ответ на запрос мы должны увидеть табличку с тре-
Если компьютер с установленным и правильно запущен- мя БД: mysql, snort и test.
ным Snort подключить к сети Интернет напрямую, то есть Выберем БД snort:
с использованием реального IP-адреса, то менее чем че-
рез несколько минут в БД snort появятся новые записи. mysql> CONNECT snort;
(В последнее время львиную долю этих записей состав-
ляют ICMP-сканирования.) Появление новых записей в и посмотрим, какие таблицы у нас имеются:
БД не так наглядно для конечного пользователя, как если
бы логи велись в файл, а мы бы запустили: mysql> SHOW TABLES;

№11(12), ноябрь 2003 67


безопасность
Замечание 1: нумерация событий для разных сенсоров
не сквозная, поэтому первичным ключом в данной табли-
це являются два поля sid и cid. Это можно заметить, если
внимательно посмотреть содержимое файла create_mysql.
Замечание 2: как легко догадаться, сенсоров может
быть несколько, если получится, то этот случай мы обсу-
дим в следующих статьях.
Замечание 3: давать команду для показа всех строк
данной таблицы:

mysql> SELECT * FROM event;

не имеет смысла, так как через некоторое время число


записей в данной таблице может стать очень большим. При
этом вывод её на экран может занять несколько минут.
Чтобы понять, что такое сигнатура номер 2 или тот
Как раз все те, которые мы создавали ранее. номер, что будет у вас в таблице, обратимся к таблице
Чтобы посмотреть заголовки столбцов выбранной singature и посмотрим содержимое строки с sig_id=2;
нами таблицы event, дадим команду:
mysql> SELECT * FROM signature WHERE sig_id=2;
mysql> SHOW COLUMNS FROM event;
Если нам не нужна лишняя информация, то мы можем
либо её не выводить, например, выполнив запрос только на вы-
вод содержимого полей sig_id и sig_name следующим об-
mysql> DESCRIBE event; разом:

mysql> SELECT sig_id,sig_name FROM signature WHERE sig_id=2;

Как мы видим для моего случая, это «STEALTH ACTIVITY


(SYN FIN scan) detection».

По интуитивным соображениям можно понять, что cid


отвечает за нумерацию событий. С помощью команды:

mysql> SELECT * FROM event WHERE cid<10;


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

mysql> SELECT event.cid,signature.sig_name,event.timestamp ↵


FROM event,signature ↵
WHERE event.signature=signature.sig_id AND cid<10;

Вот результат её выполнения.

Полученная таблица содержит 4 столбца с заголовка-


ми, которые мы видели ранее:
 sid или sensor ID – тот сенсор, с которого была получе-
на информация;
 cid или ID counter – грубо говоря, номер события.
 signature – номер сигнатуры, которая была обнаружена;
 timestamp – временная метка, чтобы знать, когда про-
изошло событие.

68
безопасность
Обратившись к [5], можно научиться выполнять и бо- Если вы установили правильный пароль, то при попыт-
лее виртуозные запросы. В таблице iphdr для каждого ке обращения к директории phpmyadmin веб-сервера, под-
события по его cid точно так же можно узнать IP-адрес держивающего php, должно выдасться следующее:
источника атаки и на какой адрес она была нацелена.
Моё мнение таково, что хороший системный админи-
стратор или специалист по информационной безопас-
ности должны уметь выполнять простые SQL-запросы в
командной строке, как это было описано выше. Конеч-
но, никто этого делать не заставляет, и большинство из
нас далеки от совершенства, выше было рассказано
про то, без чего по-хорошему никак не обойтись. Лю-
бая, будь то самая удобная графическая оболочка при
попытке задания более сложных запросов неминуемо
приведёт вас к написанию SQL-запросов вручную. Не-
смотря на то что язык SQL лучше знать, чем не знать,
не хотелось бы упускать из вида те инструменты, кото-
рые значительно упрощают нашу жизнь, в частности,
программу phpMyAdmin. Многих должен порадовать тот факт, что поддержива-
ется русский язык и есть выбор различных кодировок. Да-
phpMyAdmin лее, если щёлкнуть на «Базы данных», должны высве-
Для работы phpMyAdmin [8] и ACID необходимо, чтобы титься те БД, которые имеются в MySQL.
были установлены пакеты 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], и проверки хеш- Щёлкая на Snort, мы выбираем эту БД и попадаем к
функции: следующему окну, где сразу видны названия тех таблиц,
которые содержатся в этой БД.
# md5sum phpMyAdmin-2.5.4-php.tar.gz

(MD5: 76fc7216aa2f132888c7173a6668af46)

содержимое архива следует поместить в папку для php-


скриптов. Если не следовать досконально файлу
Documentation.txt и закрыть глаза на некоторые вопросы
безопасности, то удобнее будет создать директорию
phpmyadmin, например, в /var/www/html и содержимое
phpMyAdmin-2.5.4, то есть всё то, что находится в архиве,
поместить туда (в /var/www/html/phpmyadmin). Далее сле-
дует внести небольшое исправление в /var/www/html/
phpmyadmin/config.inc.php в строку:

$cfg['Servers'][$i]['password'] = '';

указав там свой пароль от БД:

$cfg['Servers'][$i]['password'] = 'âàø_ïàðîëü¹2';

Остальные настройки, как host, port, user и пр., менять Щёлкая на название таблицы event слева, получаем
не стоит, так как по умолчанию всё должно работать. информацию об этой таблице:

№11(12), ноябрь 2003 69


безопасность
Соответственно, если изменить запрос, например, на:

mysql> SELECT event.cid,signature.sig_name,event.timestamp ↵


FROM event,signature ↵
WHERE event.signature=signature.sig_id AND cid<10;

мы получим тот же результат, что и ранее мы получали


через консольного клиента. Именно поэтому, какой бы
оболочка удобной ни была, следует знать SQL, так как
это основа работы с БД.
Надеюсь, что просмотр содержимого БД двумя вы-
шеописанными способами не показался вам чудовищ-
но сложным. Наоборот, я старался сделать это как мож-
но проще, чтобы от слов «БД» у вас не возникали мыс-
ли о «чёрном ящике» за семью печатями и не шли му-
рашки по коже. Надеюсь, что мне удалось убедить тех,
кто ранее не был знаком с БД, что это не есть плохо,
когда логи хранятся в БД. Их можно также легко про-
сматривать, если не сказать, что даже с большим чис-
Далее, внизу, SQL-запрос в окошке оставляем без лом удобств, чем если бы они были в обычном тексто-
изменения и жмём кнопку «Пошёл». После чего у нас на вом файле.
экран выводится содержимое нашей таблицы. После того как мы убедились, что наша БД содержит
информацию, попытаемся настроить специализирован-
ные и более удобные средства просмотра БД, а именно
ACID. Продвинутые читатели, если их не устроит ACID,
могут также пропустить всё, что говорится ниже, и само-
стоятельно «изобрести велосипед» не хуже. Со всеми же
остальными начнём настраивать уже готовый пакет –
ACID, поставляемый вместе с дистрибутивом Snort (в ди-
ректории contrib).

ACID
ACID [10] расшифровывается как Analysis Console for
Incident/Intrusion Databases и дословно переводится как
консоль для анализа баз данных с инцидентами/атаками/
вторжениями. В общем, для нашего случая это то, что
доктор прописал, тем более что данная программа была
разработана координационным центром CERT [11] как
часть проекта AIRCERT [12].
Задав себе повторно тот же, что и ранее, вопрос, а имен- ACID из себя представляет набор php-cкриптов, спо-
но: «Что за событие означает сигнатура номер 2?», мы мо- собных выполнять различные функции, в том числе на-
жем также просто щёлкнуть на имя таблицы signature слева и чиная с формирования запросов на получение данных
увидеть параметры этой таблицы, затем внизу, не меняя SQL- из БД аналогично тому, как это мы делали ранее, и за-
запроса в окошке, нажав на кнопку «Пошёл», получаем со- канчивая декодированием пакетов с целью их более
держимое первых 30 строк, среди которых находим нужную. удобного визуального восприятия и подсчётом статис-
тических данных.
Содержимое БД при этом может формироваться не
только за счёт системы обнаружения атак, но также мо-
жет пополняться данными с различных межсетевых экра-
нов и средств сетевого мониторинга.
Для того чтобы наглядно оценить удобство исполь-
зования данного средства, необходимо также иметь ка-
кой-либо из установленных веб-серверов с поддержкой
php, например, всё тот же apache. Плюс необходимо
иметь несколько дополнительных средств, нужных для
работы ACID:
 ADODB [13];
 JpGraph [15];
 PHPlot [16];
 GD [17].

70
безопасность
«ADODB – это абстрактный класс доступа к базам В именах директорий gd-2.0.15, phplot-4.4.6 убираем
данных, написанный на PHP» [14]. номера версий либо делаем мягкие ссылки на эти дирек-
«Для тех, кто в танке, поясню на примере. Предполо- тории:
жим, вы написали скрипт под MySQL, и тут заказчик го-
ворит вам, что хостинг меняется, и там есть только # cd /var/www/html
# mv gd-2.0.15 gd
PostgreSQL. # mv phplot-4.4.6 phplot
Если вы не использовали класс абстрактного доступа
к базам данных, то вам пришлось бы: или
 заменить весь код работы с MySQL на postgreSQL;
 переписать SQL-запросы (так как есть отличия). # cd /var/www/html
# ln -s gd-2.0.15 gd
# ln -s phplot-4.4.6 phplot
Если бы вы использовали абстрактный слой досту-
па к БД, то вам скорее всего не пришлось бы менять Напоминание: для работы ACID необходимо наличие
php-код (только в одном месте указали бы, что исполь- установленных пакетов php и php-mysql (подробнее см.
зуете PostgreSQL) и изменить SQL-запросы (хотя иног- выше).
да и это не понадобилось бы). Я намеренно в этом опи- Далее следует настроить ACID на работу с нашей БД
сании использовал фразу «абстрактный класс доступа и показать ему, куда мы скопировали дополнительные па-
к БД», поскольку ADODB – не единственный подобный кеты, для этого в файле /var/www/html/acid_conf.php не-
класс. Наиболее известные конкуренты: Pear::DB и обходимо изменить переменные:
Pear::MDB» [14].
JpGraph – это графическая библиотека для PHP, зна- $DBlib_path = "../adodb";
$alert_dbname = "snort";
чительно упрощающая рисование различных графиков и $alert_user = "snort";
диаграмм, позволяющая это делать с минимумом кода. $alert_password = "âàø_ïàðîëü¹1";
$ChartLib_path = "../jpgraph";
При этом можно рисовать как черновые наброски, так и
очень точные графики, в том числе и с указанием необ- Остальные переменные проще настроить по мере не-
ходимых погрешностей. обходимости, у большинства читателей это не должно
PHPLOT – фактически то же самое, что и JpGraph, вызвать проблем, так как ACID очень дружелюбен и по-
позволяет рисовать графики. Требует наличия библио- чти всегда указывает, что и где надо править в случае,
теки GD. если ему что-то не нравится.
GD – это библиотека ANSI C, необходимая для дина- Далее обратимся по адресу: http://localhost/acid/. При
мического создания картинок. GD может создавать кар- первом запуске ACID нам сообщит, что дополнительные
тинки в различных форматах, в том числе в 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]
d8c49614393fa05ac140de349f57e438 acid-0.9.6b23.tar.gz
78aac17c7fd1d0e0f6685153facb8c36 adodb394.tgz
6ededf633b4fd054662ec123c7825fbb gd-2.0.15.tar.gz Для их создания нам необходимо нажать на «Setup
ad78bd1658e3983bb6afbc074f029698 jpgraph-1.13.tar.gz page». После чего у нас отобразится следующее окно:
8a5b34e09fa29f20e31814cbd8c0d0b5 phplot-4.4.6.tar.gz

Содержимое архивов помещаем в /var/www/html:

# 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

Для JpGraph создаём директорию /var/www/html/jpgraph


и содержимое архивной поддиректории src из архива по-
мещаем туда.

# tar -zxvf jpgraph-1.13.tar.gz -C /var/www/html


# mkdir /var/www/html/jpgraph В котором следует нажать на кнопку «Create ACID AG».
# mv /var/www/html/jpgraph-1.13/src/* /var/www/html/jpgraph
# rm -rf /var/www/html/jpgraph-1.13 После её нажатия у нас отобразится окно:

№11(12), ноябрь 2003 71


безопасность
нам пользователя acidviewer с меньшими правами. Сей-
час мы доведём начатое до конца.
Для начала скопируем acid:

# cp -R /var/www/html/acid /var/www/html/acidviewer

Далее отредактируем файл /var/www/html/acidviewer/


acid_conf.php, заменив в нём:

$alert_user = "snort";
$alert_password = "âàø_ïàðîëü¹1";

на

$alert_user = "acidviewer";
$alert_password = "âàø_ïàðîëü¹3";

Интерфейс и кнопки по удалению записей останутся,


но при их активации будет выводиться сообщение с ошиб-
В первых строчках мы можем прочитать, что в на- кой о том, что у пользователя недостаточно прав для уда-
шей БД (snort) дополнительно были созданы четыре таб- ления. Создание данного аккаунта удобно тем, что вы
лицы: можете его давать вашим знакомым администраторам или
 acid_ag; другим людям для просмотра с меньшей опасностью по-
 acid_ag_alert; терять записи в вашей БД. Обращаться к нему следует
 acid_ip_cache; http://localhost/acidviewer/, естественно, вместо localhost
 acid_event. следует писать ваш адрес. И второе, чтобы кто попало
через веб-интерфейс не заходил к вам на сервер и не
После этого Snort готов к работе. Либо нажимаем в смотрел ваши данные в ACID, создадим пользователей с
конце этой страницы на «Main page», либо опять набира- паролями на доступ к acid и acidviewer. Для этого созда-
ем адрес: http://localhost/acid/. дим директорию, где будет храниться файл с паролями,
Если у вас БД маленькая, то страница должна отобра- например /usr/lib/apache/passwords.
зиться сразу, если же БД у вас большая, например, более
полугода, то тогда придётся подождать вплоть до несколь- # mkdir /usr/lib/apache/passwords
ких минут. В конце у вас должна выводиться картинка,
похожая на следующую: Далее, если в этой директории у вас нет файла с па-
ролями и таких пользователей, создадим файл и пользо-
вателей. Вначале это будет пользователь admin с паро-
лем ваш_пароль№4. Пароль следует ввести после соот-
ветствующего приглашения.

# htpasswd -c /usr/lib/apache/passwords/passwords admin

Опция «-c» означает create (создать файл), указывайте


её, если у вас нет файла /usr/lib/apache/passwords/
passwords.
Далее добавим второго пользователя view с паролем
ваш_пароль№5:

# htpasswd /usr/lib/apache/passwords/passwords view

Не забудьте про необходимую безопасность для ва-


шего узла, задав соответствующие атрибуты файлу и
директории, где он лежит, чтобы файл не был доступен
любой программе и любому локальному пользователю.
Затем необходимо внести правку в /etc/httpd/conf/
Если это так, то вы правильно всё сделали. httpd.conf, дописав туда следующее:
Далее советую вам сделать два необязательных, но
полезных действия, а именно: создать ещё один адрес с <Directory "/var/www/html/acid">
AuthType Basic
правами только для просмотра и задать пароли на доступ AuthName "commentline1"
для обоих. AuthUserFile /usr/lib/apache/passwords/passwords
Require user admin
Во время работы с БД мы уже создали необходимого AllowOverride None

72
безопасность
</Directory> В следующих статьях я попробую рассказать о неко-
<Directory "/var/www/html/acidviewer"> торых особенностях работы и настройки Snort, в частно-
AuthType Basic сти о возможности подключения нескольких сенсоров.
AuthName "commentline2"
AuthUserFile /usr/lib/apache/passwords/passwords
Require user view
AllowOverride None
Литература, ссылки:
</Directory> 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.pdf
секции. Иначе может возникнуть ситуация, когда, напри- 4. Snort Installation Manual on RedHat 9.0: http://
мер, для http-доступа у вас пароль спрашиваться будет, www.Snort.org/docs/Snort_acid_rh9.pdf
а для https – нет, или наоборот. 5. Л.Аткинсон. MySQL. Библиотека профессионала: Пер.
В переменной AuthName можно записать любую ин- с англ. – М.: Издательский дом «Вильямс», 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://
необходимо уведомить apache об этих изменениях, про- www.phpmyadmin.net
сто перезапустив его командой: 9. Ссылка на одно из зеркал, откуда можно скачать
phpMyAdmin: http://unc.dl.sourceforge.net/sourceforge/
# /etc/rc.d/init.d/httpd restart 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.gz
Если после этого у вас при заходе запрашивается па- 19. http://phplens.com/lens/dl/adodb394.tgz
роль (не забудьте сбросить кеш) и всё работает, то статья 20. http://members.chello.se/jpgraph/jpgdownloads/jpgraph-
удалась и можно сказать, что дальнейшее изучение ACID 1.13.tar.gz
лучше выполнить самостоятельно с помощью «метода на- 21. http://ftp1.sourceforge.net/phplot/phplot-4.4.6.tar.gz
учного тыка», щёлкая мышкой. Графический интуитивно 22. http://www.boutell.com/gd/http/gd-2.0.15.tar.gz
понятный интерфейс не должен вызвать у вас затруднений.

№11(12), ноябрь 2003 73


web

Любой действующий сайт нуждается в обновлении.


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

АНДРЕЙ УВАРОВ
ДМИТРИЙ ГОРЯИНОВ

76
web
Такие системы существуют в виде коммерческих и свобод- называется 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 t p : / / w w w . f u s e b ox . o r g / i n d ex . c f m ? & f u s e a c t i o n =
рождает проблему обновления и сопровождения программ- framework.languages>. Выбираем нужную нам ссылку
ного обеспечения. Не важно, на каком языке программи- («Fusebox 3.0 for PHP» <http://www.fusebox.org/index.cfm?&
рования вы пишете. Вы вынуждены переделывать свой или fuseaction=phpframework.default>). На следующей страни-
чужой код. Вы нарабатываете повторно используемые ре- це выбираем ссылку «Download Core Files».
шения в виде модулей, классов, интерфейсов. Вы так или В индексном файле index.php описывается только одно
иначе приходите к использованию технологии в разработ- действие – выбирается ядро Fusebox для использования.
ке своих проектов. Вот о технологии мы и поговорим. Нужное значение зависит от того, какую версию PHP вы
Fusebox – это технология создания веб-приложений, на- используете. Если этого не происходит, то можно выбрать
чавшаяся с небольших модулей и развившаяся до приме- вручную, закомментировав соответствующие строки, или
нимости в средних и больших информационных системах. переименовать файл fbx_Fusebox3.0_PHP4.0.6.php или
Изначально Fusebox создавалась для платформы Coldfusion. fbx_Fusebox3.0_PHP4.1.x.php в index.php.
Сейчас существуют реализации для PHP, J2EE, MS ASP и Мы создадим крайне простое приложение. Оно будет
Lasso. Т.е. для её применения вам скорее всего не придется иметь нижнее навигационное меню для перемещения по
усаживаться за изучение нового языка программирования. страницам. На страницах мы будем выводить идентифи-
Основные цели, преследуемые Fusebox: цирующий страницу текст.
 Читаемость кода; Первым делом (помните основные компоненты при-
 Структурность и законченность приложений (Applications); ложения?) посмотрим на оператор-переключатель. Он
 Наглядность кода программ; описан в файле fbx_Switch.php. Изменим его первые две
 Упрощение проектного менеджмента; ветви («mainpage» и «Fuse-box.defaultFuseaction») на:
 Защищённость кодов и проекта в целом;
 Утилизация кода; switch($Fusebox["fuseaction"]) {
case "mainpage":
 Создание портативных «Partapplications». case "Fusebox.defaultFuseaction":
include( "out_simple.php" );
break;
Fusebox задумывалась как модульная технология со- default: //îñòàëüíîå ñîäåðæèìîå îñòàâèì áåç èçìåíåíèé
здания веб-приложений. Пространство приложения опре-
деляется (задается) каталогом на веб-сервере. Создадим в том же каталоге (fuse_sample) скрипт
Fusebox-приложение состоит из трех основных компо- out_simple.php следующего содержания:
нентов: оператор выбора (switch), обработчик события
(fuseaction) и подключаемые модули (fuse). <?php echo"This is main page"; ?>
Оператор выбора (switch) – это своеобразный менед-
жер задач – вся работа приложения ведется через него. Замечание: никогда не ленитесь писать «<?php» при
Обращения к той или иной функции приложения (выбор) оформлении PHP-кода.
осуществляется в зависимости от переданного операто- И скрипт out_main.php, который будет отрабатывать
ру значения параметра «fuseaction». Метод передачи па- по умолчанию:
раметра определяется Fusebox автоматически. Вы може-
те передать эту переменную методом POST или в строке <html>
<body>
запроса и быть уверенным, что ваша программа получит <table width="50%" border="1" cellpaddin="3" ↵
передаваемое значение. cellspacing="0" align="center">
<tr>
Таким образом, внутри оператора выбора описывают- <td colspan="0" align="center">
ся возможные значения параметра «fuseaction» и обра- <h2>Sample application</h2>
</td>
ботка (fuseaction) этого значения приложением: запуск со- </tr>
ответствующего кода или подключение нужного модуля <tr>
<td width="100%" valign="top">
(fuse). Модуль может быть выполнимым сценарием или <?php echo $Fusebox[ "layout" ]; ?>
просто набором страниц. </td>
</tr>
Теперь посмотрим все это на конкретном примере. В <tr>
качестве платформы для реализации используем PHP. Пред- <td colspan="2">
<?php
полагается, что у читателя установлен интерпретатор PHP. Module( "index.php", array( "fuseaction"=>"bar.menu", ↵
Создайте для примера подкаталог «fuse_sample» внут- "stoplayout"=>"true" ) );
?>
ри корневой директории веб-сервера. Для пользователей </td>
веб-сервера Apache (<http://httpd.apache.org>) это по </tr>
</table>
умолчанию каталог /usr/local/apache/htdocs или /var/www </body>
(этот параметр хранится в файле настроек httpd.conf и </html>

№11(12), ноябрь 2003 77


web
Этот пример – простая и надуманная демонстрация echo "this is content of bar1";
break;
работы технологии Fusebox. В реальном программирова- case "bar2":
нии не стоит вот так совмещать HTML- и PHP-коды. Да, echo "this is content of bar2";
break;
язык PHP (и не только он) это позволяет и часто это пре- case "bar3":
подносится как возможность быстро научиться писать echo "this is content of bar3";
break;
простые сценарии.
В начале статьи мы говорили о том, что одна из наших default: //îñòàëüíîå ñîäåðæèìîå îñòàâèì áåç èçìåíåíèé
задач – обновление и сопровождение программного обес-
печения. Так вот, подобная «мешанина» крайне сложно Содержимое файла fbx_Layouts.php изменим на:
читается даже через пару месяцев. А использовать такое
смешанное кодирование при групповой работе – непрос- $Fusebox["layoutFile"] = "";
$Fusebox["layoutDir"] = "";
тительная потеря времени.
Ну и еще один довод: разделив HTML- и PHP-коды с И наконец, создадим сам скрипт-меню out_barmenu.php:
помощью любой системы шаблонов, мы заранее позабо-
тимся о более легкой возможности сменить дизайн сай- <?php
echo '<center><strong>';
та. HTML-верстальщик сможет работать именно с HTML- echo '<a href="index.php?fuseaction=home.mainpage"> ↵
частью. А от программиста не потребуется переносить все Main</a> | ';
echo '<a href="index.php?fuseaction='.$XFA[ "bar1" ].'"> ↵
изменения в верстке в код PHP-скриптов. Bar 1</a> | ';
В файле fbx_Settings.php изменим первое условие на: echo '<a href="index.php?fuseaction='.$XFA[ "bar2" ].'"> ↵
Bar 2</a> | ';
echo '<a href="index.php?fuseaction='.$XFA[ "bar3" ].'"> ↵
//In case no fuseaction was given, I'll set up one to use Bar 3</a>';
//by default echo '</strong></center>';
if( !isset( $attributes[ "fuseaction" ] ) ) { ?>
$attributes["fuseaction"] = "home.mainpage";
}
И наше простейшее приложение готово.
Этим мы определим новое значение «по умолчанию» В реальности все несколько сложнее, но принцип тот
для параметра «fusecation». же. Fusebox и его компоненты – это каркас разработки, в
Далее мы пропишем в файле fbx_Circuits.php (описы- него можно включать сколько угодно подчиненных при-
вает состав приложения) следующее: ложений, работающих независимо.
Так как все запросы к приложению в Fusebox соверша-
$Fusebox["circuits"]["home"] = "fuse_sample"; ются через один-единственный файл, то целесообразно
$Fusebox["circuits"]["bar"] = "fuse_sample/bar";
организовать перенаправление любых запросов пользова-
Так мы создаём привязку к структуре каталогов нашего теля на него. Это нужно для предотвращения попыток из-
приложения. Основное приложение располагается в ката- лишне любопытного пользователя обратиться к какому-то
логе «fuse_sample», а его подприложение – «fuse_sample/bar». элементу нашего приложения напрямую (например, ввес-
В файл fbx_Layouts.php пропишем: ти в адресной строке браузера http://our_site/fuse_sample/
out_main.php).
 ôàéë fbx_Layouts.php ïðîïèøåì: Для этого есть несколько способов. Если вы используе-
if ( $attributes["stoplayout"] ) { те веб-сервер Apache, имеете возможность работы с фай-
$Fusebox["layoutFile"] = ""; лами конфигурации доступа к директории (файлы .htaccess)
$Fusebox["layoutDir"] = "";
} и у вас установлен модуль Rewrite, это можно сделать сле-
else { дующим образом. Создайте в каталоге вашего приложения
$Fusebox["layoutFile"] = "out_main.php";
$Fusebox["layoutDir"] = ""; (fuse_sample) файл .htaccess следующего вида:
}
RewriteEngine on
Options +FollowSymlinks
Займемся подприложением. В каталоге «fuse_sample» DirectoryIndex index.php
создадим подкаталог «bar» и скопируем в него файлы RewriteBase /fuse_sample/
RewriteCond %{REQUEST_FILENAME} !(index.php)
fbx_Settings.php, fbx_Layouts.php, fbx_Switch.php. RewriteRule ^(.*)$ index.php [QSA,R]
Сейчас наша цель – создать горизонтальное меню. Из-
меним содержимое файла fbx_Switch.php на следующее: Таким образом мы перенаправим все HTTP-запросы
к подкаталогу fuse_sample на файл /fuse_sample/index.php.
switch($Fusebox["fuseaction"]) { Подробности о модуле Rewrite и использовании директив
case "mainpage":
case "Fusebox.defaultFuseaction": перенаправления можно найти в документации к веб-сер-
echo "Bar's main page"; веру Apache.
break;
case "menu": Подведем некоторые итоги. Применение технологии
$XFA[ "main" ] = "home.mainpage"; Fusebox позволяет разработчикам вести параллельную
$XFA[ "bar1" ] = $Fusebox[ "thisCircuit" ] . ".bar1";
$XFA[ "bar2" ] = $Fusebox[ "thisCircuit" ] . ".bar2"; работу над программным продуктом, не мешая друг дру-
$XFA[ "bar3" ] = $Fusebox[ "thisCircuit" ] . ".bar3"; гу. А выделенные и наработанные в процессе модули-под-
include( "out_barmenu.php" );
break; задачи легко встраиваются в новые проекты с той же ар-
case "bar1": хитектурой, облегчая повторное использование кода.

78
образование

80
образование
В прошлых статьях этого цикла мы рассмотрели базовый Вычисление несистематических корректирующих ко-
математический аппарат, на который опираются коды Рида- дов Рида-Соломона осуществляется умножением инфор-
Соломона, и исследовали простейший кодер/декодер, спо- мационного слова на порожденный полином, в результа-
собный исправлять одиночные ошибки и работающий с дву- те чего образуется кодовое слово, полностью отличаю-
мя символами четности. Для подавляющего большинства щееся от исходного информационного слова, а потому для
задач такой корректирующей способности оказывается ка- непосредственного употребления категорически непри-
тастрофически недостаточно, и тогда приходится задумы- годное. Для приведения полученных данных в исходный
ваться о реализации более мощного кодера/декодера. вид мы должны в обязательном порядке выполнить ре-
Кодер/декодер, рассматриваемый в настоящей статье, сурсоемкую операцию декодирования, даже если данные
чрезвычайно конфигурабелен и может быть настроен на не искажены и не требуют восстановления!
работу с любым количеством символов четности, а это При систематическом кодировании, напротив, исход-
означает, что при разумной избыточности он способен ис- ное информационное слово останется неизменным, а
правлять любое мыслимое количество ошибок. Подобная корректирующие коды (часто называемые символами
универсальность не проходит даром, и конструкция тако- четности) добавляются в его конец, благодаря чему к
го декодера усложнятся более чем в сто (!) раз. Самосто- операции декодирования приходится прибегать лишь в
ятельное проектирование декодеров Рида-Соломона тре- случае действительного разрушения данных. Вычисле-
бует глубоких знаний высшей математики в целом и при- ние несистематических корректирующих кодов Рида-
роды корректирующих кодов в частности, поэтому не сму- Соломона осуществляется делением информационно-
щайтесь, если данная статья поначалу вам покажется не- го слова на порожденный полином. При этом все сим-
понятной. Это действительно сложные вещи, не допуска- волы информационного слова сдвигаются на n – k байт
ющие простого объяснения. влево, а на освободившееся место записывается 2t байт
С другой стороны, для практического использования остатка (см. рис. 1).
корректирующих кодов можно и не вникать в их сущность, Поскольку рассмотрение обоих типов кодировщиков
просто откомпилировав исходные тексты кодера/декоде- заняло бы слишком много места, сосредоточим свое вни-
ра Рида-Соломона, приведенные в данной статье. Также мание на одних лишь систематических кодерах как на
вы можете воспользоваться любой законченной библио- наиболее популярных.
текой, поставляемой сторонними разработчиками. В каче-
стве альтернативного примера в заключение этой статьи
будет кратно описан интерфейс библиотеки ElByECC.DLL,
разработанной компанией «Elaborate Bytes» и распрост-
раняемой вместе с популярным копировщиком Clone CD.
Известнейший прожигатель дисков всех времен и наро- Ðèñóíîê 1. Óñòðîéñòâî êîäîâîãî ñëîâà
дов Ahead Burning ROM имеет аналогичную библиотеку, Архитектурно кодировщик представляет собой сово-
размещенную в файле NEWTRF.DLL. купность сдвиговых регистров (shift registers), объединен-
ных посредством сумматоров и умножителей, функцио-
Легенда нирующих по правилам арифметики Галуа. Сдвиговый
Напомним читателю основные условные обозначения, ис- регистр (иначе называемый регистром сдвига) представ-
пользуемые в этой статье. Количество символов кодируе- ляет последовательность ячеек памяти, называемых раз-
мого сообщения (называемого также информационным рядами, каждый из которых содержит один элемент поля
словом) по общепринятому соглашению обозначается бук- Галуа GF(q). Содержащийся в разряде символ, покидая
вой k; полная длина кодового слова, включающего в себя этот разряд, «выстреливается» на выходную линию. Од-
кодируемые данные и символы четности, – n. Отсюда, ко- новременно с этим разряд «засасывает» символ, находя-
личество символов четности равно: n – k. За максималь- щийся на его входной линии. Замещение символов про-
ным количеством исправляемых ошибок «закреплена» бук- исходит дискретно, в строго определенные промежутки
ва t. Поскольку для исправления одной ошибки требуется времени, называемые тактами.
два символа четности, общее количество символов четно- При аппаратной реализации сдвигового регистра его
сти равно 2t. Выражение RS(n, k) описывает определен- элементы могут быть объединены как последовательно,
ную разновидность корректирующих кодов Рида-Соломо- так и параллельно. При последовательном объединении
на, оперирующую с n-символьными блоками, k-символов, пересылка одного m-разрядного символа потребуем m-
из которых представляют полезные данные, а все осталь- тактов, в то время как при параллельном она осуществ-
ные задействованы под символы четности. ляется всего за один такт.
Полином, порожденный на основе примитивного чле- Низкая эффективность программных реализаций ко-
на α, называется порожденным или сгенерированным деров Рида-Соломона объясняется тем, что разработчик
(generate) полиномом. не может осуществлять параллельное объединение эле-
ментов сдвигового регистра и вынужден работать с той
Кодировщик (encoder) шириной разрядности, которую «навязывает» архитекту-
Существует по меньшей мере два типа кодеров Рида- ра данной машины. Однако создать 4-элементный 8-бит-
Соломона: несистематические и систематические коди- ный регистр сдвига параллельного типа на процессорах
ровщики. семейства IA32 вполне реально.

№11(12), ноябрь 2003 81


образование
Цепи, основанные на регистрах сдвига, обычно на- * íà îñíîâå èñõîäíûõ òåêñòîâ
* Simon Rockliff, îò 26.06.1991,
зывают фильтрами. Блок-схема фильтра, осуществляю- * ðàñïðîñòðàíÿåìûõ ïî ëèöåíçèè GNU
щего деление полинома на константу, приведена на –––––––––––––––––––––––––––––––––––––––––––––––––––––––––*/
encode_rs()
рис. 2. Пусть вас не смущает тот факт, что деление реа- {
лизуется посредством умножения и сложения. Данный 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]) ê óìíîæåíèþ
Ôîðìóëà 1. Äåëåíèå ïîëèíîìà íà êîíñòàíòó ïîñðåäñòâîì óìíî- // íà g[i], ò.å. ñêëàäûâàåì î÷åðåäíîé «çàõâà÷åííûé»
æåíèÿ è ñëîæåíèÿ // ñèìâîë èñõîäíûõ äàííûõ ñ ìëàäøèì ñèìâîëîì áèòîâ
// ÷åòíîñòè (ñîîòâåòñòâóþùåãî «ðåãèñòðó» b2t-1,
Здесь: Q(r)(x) и R(r)(x) – соответственно частное и ос- // ñì. ðèñ. 2) è ïåðåâîäèì åãî â èíäåêñíóþ ôîðìó,
таток на r-шаге рекурсии. Поскольку сложение и вы- // ñîõðàíÿÿ ðåçóëüòàò â ðåãèñòðå feedback, êàê ìû
// óæå ãîâîðèëè, ñóììà äâóõ èíäåêñîâ åñòü
читание, выполняемое по модулю два, тождественны // ïðîèçâåäåíèå ïîëèíîìîâ
друг другу, для реализации делителя нам достаточно feedback = index_of[data[i] ^ b[n – k - 1]];
иметь всего два устройства – устройство сложения и // åñòü åùå ñèìâîëû äëÿ îáðàáîòêè?
устройство умножения, а без устройства вычитания if (feedback != -1)
{
можно обойтись. // îñóùåñòâëÿåì ñäâèã öåïè bx-ðåãèñòðîâ
После n-сдвигов на выходе регистра появляется част- for (j=n-k-1; j>0; j--)
// åñëè òåêóùèé êîýôôèöèåíò g –
ное, а в самом регистре окажется остаток, который и пред- // ýòî äåéñòâèòåëüíûé (ò.å. íåíóëåâîé
ставляет собой рассчитанные символы четности (они же – // êîýôôèöèåíò, òî óìíîæàåì feedback
// íà ñîîòâåòñòâóþùèé g-êîýôôèöèåíò
коды Рида-Соломона), а коэффициенты умножения с g0 // è ñêëàäûâàåì åãî ñî ñëåäóþùèì
по g(2t – 1) напрямую соответствуют коэффициентам ум- // ýëåìåíòîì öåïî÷êè
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
{ // äåëåíèå çàâåðøåíî,
// îñóùåñòâëÿåì ïîñëåäíèé ñäâèã ðåãèñòðà,
Ðèñóíîê 2. Óñòðîéñòâî ïðîñòåéøåãî êîäåðà Ðèäà-Ñîëîìîíà // íà âûõîäå ðåãèñòðà áóäåò ÷àñòíîå, êîòîðîå
// òåðÿåòñÿ, à â ñàìîì ðåãèñòðå – èñêîìûé
Простейший пример программной реализации такого // îñòàòîê
for (j = n-k-1; j>0; j--) b[j] = b[j-1] ;
фильтра приведен ниже. Это законченный кодер Рида- b[0] = 0;
Соломона, вполне пригодный для практического исполь- }
}
зования. Конечно, при желании его можно было бы и улуч- }
шить, но тогда неизбежно пострадала бы наглядность и
компактность листинга.
Декодер (decoder)
Ëèñòèíã 1. Èñõîäíûé òåêñò ïðîñòåéøåãî êîäåðà Ðèäà-Ñîëîìîíà Декодирование кодов Рида-Соломона представляет со-
/*-------------------------------------------------------- бой довольно сложную задачу, решение которой вылива-
* ется в громоздкий, запутанный и чрезвычайно ненагляд-
* êîäèðîâùèê Ðèäà-Ñîëîìîíà
* ======================== ный программный код, требующий от разработчика об-
* ширных знаний во многих областях высшей математики.
* êîäèðóåìûå äàííûå ïåðåäàþòñÿ ÷åðåç ìàññèâ data[i],
* ãäå i=0..(k-1), à ñãåíåðèðîâàííûå ñèìâîëû ÷åòíîñòè Типовая схема декодирования, получившая название ав-
* çàíîñÿòñÿ â ìàññèâ b[0]..b[2*t-1]. торегрессионого спектрального метода декодирования,
* Èñõîäíûå è ðåçóëüòèðóþùèå äàííûå äîëæíû áûòü ïðåäñòàâëåíû
* â ïîëèíîìèàëüíîé ôîðìå (ò.å. â îáû÷íîé ôîðìå ìàøèííîãî состоит из следующих шагов:
* ïðåäñòàâëåíèÿ äàííûõ).
* Êîäèðîâàíèå ïðîèçâîäèòñÿ ñ èñïîëüçîâàíèåì ñäâèãîâîãî
 вычисления синдрома ошибки (синдромный декодер);
* feedback-ðåãèñòðà, çàïîëíåííîãî ñîîòâåòñòâóþùèìè ýëåìåíòàìè  построения полинома ошибки, осуществляемое либо
* ìàññèâà g[] ñ ïîðîæäåííûì ïîëèíîìîì âíóòðè, ïðîöåäóðà посредством высокоэффективного, но сложно реа-
* ãåíåðàöèè êîòîðîãî óæå îáñóæäàëàñü â ïðåäûäóùåé ñòàòüå.
* Ñãåíåðèðîâàííîå êîäîâîå ñëîâî îïèñûâàåòñÿ ñëåäóþùåé лизуемого алгоритма Берлекэмпа-Месси, либо по-
* ôîðìóëîé: средством простого, но медленного Евклидового ал-
* ñ(x) = data(x)*x(n-k) + b(x)
* горитма;

82
образование
 нахождения корней данного полинома, обычно реша- вокупность признаков и/или симптомов, характеризующих
ющееся лобовым перебором (алгоритм Ченя); заболевание).
 определения характера ошибки, сводящееся к пост- Принятое кодовое слово v с компонентами vi = ci + ei,
роению битовой маски, вычисляемой на основе обра- где i = 0, … n – 1, представляет собой сумму кодового
щения алгоритма Форни или любого другого алгорит- слова c и вектора ошибок e. Цель декодирования состо-
ма обращения матрицы; ит в очистке кодового слова от вектора ошибки, описы-
 наконец, исправления ошибочных символов путем на- ваемого полиномом синдрома и вычисляемого по фор-
ложения битовой маски на информационное слово и муле Sj = v(α j + j0 – 1), где j изменяется от 1 до 2t, а α пред-
последовательного инвертирования всех искаженных ставляет собой примитивный член «альфа», который мы
бит через операцию XOR. уже обсуждали в предыдущей статье. Да, мы снова вы-
ражаем функцию деления через умножение, поскольку де-
Следует отметить, что данная схема декодирования не ление – крайне неэффективная в смысле производитель-
единственная и, вероятно, даже не самая лучшая, но зато ности операция.
универсальная. Всего же существует около десятка раз- Блок-схема устройства, осуществляющего вычисле-
личных схем декодирования абсолютно не похожих друг ние синдрома, приведена на рис. 4. Как видно, она пред-
на друга и выбираемых в зависимости от того, какая часть ставляет собой типичный фильтр (сравните ее со схе-
декодера реализуется программно, а какая аппаратно. мой рис. 2), а потому ни в каких дополнительных пояс-
нениях не нуждается.

Ðèñóíîê 4. Áëîê-ñõåìà öåïè âû÷èñëåíèÿ ñèíäðîìà


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

Полином локатора ошибки


Полученный синдром описывает конфигурацию ошибки,
но еще не говорит нам, какие именно символы получен-
ного сообщения были искажены. Действительно, степень
синдромного полинома, равная 2t, много меньше степе-
ни полинома сообщения, равной n, и между их коэффи-
циентами нет прямого соответствия. Полином, коэффи-
Ðèñóíîê 3. Ñõåìà àâòîðåãðåññèîííîãî ñïåêòðàëüíîãî äåêîäåðà циенты которого напрямую соответствуют коэффициен-
êîððåêòèðóþùèõ êîäîâ Ðèäà-Ñîëîìîíà там искаженных символов, называется полиномом ло-
катора ошибки и по общепринятому соглашению обозна-
Синдромный декодер чается греческой буквой Λ (лямбда).
Грубо говоря, синдром есть остаток деления декоди- Если количество искаженных символов не превышает t,
руемого кодового слова c(x) на порожденный полином между синдромом и локатором ошибки существует сле-
g(x), и, если этот остаток равен нулю, кодовое слово счи- дующее однозначное соответствие, выражаемое следу-
тается неискаженным. Ненулевой остаток свидетельству- ющей формулой НОД[xn-1, E(x)] = Λ(x), и вычисление ло-
ет о наличии по меньшей мере одной ошибки. Остаток от катора сводится к задаче нахождения наименьшего об-
деления дает многочлен, не зависящий от исходного со- щего делителя, успешно решенной еще Евклидом и эле-
общения и определяемый исключительно характером ментарно реализуемой как на программном, так и на ап-
ошибки (syndrome – греческое слово, обозначающее со- паратном уровне. Правда, за простоту реализации нам

№11(12), ноябрь 2003 83


образование
приходится расплачиваться производительностью, точнее (Chien search), аналогичная по своей природе обратному
непроизводительностью данного алгоритма, и на практи- преобразованию Фурье и фактически сводящаяся к ту-
ке обычно применяют более эффективный, но и более пому перебору (brute force, exhaustive search) всех воз-
сложный для понимания алгоритм Берлекэмпа-Месси можных вариантов. Все 2m возможных символов один за
(Berlekamp-Massy), подробно описанный Кнутом во вто- другим подставляются в полином локатора в порядке со-
ром томе «Искусства программирования» (см. также «Те- циалистической очереди и затем выполняется расчет по-
ория и практика кодов, контролирующих ошибки» Блей- линома. Если результат обращается в ноль – считается,
хута) и сводящийся к задаче построения цепи регистров что искомые корни найдены.
сдвига с линейной обратной связью и по сути своей явля-
ющегося разновидностью авторегрессионого фильтра, Восстановление данных
множители в векторах которого и задают полином Λ. Итак, мы знаем, какие символы кодового слова искаже-
Декодер, построенный по такому алгоритму, требует ны, но пока еще не готовы ответить на вопрос: как имен-
не более 3t операций умножения в каждой из итерации, но они искажены. Используя полином синдрома и корни
количество которых не превышает 2t. Таким образом, полинома локатора, мы можем определить характер раз-
решение поставленной задачи укладывается всего в 6t2 рушений каждого из искаженных символов. Обычно для
операций умножения. Фактически поиск локатора сводит- этой цели используется алгоритм Форни (Forney), состо-
ся к решению системы из 2t уравнений – по одному урав- ящий из двух стадий: сначала путем свертки полинома
нению на каждый символ синдрома – c t неизвестными. синдрома полиномом локатора Λ мы получаем некото-
Неизвестные члены и есть позиции искаженных симво- рый промежуточный полином, условно обозначаемый
лов в кодовом слове v. Легко видеть, если количество греческой буквой Ω. Затем на основе Ω-полинома вычис-
ошибок превышает t, система уравнений становится не- ляется нулевая позиция ошибки (zero error location), ко-
разрешима и восстановить разрушенную информацию в торая в свою очередь делится на производную от Λ-по-
этом случае не представляется возможным. линома. В результате получается битовая маска, каж-
Блок-схема алгоритма Берлекэмпа-Месси приведена дый из установленных битов которой соответствует ис-
на рис. 5, а его законченная программа реализация со- каженному биту и для восстановления кодового слова в
держится в листинге 2. исходный вид все искаженные биты должны быть инвер-
тированы, что осуществляется посредством логической
операции XOR.
На этом процедура декодирования принятого кодово-
го слова считается законченной. Остается отсечь n – k
символов четности, и полученное информационное сло-
во готово к употреблению.

Исходный текст декодера


Ниже приводится исходный текст полноценного декоде-
ра Рида-Соломона, снабженный минимально разумным
количеством комментариев. К сожалению, в рамках жур-
нальной статьи подробное комментирование кода деко-
дера невозможно, поскольку потребовало бы очень мно-
го места.
При возникновении трудностей в анализе этого лис-
тинга обращайтесь к блок-схемам, приведенным на рис. 3,
4 и 5 – они помогут.

Ëèñòèíã 2. Èñõîäíûé òåêñò ïðîñòåéøåãî äåêîäåðà Ðèäà-Ñîëîìîíà

/*--------------------------------------------------------
*
* äåêîäåð Ðèäà-Ñîëîìîíà
* =====================
*
* Ïðîöåäóðà äåêîäèðîâàíèÿ êîäîâ Ðèäà-Ñîëîìîíà ñîñòîèò
* èç íåñêîëüêèõ øàãîâ: ñíà÷àëà ìû âû÷èñëÿåì 2t-ñèìâîëüíûé
* ñèíäðîì ïóòåì ïîñòàíîâêè alpha**i â recd(x), ãäå recd –
* ïîëó÷åííîå êîäîâîå ñëîâî, ïðåäâàðèòåëüíî ïåðåâåäåííîå
* â èíäåêñíóþ ôîðìó. Ïî ôàêòó âû÷èñëåíèÿ recd(x) ìû çàïèñûâàåì
* î÷åðåäíîé ñèìâîë ñèíäðîìà â s[i], ãäå i ïðèíèìàåò çíà÷åíèå
Ðèñóíîê 5. Ñòðóêòóðíàÿ ñõåìà àëãîðèòìà Áåðëåêýìïà-Ìåññè * îò 1 äî 2t, îñòàâëÿÿ s[0] ðàâíûì íóëþ. Çàòåì, èñïîëüçóÿ
* èòåðàòèâíûé àëãîðèòì Áåðëåêýìïà, ìû íàõîäèì ïîëèíîì ëîêàòîðà
Корни полинома * îøèáêè – elp[i]. Åñëè ñòåïåíü elp ïðåâûøàåò ñîáîé âåëè÷èíó
* t, ìû áåññèëüíû ñêîððåêòèðîâàòü âñå îøèáêè è îãðàíè÷èâàåìñÿ
Коль скоро полином локатора ошибки нам известен, его * âûâîäîì ñîîáùåíèÿ î íåóñòðàíèìîé îøèáêå, ïîñëå ÷åãî
корни определяют местоположение искаженных симво- * ñîâåðøàåì àâàðèéíûé âûõîä èç äåêîäåðà. Åñëè æå ñòåïåíü elp
* íå ïðåâûøàåò t, ìû ïîäñòàâëÿåì alpha**i, ãäå i = 1..n â elp
лов в принятом кодовом слове. Остается эти корни най- * äëÿ âû÷èñëåíèÿ êîðíåé ïîëèíîìà. Îáðàùåíèå íàéäåííûõ
ти. Чаще всего для этого используется процедура Ченя * êîðíåé äàåò íàì ïîçèöèè èñêàæåííûõ ñèìâîëîâ.

84
образование
* Åñëè êîëè÷åñòâî îïðåäåëåííûõ ïîçèöèé èñêàæåííûõ ñèìâîëîâ elp[1][i] = 0; // ïîëèíîìèàëüíàÿ ôîðìà
* ìåíüøå ñòåïåíè elp, èñêàæåíèþ ïîäâåðãëîñü áîëåå ÷åì t }
* ñèìâîëîâ è ìû íå ìîæåì âîññòàíîâèòü èõ. Âî âñåõ îñòàëüíûõ
* ñëó÷àÿõ âîññòàíîâëåíèå îðèãèíàëüíîãî ñîäåðæèìîãî èñêàæåííûõ l[0] = 0; l[1] = 0; u_lu[0] = -1; u_lu[1] = 0; u = 0;
* ñèìâîëîâ âïîëíå âîçìîæíî.  ñëó÷àå, êîãäà êîëè÷åñòâî îøèáîê
* çàâåäîìî âåëèêî, äëÿ èõ èñïðàâëåíèÿ äåêîäèðóåìûå ñèìâîëû do
* ïðîõîäÿò ñêâîçü äåêîäåð áåç êàêèõ-ëèáî èçìåíåíèé. {
* u++;
* íà îñíîâå èñõîäíûõ òåêñòîâ if (d[u] == -1)
* Simon Rockliff, îò 26.06.1991, {
* ðàñïðîñòðàíÿåìûõ ïî ëèöåíçèè GNU l[u + 1] = l[u];
–––––––––––––––––––––––––––––––––––––––––––––––––––––––––*/ for (i = 0; i <= l[u]; i++)
decode_rs() {
{ elp[u+1][i] = elp[u][i];
int i, j, u, q; elp[u][i] = index_of ↵
int s[n-k+1]; // ïîëèíîì ñèíäðîìà îøèáêè [elp[u][i]];
int elp[n – k + 2][n - k]; // ïîëèíîì ëîêàòîðà îøèáêè }
// ëÿìáäà }
int d[n-k+2]; else
int l[n-k+2]; {
int u_lu[n-k+2], // ïîèñê ñëîâ ñ íàèáîëüøèì u_lu[q],
// òàêèõ ÷òî d[q]!=0
int count=0, syn_error=0, root[t], loc[t], z[t+1], ↵ q = u - 1;
err[n], reg[t+1]; while ((d[q] == -1) && (q>0)) q--;
// ïåðåâîäèì ïîëó÷åííîå êîäîâîå ñëîâî â èíäåêñíóþ ôîðìó // íàéäåí ïåðâûé íåíóëåâîé d[q]
// äëÿ óïðîùåíèÿ âû÷èñëåíèé if (q > 0)
for (i = 0; i < n; i++) recd[i] = index_of[recd[i]]; {
j=q ;
// âû÷èñëÿåì ñèíäðîì do
//----------------------------------------------------- {
for (i = 1; i <= n - k; i++) j-- ;
{ if ((d[j]!=-1) && ↵
s[i] = 0; // èíèöèàëèçàöèÿ s-ðåãèñòðà (u_lu[q]<u_lu[j]))
// (íà åãî âõîä ïî óìîë÷àíèþ q = j ;
// ïîñòóïàåò íîëü) } while (j>0);
};
// âûïîëíÿåì s[i] += recd[j]*ij
// ò.å. áåðåì î÷åðåäíîé ñèìâîë äåêîäèðóåìûõ äàííûõ, // êàê òîëüêî ìû íàéäåì q, òàêîé ÷òî d[u]!=0
// óìíîæàåì åãî íà ïîðÿäêîâûé íîìåð äàííîãî // è u_lu[q] åñòü ìàêñèìóì
// ñèìâîëà, óìíîæåííûé íà íîìåð î÷åðåäíîãî îáîðîòà // çàïèøåì ñòåïåíü íîâîãî elp ïîëèíîìà
// è ñêëàäûâàåì ïîëó÷åííûé ðåçóëüòàò ñ ñîäåðæèìûì if (l[u] > l[q]+u-q) l[u+1] = l[u]; else ↵
// s-ðåãèñòðà ïî ôàêòó èñ÷åðïàíèÿ âñåõ äåêîäèðóåìûõ l[u+1] = l[q]+u-q;
// ñèìâîë, ìû ïîâòîðÿåì âåñü öèêë âû÷èñëåíèé îïÿòü –
// ïî îäíîìó ðàçó äëÿ êàæäîãî ñèìâîëà ÷åòíîñòè
for (j=0; j<n; j++) if (recd[j]!=-1) ↵ // ôîðìèðóåì íîâûé elp(x)
s[i]^= alpha_to[(recd[j]+i*j)%n]; for (i = 0; i < n - k; i++) elp[u+1][i] = 0;
for (i = 0; i <= l[q]; i++)
if (s[i]!=0) syn_error=1; // åñëè ñèíäðîì 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];
s[i] = index_of[s[i]];
} // ïðåîáðàçóåì ñòàðûé elp
// â èíäåêñíóþ ôîðìó
// êîððåêöèÿ îøèáîê elp[u][i] = index_of[elp[u][i]];
//----------------------------------------------------- }
if (syn_error) // åñëè åñòü îøèáêè, ïûòàåìñÿ }
// èõ ñêîððåêòèðîâàòü u_lu[u+1] = u-l[u+1];
{
// ôîðìèðóåì (u + 1) íåâÿçêó
// âû÷èñëåíèå ïîëèíîìà ëîêàòîðà ëÿìáäà //----------------------------------------------
//---------------------------------------------- if (u < n-k) // íà ïîñëåäíåé èòåðàöèè ðàñõîæäåíèå
// âû÷èñëÿåì ïîëèíîì ëîêàòîðà îøèáêè ÷åðåç { // íå áûëî îáíàðóæåíî
// èòåðàòèâíûé àëãîðèòì Áåðëåêýìïà. Ñëåäóÿ
// òåðìèíîëîãèè Lin and Costello (ñì. "Error if (s[u + 1]!=-1) d[u+1] = alpha_to[s[u+1]]; ↵
// Control Coding: Fundamentals and Applications" else d[u + 1] = 0;
// Prentice Hall 1983 ISBN 013283796) d[u]
// ïðåäñòàâëÿåò ñîáîé µ («ìþ»), âûðàæàþùóþ for (i = 1; i <= l[u + 1]; i++)
// ðàñõîæäåíèå (discrepancy), ãäå u = µ + 1 è µ if ((s[u + 1 - i] != -1) && ↵
// åñòü íîìåð øàãà èç äèàïàçîíà îò –1 äî 2t. (elp[u + 1][i]!=0))
// Ó Áëåéõóòà òà æå ñàìàÿ âåëè÷èíà îáîçíà÷àåòñÿ d[u+1] ^= alpha_to[(s[u+1-i] ↵
// ∆(x) («äåëüòà») è íàçûâàåòñÿ íåâÿçêîé. +index_of[elp[u+1][i]])%n];
// l[u] ïðåäñòàâëÿåò ñîáîé ñòåïåíü elp äëÿ äàííîãî
// øàãà èòåðàöèè, u_l[u] ïðåäñòàâëÿåò ñîáîé // ïåðåâîäèì d[u+1] â èíäåêñíóþ ôîðìó
// ðàçíèöó ìåæäó íîìåðîì øàãà è ñòåïåíüþ elp, d[u+1] = index_of[d[u+1]];
// èíèöèàëèçèðóåì ýëåìåíòû òàáëèöû }
d[0] = 0; // èíäåêñíàÿ ôîðìà } while ((u < n-k) && (l[u+1]<=t));
d[1] = s[1]; // èíäåêñíàÿ ôîðìà
elp[0][0] = 0; // èíäåêñíàÿ ôîðìà // ðàñ÷åò ëîêàòîðà çàâåðøåí
elp[1][0] = 1; // ïîëèíîìèàëüíàÿ ôîðìà //-----------------------------------------------------
u++ ;
for (i = 1; i < n - k; i++) if (l[u] <= t)
{ { // êîððåêöèÿ îøèáîê âîçìîæíà
elp[0][i] = -1; // èíäåêñíàÿ ôîðìà

№11(12), ноябрь 2003 85


образование
// ïåðåâîäèì elp â èíäåêñíóþ ôîðìó q+=index_of[1^alpha_to[(loc[j]+root[i])%n]];
for (i = 0; i <= l[u]; i++) elp[u][i] = ↵
index_of[elp[u][i]]; q = q % n; err[loc[i]] = alpha_to ↵
[(err[loc[i]]-q+n)%n];

// íàõîæäåíèå êîðíåé ïîëèíîìà ëîêàòîðà îøèáêè // recd[i] äîëæåí áûòü


//---------------------------------------------- // â ïîëèíîìèàëüíîé ôîðìå
for (i = 1; i <= l[u]; i++) reg[i] = elp[u][i]; ↵ recd[loc[i]] ^= err[loc[i]];
count = 0; }
}
for (i = 1; i <= n; i++) }
{ else // íåò êîðíåé,
q = 1 ; // ðåøåíèå ñèñòåìû óðàâíåíèé íåâîçìîæíî,
for (j = 1; j <= l[u]; j++) // ò.ê. ñòåïåíü elp >= t
if (reg[j] != -1) {
{ // ïåðåâîäèì recd[] â ïîëèíîìèàëüíóþ ôîðìó
reg[j] = (reg[j]+j)%n; for (i=0; i<n; i++)
q ^= alpha_to[reg[j]]; if (recd[i]!=-1) recd[i] = alpha_to[recd[i]];
} else
recd[i] = 0; // âûâîäèì èíôîðìàöèîííîå
if (!q) // ñëîâî êàê åñòü
{ // çàïèñûâàåì êîðåíü è èíäåêñ }
// ïîçèöèè îøèáêè else // ñòåïåíü elp > t,
root[count] = i; // ðåøåíèå íåâîçìîæíî
loc[count] = n-i; {
count++; // ïåðåâîäèì recd[] â ïîëèíîìèàëüíóþ ôîðìó
} for (i=0; i<n; i++)
} if (recd[i]!=-1)
recd[i] = alpha_to[recd[i]] ;
if (count == l[u]) else
{ // íåò êîðíåé – ñòåïåíü recd[i] = 0 ; // âûâîäèì èíôîðìàöèîííîå
// elp < t îøèáîê // ñëîâî êàê åñòü
}
// ôîðìèðóåì ïîëèíîì z(x) else // îøèáîê íå îáíàðóæåíî
for (i = 1; i <= l[u]; i++) // Z[0] âñåãäà for (i=0;i<n;i++) if(recd[i]!=-1)recd[i]=alpha_to[recd[i]]; ↵
// ðàâíî 1 else recd[i]=0;
{ }
if ((s[i]!=-1) && (elp[u][i]!=-1))
z[i] = alpha_to[s[i]] ^ ↵
alpha_to[elp[u][i]];
else
if ((s[i]!=-1) && ↵ Интерфейс с библиотекой ElByECC.DLL
(elp[u][i]==-1)) Программная реализация кодера/декодера Рида-Соломо-
z[i] = alpha_to[s[i]];
else на, приведенная в листингах 1, 2, достаточно наглядна,
if ((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) пользователя установить данную библиотеку самостоя-
тельно?

86
образование
Ниже приводится описание важнейших функций биб-  userdata_src – указатель на 2048-байтовый блок пользо-
лиотеки ElByECC.DLL, входящей в состав известного ко- вательских данных, для которых необходимо выполнить
пировщика защищенных лазерных дисков Clone CD, ус- расчет корректирующих кодов. Сами пользовательские
ловно-бесплатную копию которого можно скачать c cайта: данные в процессе выполнения функции остаются не-
http://www.elby.ch/. изменными и автоматически копируются в буфер це-
Сам Clone CD проработает всего лишь 21 день, а за- левого сектора, где к ним добавляется 104 + 172 байт
тем потребует регистрации, однако на продолжительность четности и 4 байта контрольной суммы.
использования библиотеки ElByECC.DLL не наложено  header_src – указатель на 4-байтовый блок, содержа-
никаких ограничений. щий заголовок сектора. Первые три байта занимает
Моими усилиями был создан h-файл, содержащий абсолютный адрес, записанный в BCD-форме, а чет-
прототипы основных функций библиотеки ElByECC.DLL, вертый байт отвечает за тип сектора, которому необ-
специальная редакция которого была любезно предос- ходимо присвоить значение 1, соответствующий ре-
тавлена для журнала «Системный администратор». жиму «корректирующие коды задействованы».
Несмотря на то, что библиотека ElByECC.DLL ориен-  raw_sector_mode1_dst – указатель на 2352-байтовый
тирована на работу с секторами лазерных дисков, она блок, в который будет записан сгенерированный сек-
может быть приспособлена и для других целей, например, тор, содержащий 2048-байт пользовательских данных
построения отказоустойчивых дисковых массивов, о ко- и 104+172 байт корректирующих кодов вместе с 4 бай-
торых говорилось в предыдущей статье. тами контрольной суммы и представленный следую-
Краткое описание основных функций библиотеки при- щей структурой:
водится ниже.
Ëèñòèíã 5. Ñòðóêòóðà ñûðîãî ñåêòîðà
Подключение библиотеки ElByECC.DLL struct RAW_SECTOR_MODE1
к своей программе {
BYTE SYNC[12]; // ñèíõðîãðóïïà
Существуют по меньшей мере два способа подключе- BYTE ADDR[3]; // àáñîëþòíûé àäðåñ ñåêòîðà
ния динамических библиотек к вашим программам. При BYTE MODE; // òèï ñåêòîðà
BYTE USER_DATA[2048]; // ïîëüçîâàòåëüñêèå äàííûå
динамической компоновке адреса требуемых функций BYTE EDC[4]; // êîíòðîëüíàÿ ñóììà
определяются посредством вызова GetProcAddress, BYTE ZERO[8]; // íóëè (íå èñïîëüçóåòñÿ)
BYTE P[172]; // P-áàéòû ÷åòíîñòè
причем сама библиотека ElByECC.DLL должна быть BYTE Q[104]; // Q-áàéòû ÷åòíîñòè
предварительно загружена через LoadLibrary. Это мо- };
жет выглядеть, например, так (обработка ошибок для
простоты опущена): При успешном завершении функция возвращает не-
нулевое значение и ноль в противном случае.
Ëèñòèíã 3. Äèíàìè÷åñêàÿ çàãðóçêà áèáëèîòåêè ElByECC.DLL

HANDLE h; CheckSector
int (__cdecl *CheckECCAndEDC_Mode1) (char *userdata, ↵ Функция CheckSector осуществляет проверку целостнос-
char *header, char *sector);
ти сектора по контрольной сумме и при необходимости
h=LoadLibrary("ElbyECC.dll"); выполняет его восстановление по избыточным кодам
CheckECCAndEDC_Mode1 = GetProcAddress(h, "CheckECCAndEDC_Mode1");
Рида-Соломона.
Статическая компоновка предполагает наличие спе-
циального lib-файла, который может быть автоматически Ëèñòèíã 6. Ïðîòîòèï ôóíêöèè CheckSector
сгенерирован утилитой implib из пакета Borland C++ лю- // óêàçàòåëü íà ñåêòîðíûé áóôåð
бой подходящей версии, представляющую собой утилиту CheckSector(struct RAW_SECTOR *sector,
int DO); // òîëüêî ïðîâåðêà/ëå÷åíèå
командной строки, вызываемую так:
 sector – указатель на 2352-байтовый блок данных, содер-
implib.exe -a ElByECC.lib ElByECC.lib жащий подопытный сектор. Лечение сектора осуществ-
ляется «вживую», т.е. непосредственно по месту возник-
новения ошибки. Если количество разрушенных байт
GenECCAndEDC_Mode1 превышают корректирующие способности кодов Рида-
Функция GenECCAndEDC_Mode1 осуществляет генера- Соломона, исходные данные остаются неизменными;
цию корректирующих кодов на основе 2048-байтового  DO – флаг, нулевое значение которого указывает на
блока пользовательских данных и имеет следующий запрет модификации сектора. Другими словами, со-
прототип: ответствует режиму TEST ONLY. Ненулевое значение
разрешает восстановление данных, если они действи-
Ëèñòèíã 4. Ïðîòîòèï ôóíêöèè GenECCAndEDC_Mode1 тельно подверглись разрушению.
// óêàçàòåëü íà ìàññèâ èç 2048 áàéò
При успешном завершении функция возвращает не-
GenECCAndEDC_Mode1(char *userdata_src,
нулевое значение и ноль, если сектор содержит ошибку
// óêàçàòåëü íà çàãîëîâîê (в режиме TEST ONLY) или если данные восстановить не
char *header_src,
struct RAW_SECTOR_MODE1 *raw_sector_mode1_dst) удалось (при вызове функции в режиме лечения). Для

№11(12), ноябрь 2003 87


образование
предотвращения возможной неоднозначности рекоменду- // user_data init
for (a = 0; a < USER_DATA_SIZE; a++) user_data[a] = a;
ется вызывать данную функцию в два приема. Первый // src header init
раз – в режиме тестирования для проверки целостности memset(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);
Ëèñòèíã 7. Ïðèìåð âûçîâà ôóíêöèé ElByECC.DLL èç ñâîåé ïðî- printf("+OK\n");
ãðàììû
// óìûøëåííîå èñêàæåíèå ïîëüçîâàòåëüñêèõ äàííûõ
/*-------------------------------------------------------- //-----------------------------------------------------
* printf("user-data %04d bytes damage........", ↵
* äåìîíñòðàöèÿ ElByECC.DLL 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, ↵
* ElByECC.DLL, ãåíåðèðóÿ èçáûòî÷íûå êîäû Ðèäà-Ñîëîìîíà &raw_sector_for_compre,RAW_SECTOR_SIZE))
* íà îñíîâå ïîëüçîâàòåëüñêèõ äàííûõ, çàòåì óìûøëåííî printf("-ERR: NOT DAMAGE YET\n"); ↵
* èñêàæàåò èõ è âíîâü âîññòàíàâëèâàåò. else printf("+OK\n");
* Êîëè÷åñòâî ðàçðóøàåìûõ áàéò ïåðåäàåòñÿ â ïåðâîì ïàðàìåòðå
* êîìàíäíîé ñòðîêè (ïî óìîë÷àíèþ – 6) // ïðîâåðêà öåëîñòíîñòè ïîëüçîâàòåëüñêèõ äàííûõ
---------------------------------------------------------*/ //-----------------------------------------------------
#include <stdio.h> printf("user-data check....................");
#include "ElByECC.h" // äåêîìïèëèðîâàíî àâòîðîì a = CheckSector((struct RAW_SECTOR*) ↵
&raw_sector_for_damage, ElBy_TEST_ONLY);
// ðóøèòü ïî óìîë÷àíèþ if (a==ElBy_SECTOR_OK){
#define _DEF_DMG 6 printf("-ERR:data not damage\x7\n");return ↵
// ñêîëüêî áàéò ðóøèòü? -1;}printf(".data damge\n");
#define N_BYTES_DAMAGE ((argc>1)?atol(argv[1]):_DEF_DMG)
// âîññòàíîâëåíèå ïîëüçîâàòåëüñêèõ äàííûõ
main(int argc, char **argv) //-----------------------------------------------------
{ printf("user-data recorver.................");
int a; a = CheckSector((struct RAW_SECTOR*) ↵
// çàãîëîâîê ñåêòîðà &raw_sector_for_damage, ElBy_REPAIR);
char stub_head[HEADER_SIZE]; if (a == ElBy_SECTOR_ERROR) {
// îáëàñòü ïîëüçîâàòåëüñêèõ äàííûõ printf("-ERR: NOT RECORVER YET\x7\n"); return ↵
char user_data[USER_DATA_SIZE]; -1; } printf("+OK\n");

// ñåêòîð äëÿ èñêàæåíèé // ïðîâåðêà óñïåøíîñòè âîññòàíîâëåíèÿ


struct RAW_SECTOR_MODE1 raw_sector_for_damage; //-----------------------------------------------------
// êîíòðîëüíàÿ êîïèÿ ñåêòîðà printf("user-data recorver check...........");
struct RAW_SECTOR_MODE1 raw_sector_for_compre; if(memcmp(&raw_sector_for_damage, ↵
&raw_sector_for_compre,RAW_SECTOR_SIZE))
// TITLE printf("-ERR: NOT RECORVER YET\x7\n"); ↵
//----------------------------------------------------- else printf("+OK\n");
printf("= ElByECC.DLL usage demo example by KK\n");
printf("+OK\n");
// èíèöèàëèçàöèÿ ïîëüçîâàòåëüñêèõ äàííûõ return 1;
//----------------------------------------------------- }
printf("user data initialize...............");

88
как это было

ВОСПОМИНАНИЯ ЗАМЕЧАТЕЛЬНЫХ ДНЕЙ:


ЗАРЯ КОМПЬЮТЕРИЗАЦИИ РОССИИ
И БОРЦЫ С ЖЕЛЕЗНЫМИ КОНЯМИ ТОЙ ЭПОХИ...
Когда я был молодым и еще студентом, у меня было другу. Это были незабываемые выходные. Компьютеры
много амбиций и я считал себя круче всего и вся. Тогда умирали на руках! Вот только что включался и работал.
только начинался расцвет компьютерных технологий в Кое-что поправили в Windows, перезагрузка и все... ноль
России, как говорит один мой знакомый: «В те време- эмоций: кулера не жужжат, сердце остановилось. Хаб в
на мы были маленькие, а калькуляторы большие». Сей- классе поставили тоже «потрясный»: пакеты ходили куда
час, когда я вспоминаю те славные дни, понимаю, ка- угодно, но только не по сети, может, у него была встроен-
ким я был ребенком. Я знал каплю из того моря, что я ная спутниковая антенна и он отсылал секретную инфор-
знаю сейчас, но тогда любой молодой человек, кото- мацию врагам нашей родины, не знаю. Полгода мы каж-
рый собрал два-три компьютера, уже считался если и дые выходные ходили в школу, как на работу. Оживляли,
не профессионалом, то минимум хорошо разбирающим- чинили, переставляли софт – это был ужас…
ся. Причем интересный факт, люди в то время счита- Расцвет радиорынков. Кто из москвичей помнит Ми-
ли, что в магазине продавец-консультант обязательно тино, Царицыно того времени, тот меня поймет. Поку-
навяжет им какую-то дрянь и попытается навариться палось и продавалось абсолютно все. Самое старое и
на ничего не понимающем клиенте (и положа руку на ненужное железо везлось туда. Для многих людей этот
сердце, так оно и было во многих местах). рынок стал местом старта в большой бизнес, для дру-
Вспоминаю чипсет от славной фирмы SYS. Первый! гих он был как дом родной.
Интегрированный! Дешевый до безобразия! Все в од- А сколько эмоций, когда покупалась новая игрушка.
ном. Я до сих пор уверен, что львиная доля материнс- Никогда не знал заранее, как отнесется твоя операцион-
ких плат на этом чипсете осела на просторах нашей ная система к новому приобретению. А как игры были ло-
родины. Ужас, который я испытал, собрав первую ма- кализованы… Те, кто занимался локализацией, с криком
шину на этом чипсете, я не забуду никогда! Глюки с «Стилус форева» (был такой переводчик тестов) загоня-
памятью и видео – это мелочи по сравнению со звуком ли игры в переводчик и в результате получались по исти-
модема из колонок Genius... На меня это произвело не шедевры. Играли в них не часами, а ночами и сутками,
такой эффект, что я зарекся и больше ни разу не поку- а потом с красными глазами делились друг с другом но-
пал материнские платы на чипсетах от фирмы SYS. востями игрового процесса.
Сколько богатейшего опыта получили те, кто занимал- Каждая новинка в мире железа ожидалась с нетерпе-
ся сборкой компьютеров в то время! Все кривое и со- нием и горячо обсуждалась. Каждый мегагерц в процес-
всем не рабочее железо везли к нам. И ведь собирали, соре, каждый мегабайт памяти на видеокарте казался
продавали, и это работало! очередным прорывом технологий. А сейчас отношение к
Вспоминается сборка компьютеров в одной малень- появлению нового процессора, жесткого диска или какой-
кой фирме (коих по Москве было как грибов). Ящик ви- то революционной технологии спокойнее, словно прошел
деокарт, ящик звуковых карт, коробка памяти, одна ма- дождь или проехал мимо автобус. Мы к этим событиям
теринская плата и мего-бубен, при помощи которого настолько привыкли, что уже не успеваем отследить все
рождалось творение рук человеческих – компьютер! Не новинки рынка. Сейчас, когда встает вопрос о помощи в
важно, что на него не ставился софт, и он зависал вре- приобретении компьютера, на пару дней зарываешься в
мя от времени, не важно, что из колонок доносились не Интернет и читаешь, а после удачной покупки через два
звуки, а пуки. Главное – это работало... первые 10 ми- дня выходит новый мегосуперпупер дивайс.
нут! Показали, собрали, клиенту ручкой помахали, га- Помню, как говорил одному своему товарищу, кото-
рантийный талон на маленькой бумажке (авось побыс- рый покупал по тем временам крутой компьютер Intel
трей потеряет) вручили и пошли творить дальше. Чу- Pentium 100 МГц: «Зачем тебе жесткий диск объемом
десные были времена. 1,5 Гб? Что ты на него будешь писать? Вот у меня 340
По прошествии нескольких лет школе, которую я за- Мб и мне хватает…» Посмотрел на своего железного
канчивал, администрация города подарила компьютерный коня, на котором пишется эта статья, в котором стоят
класс. Я не знаю, где они нашли эти ящики, которые гор- два винчестера по 80 Гб. И ведь, правда, хватало. Но
до назвали компьютерами, но весь класс был собран из потом вышел на сцену Windows 95 и покатилось, с каж-
машин на том самом чипсете SYS – даже то, что называ- дым годом объемы информации, которые оседали на
лось сервером. Так как я остался в очень хороших отно- жестких дисках росли, аппетиты ОС росли, потом по-
шениях со своей классной руководительницей – препо- явился формат MP3, затем MPEG...
давателем информатики в школе, то честь настроить ло-
кальную сеть из этих полутрупов досталась мне и моему Алексей Костромин

№11(12), ноябрь 2003 89


полезные советы

КТО ПРЕДУПРЕЖДЕН –
ТОТ ВООРУЖЕН

МИХАИЛ ТОРЧИНСКИЙ
90
полезные советы
Летом этого года состоялось достаточно интересное и, И наконец, в том случае, если работодатель остано-
на мой взгляд, нетривиальное событие. Прошел пер- вил на вас свой выбор, очень удобно вести переговоры
вый Семинар системных администраторов и инжене- о компенсационном пакете через посредника, в лице
ров. Его организаторы пригласили меня выступить с рекрутера. Обсуждение вопросов, связанных с деньга-
докладом на тему «Роль кадровых агентств в карьере ми, всегда сопровождается определенным дискомфор-
IT-специалиста». том: попросишь больше – сочтут, что тебя интересует
Я с радостью согласился, т.к. в последнее время все только зарплата, мало – могут подумать, что ты не уве-
чаще сталкиваюсь с тем, что многие специалисты в об- рен в себе. В такой ситуации рекрутер берет на себя
ласти информационных технологий, обладающие пре- обсуждение требований кандидата и возможностей ра-
красными профессиональными данными, хорошо обра- ботодателя. В результате при выходе на работу канди-
зованные и потенциально интересные на рынке IT, с тру- дат четко знает, на какие деньги он выходит, и нет не-
дом находят себе работу. Видимо, настало время по- обходимости лично обсуждать для себя более интерес-
пытаться понять, что же необходимо предпринять, что- ные условия.
бы грамотно выстроить свою карьеру, используя такой Но есть и обратная сторона медали в работе с КА.
ресурс, как кадровые агентства (КА)? Рынок услуг КА очень конкурентен, и, как правило, за-
Рынок IT после некоторого затишья продолжает свой казчик сотрудничает одновременно с несколькими аген-
рост. Появляются новые компании, происходят слияния тствами, рассматривая кандидатов от всех сразу. В та-
и поглощения, растет требовательность заказчиков и ком случае вероятность, что другое агентство, в кото-
сложность реализуемых проектов. Все это положитель- ром вы не проходите как кандидат, представит более
но сказывается на рынке труда – открываются новые профессионального, компетентного, опытного кандида-
вакансии, растет уровень заработной платы. та, весьма велика. Также нужно учитывать, что даже
Все больше и больше компаний выбирают работу с «ваше» КА не может ограничиться только вашей кан-
кадровым агентством как эффективный способ найти дидатурой. Заказчик требует выбора, и, как правило,
нужных профессионалов. И чтобы стать тем «избран- на одну вакансию нужно представить 5-6 человек. Так
ным» среди множества других претендентов на открыв- что в любом случае кандидату нужно проходить кон-
шиеся вакансии, необходимо научиться работать с кад- курс. И его исход зачастую трудно предугадать.
ровым агентством. Именно отсутствие навыков обще- Чаще всего случается так, что кандидат, настроен-
ния с представителями агентства очень часто стано- ный на поиск работы с помощью рекрутеров, находит
вится той помехой, которая мешает дальнейшему ка- интернет-сайт, на котором имеется список КА, и дела-
рьерному росту. ет рассылку своего резюме по большинству найденных.
Безусловно, при работе с КА существуют и положи- В данном случае он руководствуется соображением:
тельные, и отрицательные стороны. Несомненным плю- «чем больше будет рассылка, тем больше предложе-
сом является возможность получить на рассмотрение ний о работе я получу». Однако далеко не всегда такая
несколько интересных вакансий и различных работо- тактика дает положительные результаты. На рынке ра-
дателей. Более того, многие HR-службы работодателей ботают сотни КА, и нужно потратить некоторое время
перестают рассматривать кандидатов, которые «при- на то, чтобы разобраться, какие из них действительно
шли» не от агентства, «с улицы» или по знакомству. оказывают качественный сервис своим заказчикам и
Таким образом, у кандидата от агентства создается нео- соискателям, с которыми они работают. Критериям, ко-
споримое преимущество по сравнению с кандидатами, торым можно доверять при оценке рекрутинговых ком-
которые решили самостоятельно заняться рассылкой паний, являются их известность на рынке и наличие оп-
своего резюме и не имеют поддержки со стороны рек- ределенной специализации. Известные компании, как
рутера. И преимущество не только в этом. правило, работают на российском рынке достаточно
Агентство, долго работающее со своим заказчиком, давно и уже успели хорошо зарекомендовать себя. Их
хорошо знает специфику компании, людей, которые отличает также от большинства других наличие извес-
принимают в ней решения, их предпочтения и вкусы. тных brand-name-клиентов. Это очень важное отличие,
Всей этой информацией он может поделиться с канди- т.к. крупные корпоративные клиенты имеют вполне
датом, рассказать подробности о компании, о существу- сформировавшиеся и очень жесткие критерии выбора
ющем в ней стиле управления, нюансы прохождения ин- своих поставщиков, они дорожат своей репутацией и
тервью с непосредственным руководителем и т. п. «Кто тщательно выбирают себе деловых партнеров. Узнать,
предупрежден – тот вооружен» – это высказывание как с какими клиентами сотрудничает интересующее вас
нельзя лучше подходит для кандидата, настроенного на КА, как правило, можно на сайте рекрутеров.
получение места в интересующей его компании. Услуги КА должны быть для соискателей абсолютно
С помощью КА арсенал кандидата пополняется не бесплатными. До сих пор попадаются КА, которые пред-
только информацией о работодателе и рекомендация- почитают зарабатывать деньги на соискателях, неже-
ми, как с ним вести переговоры, но и грамотно состав- ли оказывать качественный, профессиональный сервис
ленным резюме и презентацией кандидата рекрутером. своим клиентам. Если вы ненароком попали в такое КА,
Если рекрутер чувствует потенциал в кандидате, он сде- сразу прощайтесь, если услышите о просьбе оплатить
лает все, чтобы убедить работодателя встретиться с какую-либо услугу. Если клиент, обратившийся в такое
претендентом. агентство, считает, что его будущий сотрудник сам дол-

№11(12), ноябрь 2003 91


полезные советы
жен заплатить за то, что его знания и опыт будут ис- Следующим этапом в работе КА является представ-
пользованы в компании, – скорее всего этот работода- ление резюме кандидата клиенту. Скорее всего, агент-
тель не то, что вы ищите. ство несколько переработает резюме соискателя, офор-
Для многих все еще мало известно, как сотруднича- мит его в индивидуальном формате, который принят в
ют между собой КА и их заказчик в лице компании, за- компании. Также резюме дополняется комментариями
интересованной в подборе персонала. Что предшеству- консультанта, которые он готовит после встречи с кан-
ет тому моменту, когда соискателю поступает предло- дидатом. В этих комментариях консультант описывает
жение выйти на работу? свои впечатления от встречи, указывает индивидуаль-
Как и в любом другом бизнесе, все начинается с пе- ные особенности соискателя, его слабые и сильные сто-
реговоров между КА и клиентом. После того как усло- роны в личностном плане.
вия сотрудничества определены, консультанты агент- После того как резюме попало в руки работодате-
ства приступают к детальному изучению той позиции, ля, им принимается решение о назначении встречи на
над которой им придется работать. Работодатель пре- своей территории. Этот этап является наиболее важ-
доставляет всю необходимую информацию о том, ка- ным и сложным в процессе поиска работы. От этой
кого сотрудника он хочет видеть у себя на рабочем ме- встречи на 90% зависит, получите ли вы заветное пред-
сте, какие требования он предъявляет к его професси- ложение о работе. Чтобы увеличить ваши шансы на
ональному опыту и личным качествам. После опреде- успех, рекрутер должен помочь вам подготовиться к
ления так называемого описания позиции консультант встрече.
приступает к поиску кандидата. Старайтесь фиксировать все, о чем вам будет гово-
Рекрутер использует массу различных методов для рить консультант, письменно. Это необходимо, т.к. ин-
того, чтобы найти тех избранных, которых он предста- формации будет достаточно много, и, чтобы не упус-
вит своему клиенту. В большинстве случаев рекрутеру тить мелочей, записи очень пригодятся.
необходимо встретиться с кандидатом, прежде чем на- Разрабатывая план беседы, надо помнить, что на
правлять резюме соискателя клиенту. Эта встреча встрече у работодателя вы предстаете неким «това-
очень важна, для многих она становится тем непреодо- ром», который нужно с успехом прорекламировать.
лимым барьером, который они не могут преодолеть. Основной посыл «аудитории» – это ваши личные дос-
Профессиональные качества соискателя, его уме- тижения, то, чем вы можете гордиться, и то, что вы де-
ния и навыки играют очень важную, но далеко не пос- лаете и знаете лучше всего.
леднюю роль на интервью в агентстве. «Человеческий Не забудьте уточнить время, место, должность и имя
фактор», личностный контакт между рекрутером и кан- человека, с которым вам предстоит встречаться. Луч-
дидатом – необходимое условие, при котором консуль- ше всего, если консультант сможет дать вам короткую
тант примет решение о дальнейшем «продвижении» со- справочную информацию о нём. «Предупрежден – зна-
искателя клиенту. чит вооружен» – это справедливо и для соискателя ва-
Встречу в агентстве нужно воспринимать очень се- кантного места. Знание личных и деловых качеств че-
рьезно, к ней нужно подготовиться. Следует продумать ловека, с которым предстоит встречаться, его харак-
ответы на возможные вопросы, подготовить свою тер и деловой опыт помогут сориентироваться, правиль-
«мини-презентацию», заранее сформулировать те воп- нее выстроить план беседы.
росы, на которые вы хотели бы знать ответ. Для мно- На встрече не следует первым поднимать тему «де-
гих технических позиций наличие развитых коммуни- нег». Работодатель уже знает, на какие деньги вы пре-
кативных навыков, а иными словами, умение общаться тендуете, т.к. это обязательно было отражено в вашем
с людьми, понимать их и быть понятыми, – не самое резюме. Логично, что, если вас пригласили на встречу,
главное. Но не следует забывать, что рекрутер в пер- значит, клиент готов предложить вам эту сумму. К тому
вую очередь оценивает ваше поведение, то, насколько же деловой этикет подобных встреч не предполагает
вы активны, доброжелательны, контактны и уверены в подобных разговоров, т.к. стороны пока еще не при-
себе. Не стоит злоупотреблять технической термино- шли к окончательному решению, и говорить о заработ-
логией, и уж тем более указывать консультанту на его ной плате, социальном пакете и бонусах пока рано. В
неосведомленность и безграмотность в тех вопросах, том случае, если работодатель первым задает вопрос
в которых вы считаете себя профи. Задача консультан- о том, на какие деньги вы рассчитываете, проявите такт
та – не вступать с вами в диспут о преимуществах той и постарайтесь не называть конкретную сумму. Попро-
или иной ОС или качестве и возможностях «железа», сите перенести обсуждение этой темы на следующие
используемого вами в работе. Консультанту нужно по- встречи. Многие агентства ведут практику переговоров
нять, насколько ваша кандидатура подходит к конкрет- по вопросу зарплат от лица кандидата и заказчика, и
ному заказчику, являетесь ли вы тем идеальным кан- чаще всего это оптимальный вариант безболезненного
дидатом, о котором было столько разговоров при об- решения проблемы.
суждении «описания позиции». Тем более, что в том По окончании встречи необходимо обязательно по-
случае, если у вас будет возможность попасть на встре- благодарить работодателя за встречу и обязательно по-
чу непосредственно к работодателю, с вами обязатель- интересоваться, каковы ваши дальнейшие шаги. По-
но пообщаются на технические темы профильные спе- мните, чем больше информации вы получите, тем лег-
циалисты, и вы блеснете своими знаниями. че вы сможете планировать дальнейшие действия.

92
полезные советы
Не стоит забывать и о таких вещах, как внешний вид. каково впечатление клиента о кандидате. Вариантов мо-
Даже если на новом месте работы от вас не потребует- жет быть три: «кандидат понравился», «не понравился»,
ся соблюдать dress-code, тем не менее на официаль- «кандидат понравился, но будем смотреть еще». Их всех
ную встречу с работодателем необходимо появиться трех вариантов только «не понравился» означает, что на
одетым по-деловому, опрятно и без излишеств. Это этот раз кандидату не повезло и дальнейшего обсужде-
может показаться странным, но некоторые кандидаты ния позиции не будет. Далеко не всегда консультант смо-
пренебрегают правилами личной гигиены, что недопу- жет совершенно правдиво объяснить, почему клиент от-
стимо при встрече с работодателем, да и в повседнев- казывается рассматривать кандидатуры в дальнейшем.
ной жизни воспринимается, мягко говоря, не очень. Т.к. в большинстве случаев отказ происходит по причи-
Надеюсь, что среди потенциальных кандидатов, чита- нам личностного характера, не всегда удобно и этично
ющих эту статью, таких нет. говорить об этом кандидату. Если же речь идет о недо-
Очень важно соблюсти пунктуальность. Опоздания статочных профессиональных качествах – скорее всего
на такие встречи недопустимы. Наилучший вариант – кандидат получит ответ, что конкретно не устраивает ра-
приехать за 10 минут до назначенного времени. Это по- ботодателя. Конечно, отказ – это всегда неприятно и вос-
зволит вам «отдышаться», освоиться в новой обстанов- принимается болезненно. Но не стоит раздражаться и
ке, еще раз подготовиться к интервью. выказывать недовольство работой КА. Не исключено, что
После того как прошла встреча у работодателя, от в другое время у КА появится новая вакансия, которая
вас будут ждать звонка консультанты агентства. Им не- вас заинтересует, и вы снова сможете сделать попытку.
обходимо узнать, как вы провели переговоры, в какой В том же случае, если вы произвели благоприятное
тональности шла беседа, какие договоренности и пред- впечатление на работодателя, ждите нескольких пос-
ложения были озвучены. Вы также можете поинтересо- ледующих встреч. Не стоит думать, что это формаль-
ваться, какое впечатление вы произвели на работодате- ность, так что на каждой их этих встреч вы должны быть
ля. Договоритесь, когда вы должны выходить «на связь» все так же собранны и подготовлены. Случается, что
в следующий раз, как будет вестись работа дальше. даже на повторных встречах делается отказ. Тем бо-
После того как прошла встреча между кандидатом и лее что кандидатов на позицию несколько и конкурс
клиентом агентства, консультанту необходимо выяснить, продолжается.

№11(12), ноябрь 2003 93


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

94
подписка

Продолжается подписка на I полугодие 2004 г.


Более подробная информация на сайте www.samag.ru
в разделе «Подписка»

Единый
подписной
индекс:

81655
по каталогу
агентства
«Роспечать»

Рады видеть
Вас нашими
читателями!

№11(12), ноябрь 2003 95


СИСТЕМНЫЙ АДМИНИСТРАТОР
№11(12), Ноябрь, 2003 год

РЕДАКЦИЯ
ЧИТАЙТЕ
Исполнительный директор
Владимир Положевец
В СЛЕДУЮЩЕМ
Ответственный секретарь
Наталья Хвостова
sekretar@samag.ru
НОМЕРЕ:
Технический редактор
Владимир Лукин
Научно-технические консультанты Безумный чертенок таки на последний. Что делать в та-
Дмитрий Горяинов Почти каждый день мы слышим о том, ком случае? Существует множество
Руслан Иванов что появился новый однодискетный/ различных утилит, так или иначе
Игорь Гарасюк LiveCD/«полновесный» дистрибутив предназначенных для улучшения за-
Linux, а вот аналогичную новость про щиты Linux-системы. В данной статье
РЕКЛАМНАЯ СЛУЖБА *BSD не каждый день услышишь. Из хочу обратить внимание на проект
тел.: (095) 928-8253 (доб. 112) новостей портала www.opennet.ru я уз- Bastille Linux.
факс: (095) 928-8253 нал о проекте Frenzy (пер. с англ. –
Константин Меделян безумие), который меня весьма заин- LTSP – вторая жизнь
reсlama@samag.ru тересовал. Процитирую разработчи- старых компьютеров
ка: «Целью проекта Frenzy является Все ОС Unix и подобные операционные
Верстка и оформление создание «портативного инструмента системы изначально подготовлены для
imposer@samag.ru системного администратора» на базе полноценной работы в среде клиент-
maker_up@samag.ru ОС FreeBSD, который было бы удоб- сервер. Основой взаимодействия гра-
Дизайн обложки но постоянно иметь при себе...» фических приложений с сервером яв-
Николай Петрочук ляется протокол Х, который реализован
Крепость для пингвина так, что ему абсолютно неважно, где
103012, г. Москва, Сегодня особое внимание уделяется находится клиент и сервер. В самом
Ветошный переулок, дом 13/15 защите серверов и персональных общем случае они работают на одном
тел.: (095) 928-8253 (доб. 112) компьютеров от вторжения извне. компьютере, но ничто не мешает раз-
факс: (095) 928-8253 Описание различных методов атак местить их на разных компьютерах.
Е-mail: info@samag.ru можно найти практически везде, у на- Такая организация позволяет эффек-
Internet: www.samag.ru падающего огромное количество спо- тивно использовать компьютерный
собов пробраться в чужой компьютер. парк организации: все ресурсоемкие
РУКОВОДИТЕЛЬ ПРОЕКТА Но сисадмину или обычному пользо- операции выполняются на специально
Петр Положевец вателю от этого не легче, все больше выделенном мощном компьютере.
УЧРЕДИТЕЛИ и больше приходится уделять време-
Владимир Положевец ни чтению документации, настройке Обживаем мир Nagios
Александр Михалев системы, но время, как правило, не В статье речь пойдет о действиях, ко-
на стороне обороняющегося, да и торые необходимо предпринять для
ИЗДАТЕЛЬ опыт приходит вместе с ошибками. русификации веб-интерфейса. Опи-
ЗАО «Издательский дом Ситуация усугубляется тем, что про- саны процедуры инсталляции допол-
«Учительская газета» изводители все чаще выпускают дис- нительного программного обеспече-
трибутивы по типу «два-в-одном», ко- ния, необходимого для работы с плос-
Отпечатано типографией торые могут быть с одинаковым ус- кой и трехмерной картами сети. Рас-
ООО «Мастер Печати» пехом установлены как на сервер, так смотрены методики создания само-
Тираж 5500 экз. и на персональный компьютер, при- дельных иконок хостов и сервисов и
Журнал зарегистрирован чем, по моему мнению, все равно для настройки Nagios, которые необходи-
в Министерстве РФ по делам печати, того, чтобы привлечь большее коли- мо задействовать для достижения вы-
телерадиовещания и средств мас- чество клиентов, упор делается все- шеуказанных целей.
совых коммуникаций (свидетельство
ПИ № 77-12542 от 24 апреля 2002г.)

За содержание статьи ответственность


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

96

Вам также может понравиться