Академический Документы
Профессиональный Документы
Культура Документы
Империя Cisco
Абсолютно все о
технологии ISDN
Практика OpenSSL
Создание
простейшей
биллинговой
системы
Пакетный фильтр
OpenLDAP и защита
данных
Безопасность
технологии
виртуальных карт
Кто такой «Системный администратор»?
Этот вопрос мне приходится слышать все чаще и чаще. Ответ оказывается далеко не триви-
альным, особенно при внимательном рассмотрении.
Первые ассоциации, возникающие у различных людей при этом вопросе: системный адми-
нистратор – «эникейщик», специальный человек, который бегает по офису и решает частые
тривиальные проблемы пользователей (сам термин возник в период различных версий DOS,
когда множество пользователей на надпись «Press any key to continue» нажимали на reset).
Зачастую это либо студенты – начинающие системные администраторы, либо люди, для ко-
торых системное администрирование не основное занятие (я на такой работе видел поэта). При
повышении профессионального уровня эти люди переходят в разряд выше.
Следующий тип системных администраторов – человек, отвечающий за работу оргтехники в
компании, обычно образование не ниже средне-специального, любит возиться с компьютерной
техникой, часто собирает и разбирает эти конструкторы. В довесок протягивает локальные сети.
В виде отдельной должности встречается в крупных компаниях.
«Зачем вы печатаете статьи про настройку ПО?», – пишут они в редакцию, – «печатайте про
настройку железа».
Другие системные администраторы возражают. Это как раз те люди, которые отвечают за
работоспособность системы, установку и настройку различных операционых систем.
Дальше эта группа делится на людей, склонных к программированию, и просто администра-
торов. Администраторы, получившие подготовку по программированию, стремятся быстро все
сделать руками, поправить неработающую процедуру установки, переписать некорректный
скрипт. Им легче в *nix-системах, особенно открытых. Другой тип стремится использовать спе-
циализированные утилиты, но вряд ли полезет внутрь программы «ради интереса». Им вполне
комфортно живется и под win-системами.
Последний тип администраторов – «гуру», «отец», «душа компании» – совмещает в себе зна-
ние «железа» и «софта», обычно склонен к программированию, одна из почти обязательных
сторон – веб-программирование. Написание и поддержка сайта на каком-либо скриптовом язы-
ке с использованием базы данных для него не является непосильной задачей. Попутно может
настроить сеть так, что к ней не надо будет прикасаться в течение года. И самое главное, он
может разговаривать с начальством. Может аргументированно обьяснить, почему требуется
модернизация, рассчитать, к каким выигрышам это приведет, к каким потерям приведет её от-
сутствие.
А как вы ответите на этот вопрос? Кто для вас «Системный админстратор»?
Ждем ваших ответов и пожеланий на форуме нашего сайта WWW.SAMAG.RU.
содержание
ВОПРОС: ОТВЕТ:
Python распространяется по лицензии программного Объекты списка, участвующие в репликации, копиру-
обеспечения с открытым исходным кодом, а можно ли для ются поверхностно. Таким образом, список l состоит из двух
него писать коммерческие программы? «ссылок» на один и тот же объект. Соответственно, изме-
нение этого объекта дает такой неожиданный результат.
ОТВЕТ:
Лицензия на Python не ограничивает его использова-
ния в каких-либо проектах. Если в вашем продукте ис- ВОПРОС:
пользован Python, достаточно указать этот факт как в Есть ли в Python тип данных массив?
самом продукте, так и в сопровождающей его докумен-
тации. Подробности в лицензии. ОТВЕТ:
Обычно в Python используется более гибкая встроен-
ная структура данных – список. Если вам действительно
ВОПРОС: нужны массивы, в стандартной библиотеке Python есть
Как превратить шестнадцатеричное представление IP- модуль array для работы с массивами чисел и символов.
адреса в строку байт? В «точечное» представление? Для эффективной работы с массивами данных лучше ис-
пользовать пакет Numeric Python. Его можно найти на http:/
ОТВЕТ: /numpy.sourceforge.net.
import binascii binascii.a2b_hex(“E786AA80”)
«.».join(map(str, map(ord, binascii.a2b_hex(“E786AA80”))))
ОТВЕТ:
ВОПРОС: Можно использовать операцию форматирования и сло-
Как в Python 2.x изменить кодировку текста в строке? варь переменных vars() следующим образом (для иллюс-
трации команды выполнены в диалоговом режиме интер-
ОТВЕТ: претатора Python):
Например, перекодировку из KOI8-R в CP1251 можно >>> a, b, c = 2, «text», 12.4 >>> print «»»a: %(a)05i, b:
%(b)s, c: %(c)8.2f»»» % vars() a: 00002, b: text, c:
сделать посредством Unicode: 12.40
unicode(«ÂÎÏÐÎÑ», «koi8-r»).encode(«cp1251») Для строкового литерала были использованы утроен-
ные кавычки: это позволяет использовать внутри строки
одиночные кавычки и апострофы без дополнительного эк-
ВОПРОС: ранирования, а также задавать текст на нескольких стро-
Почему получается такой результат? ках.
>>> l = [[0]*2]*2 >>> l [[0, 0], [0, 0]] >>> l[0][0] = 1
>>> l [[1, 0], [1, 0]]
Составил Роман Сузи
4
администрирование
УСТАНОВКА NAGIOS
АНДРЕЙ БЕШКОВ
С увеличением размера подконтрольных сетей перед каждым администратором встает вопрос о
создании единой системы мониторинга серверов и сервисов. Внедрение такой системы позволит
повысить производительность работы компании и уменьшить время простоя оборудования.
Несмотря на свои неоспоримые достоинства, коммерческие системы вроде Solar Winds, 3COM
Network Superviser и HP OpenView в данной статье рассматриваться не будут из-за своих довольно
высоких цен. В Сети существует множество бесплатных систем мониторинга. Наиболее
известными являются Nagios, Big Brother, Angel Network Monitor, HiWayS, MARS, Autostatus,
NocMonitor, RITW. Для выполнения вышеописанной задачи мы будем использовать инструмент по
имени Nagios.
Давайте рассмотрим главные зада- Можно следить за использовани- ладок в работе промежуточных зве-
чи системы мониторинга. Она дол- ем ресурсов серверов, таких как ньев. Nagios умеет строить графики
жна оповещать администратора с расход дискового пространства, работы наблюдаемых систем и карты
помощью электронной почты, пейд- свободная память и загруженность контролируемой сетевой инфраструк-
жера или sms-сообщений, если с на- процессора. туры.
блюдаемыми объектами случаются Существует возможность созда- Из своей практики работы с Nagios
какие-либо неприятности. Также вать свои собственные обработчи- приведу пример, показывающий, на-
оповещения должны отсылаться, ки событий. сколько полезен он оказался для
когда состояние объекта возвра- меня. На внешнем сетевом интерфей-
щается в норму. Вдобавок ко всем Эти обработчики будут выполнять- се нашего брандмауэра с периодич-
способам, перечисленным выше, ся при возникновении тех или иных ностью в несколько часов начиналась
Nagios позволяет использовать в ка- событий, инициированных провер- потеря пакетов. Из-за неисправности
честве инструмента оповещения ками сервисов или серверов. Такой терялось до 20% проходящего трафи-
программы, разработанные пользо- подход позволит активно реагиро- ка. По истечении минуты-другой ин-
вателями. Перед тем как мы станем вать на происходящие события и терфейс снова начинал работать как
более подробно обсуждать возмож- пытаться автоматически решать положено. По причине плавающего
ности Nagios, вам стоит посмотреть возникшие проблемы. К примеру, характера этой неполадки несколько
на демонстрационную систему, ко- можно создать обработчик событий, недель я не мог понять, почему при
торую Tom Welsh установил специ- который будет самостоятельно пе- работе с Интернетом периодически
ально для этих нужд. Быстренько резапускать повисший сервис. происходят кратковременные сбои.
идем на сайт http://nagios.square- Еще одним достоинством системы Без Nagios поиск неисправности за-
box.com/. Для авторизации исполь- мониторинга Nagios является возмож- тянулся бы надолго.
зуем имя пользователя guest и па- ность управлять ею удаленно с помо- Многим из администраторов хоро-
роль guest. Набродившись по раз- щью wap-интерфейса мобильного те- шо знаком предок Nagios по имени
ным меню и полюбовавшись на все лефона. Используя концепцию “роди- NetSaint. Несмотря на то что сайт про-
красоты веб-интерфейса, давайте тельских” хостов, легко описать екта NetSaint все еще исправно фун-
поговорим о достоинствах Nagios. иерархию и зависимости между все- кционирует, новые разработки бази-
На основе увиденного мы можем ми хостами. Такой подход чрезвычай- руются уже на исходном коде Nagios.
сделать выводы: но полезен для больших сетей, пото- Поэтому всем рекомендуется поти-
Nagios позволяет производить мо- му что позволяет производить слож- хоньку перебираться на Nagios. Изна-
ниторинг таких сетевых сервисов, ную диагностику. А это качество, в чально проект разрабатывался для
как SMTP, TELNET, SSH, HTTP, свою очередь, помогает отличить не- Linux, но наша система мониторинга
DNS, POP3, IMAP, NNTP и многих работающие хосты от тех, что недо- будет работать на основе FreeBSD
других. ступны в данный момент из-за непо- 4.5. В документации, поставляемой с
6
администрирование
Nagios, говорится, что он будет ста- сжатия изображений. Берем новей- Filter 3 was used 10 times
бильно работать и со многими други- шую версию http://www.gzip.org/zlib/. Filter 4 was used 33 times
tIME = 7 Jun 1996 17:58:08 +0000
ми Unix-подобными системами. Для На момент написания это была 1.1.4. Current memory allocation:
отображения веб-интерфейса Nagios Распаковываем и компилируем. 0 bytes
Maximum memory allocation:
нам понадобится сервер Apache. Вы 337346 bytes
вольны использовать любой другой, Total memory allocation:
# tar zvxf zlib-1.1.4.tar.gz 1023516 bytes
но в данной статье будет рассматри- # cd zlib-1.1.4 Number of allocations:
# ./configure 198
ваться именно Apache, как наиболее # make test libpng passes test
распространенный на Unix-платфор- # make install mkdir /usr/local/include/libpng
мах веб-сервер. Можно установить
систему мониторинга вообще без веб- Как вы могли бы предположить, И наконец, пришло время инстал-
интерфейса, но мы так делать не ста- LibPng служит для создания изобра- ляции. Тут уж все должно пройти лег-
нем, потому что это существенно жений в формате PNG. Я использо- ко и просто.
уменьшает удобство пользования. вал версию 1.2.5. Взять ее можно на
Для создания графиков нам пона- сайте: http://www.graphicswiz.com/ # make install
добится библиотека GD Graphics, ко- png/libpng.html.
торую написал Thomas Boutell. Она Собирается LibPng довольно-таки Теперь берем по адресу http://
необходима для создания изображе- странным и нестандартным путем. www.ijg.org/files/ библиотеку jpeg
ний в формате PNG, JPEG и WBMP. версии 6b. Я надеюсь, самые догад-
WBMP чаще всего используется кли- # tar zxvf libpng-1.2.5.tar.gz ливые читатели уже поняли, что она
ентами беспроводных устройств. По- # cd libpng-1.2.5 понадобится нам для создания изоб-
давляющее большинство браузеров ражений в формате jpeg. Поверив
пока не умеет работать с WBMP, по- Ориентируясь на тип операцион- моим заявлениям о том, что проце-
этому для нас он интереса не пред- ной системы, из директории scripts дура установки довольно проста,
ставляет. До перехода на версию 2.0.6 выбираем нужный нам makefile и ко- начнем ее выполнение.
была возможность работать с форма- пируем его в директорию с исходны-
том GIF, но от нее пришлось отказать- ми файлами. Для нашего случая ис- # tar zxvf jpegsrc.v6b.tar.gz
# cd jpeg-6b
ся из-за проблем с патентным зако- ходный файл называется make- # ./configure
нодательством. Для сжатия информа- file.freebsd. # make
ции внутри изображений GIF исполь-
зуется алгоритм LZW. Эксклюзивны- # cp ./scripts/makefile.freebsd После тестовой сборки должны
ми правами на него обладает Unisys. makefile увидеть такую картину:
В связи с вышеуказанными пробле-
мами, сетевому сообществу рекомен- Затем создаем директорию zlib и # make test
rm -f testout*
дуется использовать свободные от кладем в нее из дистрибутива zlib все ./djpeg -dct int -ppm -outfile
подобных неудобств форматы PNG и файлы с расширением *.h: testout.ppm ./testorig.jpg
./djpeg -dct int -bmp -colors 256
JPEG. В свою очередь, библиотека GD -outfile testout.bmp ./testorig.jpg
опирается на библиотеки zlib, LibPng # mkdir zlib ./cjpeg -dct int -outfile
testout.jpg ./testimg.ppm
и jpeg. У нас есть три пути, следуя ./djpeg -dct int -ppm -outfile
которым мы можем установить все Вот теперь можно проводить компи- testoutp.ppm ./testprog.jpg
./cjpeg -dct int -progressive -opt
необходимые библиотеки. В статье ляцию. Что мы с радостью выполняем. -outfile testoutp.jpg ./testimg.ppm
они будут подробно описаны по оче- ./jpegtran -outfile testoutt.jpg ./
testprog.jpg
реди. Я люблю все собирать и уста- # make all cmp ./testimg.ppm testout.ppm
навливать вручную, потому как подоб- # make test cmp ./testimg.bmp testout.bmp
cmp ./testimg.jpg testout.jpg
ный подход дает более полное пони- cmp ./testimg.ppm testoutp.ppm
мание происходящих процессов и воз- В результате на экране вы долж- cmp ./testimgp.jpg testoutp.jpg
cmp ./testorig.jpg testoutt.jpg
можность использовать самое свежее ны увидеть что-то вроде этого:
программное обеспечение. Итак, нач- Следующей командой устанавли-
нем нашу эпопею со способа, красно- Testing pngtest.png: ваем библиотеку jpeg.
Pass 0: rwrwrwrwrwrwrwrwrw
речиво называемого в народе «закат Pass 1: rwrwrwrwrwrwrwrwrw
солнца вручную». Pass 2: rwrwrwrwrwrwrwrw # make install
Pass 3: rwrwrwrwrwrwrwrwrwrwrwrwrw
Первый ингредиент – библиотека rwrwrwrwrw
zlib, написанная двумя программиста- Pass 4: rwrwrwrwrwrwrwrwrwrwrwrwrw Наконец, после всех этих мы-
rwrwrwrwrw
ми – Jean-loup Gailly и Mark Adler. Она Pass 5: rwrwrwrwrwrwrwrwrwrwrwrwrw тарств, можно заняться инсталля-
проектировалась как API общего на- rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw цией библиотеки GD. Скачиваем
Pass 6: rwrwrwrwrwrwrwrwrwrwrwrwrw
значения для сжатия данных без по- rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw исходные тексты с сайта проекта
терь. Как ни странно, но в нашем про- PASS (9782 zero samples) http://www.boutell.com/gd/. Как все-
Filter 0 was used 21 times
екте она будет использоваться по сво- Filter 1 was used 15 times гда, распаковываем и конфигуриру-
ему прямому назначению, то есть для Filter 2 was used 52 times ем дистрибутив.
8
администрирование
—with-gd-lib=/usr/local/lib – тут у нас *** Error code 67 Внесенными изменениями мы за-
лежит библиотека GD. Stop in /tmp/nagios-1.0b6. ставляем nagios.sh, запущеный без
—with-gd-inc=/usr/local/include/gd – обязательных параметров, рекурсив-
а здесь находятся ее заголовоч- Жаль, но установка с наскоку не но выполнить самого себя с парамет-
ные файлы. удалась. Ну и ладно, вот исправим ром start.
ошибки программистов, писавших Еще одна ошибка – это путь к фай-
Осмыслив все прочитанное и разоб- скрипт, и все заработает как надо. С лу, в котором будут храниться вне-
равшись с опциями команды configure, помощью любимого текстового редак- шние команды, переданные на выпол-
проводим сборку и инсталляцию. тора начинаем редактировать файл нение процессу Nagios. После инстал-
Makefile. Идем на строку 32 и ищем ляции подразумевается, что файл
# make all символы: должен располагаться в /usr/local/
# make install nagios/var/rw/nagios.cmd. Но, к сожа-
INIT_OPTS=-o root -g root лению, директория /usr/local/nagios/
Следующий шаг является необя- var/rw/ автоматически не создается. К
зательным, но желательно его все Обдумав увиденную строку, по- тому же не совсем понятен смысл со-
же выполнить. С помощью команды нимаем, что под FreeBSD пользова- здания отдельной директории для
make install-init можно создать тель root входит в группу wheel. Вно- единственного файла nagios.cmd.
скрипт, который будет выполнять за- сим изменения. Чтобы исправить вышеуказанную
пуск Nagios после перезагрузки сис- ошибку, ищем строку:
темы. Вдобавок к этому у нас появит- INIT_OPTS=-o root -g wheel
ся возможность управлять работой NagiosCmd=${prefix}/var/rw/
процесса Nagios с помощью команд Переходим на строку 154: nagios.cmd
stop, reload, start, restart, reload,
force-reload. Давайте подробнее рас- $(INSTALL) -m 774 $(INIT_OPTS) и заменяем ее на такую:
daemon-init $(DESTDIR)$(INIT_DIR)/
смотрим каждую из этих команд: nagios
start – запускает процесс Nagios; NagiosCmd=${prefix}/var/nagios.cmd
stop – останавливает текущий про- Правильно задаем имя файла
цесс Nagios; nagios.sh вместо nagios. Не стоит да- Теперь файл nagios.cmd будет со-
restart – останавливает выполня- вать общий доступ на чтение для фай- здаваться в директории /usr/local/
ющийся процесс Nagios и запус- ла скрипта. Вполне хватит режима nagios/var/.
кает новый; доступа 100. Измененная строка бу- К сожалению, это не последняя
reload – отправляет процессу Nagios дет выглядеть так: проблема, связанная с файлом
сигнал SIGHUP, заставляя его пере- nagios.cmd. При каждом перезапуске
читать конфигурационные файлы, а $(INSTALL) -m 100 $(INIT_OPTS) процесса Nagios файл внешних ко-
daemon-init $(DESTDIR)$(INIT_DIR)/
затем продолжить мониторинг; nagios.sh манд сначала удаляется, а затем со-
force-reload – производит принуди- здается вновь. Беда в том, что созда-
тельную перезагрузку конфигура- Сохраняем файл и снова выполня- ется nagios.cmd с правами процесса.
ционных файлов; ем команду инсталляции. Соответственно, он принадлежит
status – показывает статус рабо- пользователю nagios и группе nagios.
тающего процесса. # make install-init На первый взгляд, здесь нет никакой
проблемы. Поразмышляв некоторое
Для FreeBSD файл скрипта должен Итак, скрипт автозапуска создан, время, мы понимаем, что главным
располагаться в директории /usr/local/ но он все еще не готов к работе. Все поставщиком внешних команд для
etc/rc.d и называться nagios.sh. В зави- дело в том, что при перезагрузке процесса Nagios будет веб-интер-
симости от типа операционной систе- файл nagios.sh будет выполнен без фейс. Сервер Apache обычно запус-
мы, инсталлятор должен сам выбрать единого параметра командной стро- кается с правами пользователя
подходящие права доступа, местополо- ки, а для безукоризненной работы nobody группы nogroup. А это значит,
жение и имя скрипта. Например, для нужно запускать его с параметром что процесс веб-сервера не сможет
систем на основе Slackware должны по- start. Сейчас мы это исправим. От- вносить новые данные в файл
лучить соответственно /etc/rc.d/init.d и крываем файл для редактирования nagios.cmd. Самым простым решени-
rc.nagios. Ну что же, давайте попыта- и выполняем поиск строки: ем было бы дать доступ на запись
емся выполнить установку скрипта. всем, но с точки зрения безопаснос-
echo "Usage: nagios ти такое решение выглядит довольно
{start|stop|restart|reload|force-
# make install-init reload|status}" неприглядно. Вторым способом раз-
решения конфликта могло бы стать
Получаем следующие ошибки: Затем сразу после нее вставляем введение пользователя nobody в груп-
вот это: пу nagios. Но с безопасностью опять
/usr/bin/install -c -m 755 -d -o возникают неувязки. Самым лучшим
root -g root /usr/local/etc/rc.d /usr/local/etc/rc.d/nagios.sh start
install: unknown group root выходом из этой ситуации является
10
администрирование
# ll -rw-rw-r-- 1 nagios nagios 1594 # Ññûëêà íà èñïîëüçóåìûé øàáëîí
total 92 Nov 11 16:13 timeperiods.cfg host_name mail
-rw-rw-r-- 1 nagios nagios 17028 # Èìÿ õîñòà
Nov 11 15:41 cgi.cfg-sample К сожалению, файлы все еще не alias Mail Server
-rw-rw-r-- 1 nagios nagios 4480 # Ïñåâäîíèì õîñòà
Nov 11 15:41 checkcommands.cfg-sample готовы к употреблению. Nagios даже address mail.regata.ru
-rw-rw-r-- 1 nagios nagios 1577 не сможет стартовать, если мы попы- # Èìÿ õîñòà â ôîðìàòå fqdn èëè åãî
Nov 11 15:41 contactgroups.cfg-sample # àäðåñ
-rw-rw-r-- 1 nagios nagios 1485 таемся его запустить. Разобраться в check_command check-host-alive
Nov 11 15:41 contacts.cfg-sample содержимом файлов-примеров, со- # Êîìàíäà ïðîâåðêè õîñòà âûïîëíÿåòñÿ
-rw-rw-r-- 1 nagios nagios 1651 # îáû÷íî ñ ïîìîùüþ ping. Ïîäðîáíåå
Nov 11 15:41 dependencies.cfg-sample зданных во время инсталляции, до- # ìîæíî ïî÷èòàòü â ôàéëå
-rw-rw-r-- 1 nagios nagios 2022 вольно сложно. Самым лучшим выхо- # checkcommands.cfg
Nov 11 15:41 escalations.cfg-sample max_check_attempts 10
-rw-rw-r-- 1 nagios nagios 1658 дом из подобной ситуации будет унич- # Êîëè÷åñòâî ïîïûòîê ïîâòîðíîãî òåñ-
Nov 11 15:41 hostgroups.cfg-sample тожение всех конфигурационных дан- # òèðîâàíèÿ, ïîñëå òîãî êàê îäíà èç
-rw-rw-r-- 1 nagios nagios 5774 # ïîïûòîê âîçâðàòèëà îøèáî÷íûé
Nov 11 15:41 hosts.cfg-sample ных и создание их вручную под моим # ñòàòóñ.
-rw-rw-r-- 1 nagios nagios 4277 чутким руководством. Такой подход
Nov 11 15:41 misccommands.cfg-sample notification_interval 120
-rw-rw-r-- 1 nagios nagios 21332 принесет более глубокое понимание # Èíòåðâàë â ìèíóòàõ, ïî ïðîøåñòâèþ
Nov 11 15:41 nagios.cfg-sample используемой методики настройки. # êîòîðîãî íóæíî ïîâòîðíî îòñûëàòü
-rw-rw---- 1 nagios nagios 3074 # óâåäîìëåíèå, åñëè ñåðâåð âñå åùå
Nov 11 15:41 resource.cfg-sample Обнуляем все необходимые файлы. # íå ðàáîòàåò.
-rw-rw-r-- 1 nagios nagios 17668 notification_period 24x7
Nov 11 15:41 services.cfg-sample # Ïåðèîä âðåìåíè, â òå÷åíèå êîòîðîãî
-rw-rw-r-- 1 nagios nagios 1594 # cp /dev/null hosts.cfg # ñåðâåðó ðàçðåøåíî áåñïîêîèòü àäìè-
Nov 11 15:41 timeperiods.cfg-sample services.cfg contacts.cfg # íèñòðàòîðà ñâîèìè óâåäîìëåíèÿìè.
contactgroups.cfg hostgroups.cfg #  äàííîì ñëó÷àå ýòî êðóãëûå ñóòêè.
# cp /dev/null dependencies.cfg # Ïîäðîáíåå î ïåðèîäàõ ìîæíî
В названии каждого файла есть escalations.cfg # ïî÷èòàòü â ôàéëå timeperiods.cfg.
notification_options d,u,r
фрагмент -sample, значит, все выше- # Ñïèñîê ñîáûòèé, ïðè íàñòóïëåíèè
перечисленные файлы являются не Начиная с версии 1.0b2, в Nagios # êîòîðûõ íåîáõîäèìî îòñûëàòü
# óâåäîìëåíèÿ. Ñîîòâåòñòâåííî d,u,r
полноценными конфигурациями, а появилась возможность использовать # (DOWN, UNREACHABLE, RECOVERY)
всего лишь примерами. На случай, шаблоны внутри конфигурационных # îçíà÷àåò ñîáûòèÿ “ðàáîòàåò”,
# “íåäîñòóïåí”, “âîññòàíîâëåí”.
если нам вдруг захочется посмотреть, файлов. Такая методика настройки }
что там у них внутри, скопируем их в позволяет многократно снизить вре-
# Îïèñûâàåì õîñò ïî èìåíè proxy
директорию sample. Может быть, ког- мя создания рабочей конфигурации. define host{
да-то они нам еще пригодятся. Перед нами стоит задача описать два use generic-host
host_name proxy
хоста mail.regata.ru и proxy.regata.ru. # Èìÿ õîñòà. Òàêæå ñòîèò îáðàòèòü
# mkdir sample Каждый сервер, находящийся под на- # âíèìàíèå íà èçìåíèâøèåñÿ çàïèñè
# cp * ./sample # alias è address.
блюдением, должен быть описан в alias Proxy Server
файле хостов. Поэтому первым делом address proxy.regata.ru
check_command check-host-alive
Переименовываем все файлы, от- заполняем именно этот файл. max_check_attempts 10
секая цепочку символов –sample. Та- notification_interval 120
ким образом мы готовим файлы к Содержимое файла notification_period
notification_options
24x7
d,u,r
тому, чтобы Nagios смог их заметить hosts.cfg }
и правильно воспринять. В результа-
те должно получиться что-то вроде: # Îïèñûâàåì øàáëîí õîñòà Каждый хост должен состоять хотя
define host{
name бы в одной группе хостов. Опираясь
# ll generic-host на группы хостов, Nagios сможет оп-
total 94 # Èìÿ øàáëîíà – áóäåì ññûëàòüñÿ íà
-rw-rw-r-- 1 nagios nagios 17028 # íåãî ïîçæå ïðè îïèñàíèè êàæäîãî ределить, какую из групп админист-
Nov 11 16:13 cgi.cfg # õîñòà раторов нужно оповещать. Данные,
-rw-rw-r-- 1 nagios nagios 4480 notifications_enabled 1
Nov 11 16:13 checkcommands.cfg # Âêëþ÷àåì óâåäîìëåíèÿ полностью описывающие группы хо-
-rw-rw-r-- 1 nagios nagios 1577 event_handler_enabled 1 стов, находятся в файле host-
Nov 11 16:13 contactgroups.cfg # Âêëþ÷àåì îáðàáîò÷èê ñîáûòèé
-rw-rw-r-- 1 nagios nagios 1485 flap_detection_enabled 1 groups.cfg. Формат этого файла на-
Nov 11 16:13 contacts.cfg # Âêëþ÷àåì îáíàðóæåíèå ìåðöàíèÿ столько прост, что механизм шабло-
-rw-rw-r-- 1 nagios nagios 1651 process_perf_data 1
Nov 11 16:13 dependencies.cfg # Ñîáèðàòü ñòàòèñòèêó îá ýôôåêòèâ- нов применять смысла нет. Посмот-
-rw-rw-r-- 1 nagios nagios 2022 # íîñòè ðàáîòû ïðîöåññà рим, чем заполнен этот файл.
Nov 11 16:13 escalations.cfg retain_status_information 1
-rw-rw-r-- 1 nagios nagios 1658 # Ñîõðàíÿòü ñòàòóñíóþ èíôîðìàöèþ
Nov 11 16:13
-rw-rw-r--
hostgroups.cfg
1 nagios nagios 5774
# ìåæäó ïåðåçàãðóçêàìè ïðîãðàììû
retain_nonstatus_information 1
Содержимое файла
Nov 11 16:13 hosts.cfg # Ñîõðàíÿòü íåñòàòóñíóþ èíôîðìàöèþ hostgroups.cfg
-rw-rw-r-- 1 nagios nagios 4277 # ìåæäó ïåðåçàãðóçêàìè ïðîãðàììû
Nov 11 16:13 misccommands.cfg register 0 define hostgroup{
-rw-rw-r-- 1 nagios nagios 21332 # Óêàçûâàåì, ÷òî âñå âûøåîïèñàííîå – hostgroup_name regata-servers
Nov 11 16:13 nagios.cfg # ýòî øàáëîí. Çàïðåùàåì ðåãèñòðèðî-
-rw-rw---- 1 nagios nagios 3074 # âàòü ýòî îïèñàíèå êàê õîñò # Èìÿ ãðóïïû
alias Regata Servers
Nov 11 16:13 resource.cfg } # Ïñåâäîíèì ãðóïïû
drwxr-xr-x 2 root nagios 512
Nov 11 16:07 sample # Îïèñûâàåì õîñò ïî èìåíè mail contact_groups regata-admins
# Ñïèñîê ãðóïï êîíòàêòîâ, êîòîðûå
-rw-rw-r-- 1 nagios nagios 17668 define host{ # íóæíî óâåäîìëÿòü
Nov 11 16:13 services.cfg use generic-host
members mail proxy
12
администрирование
# Ïåðèîä âðåìåíè, â òå÷åíèå êîòîðîãî зависимости между хостами. Ну а 101 ?? Ss 0:20.81 /usr/
# ðàçðåøåíî ïîñûëàòü óâåäîìëåíèÿ local/nagios/bin/nagios -d /usr/local/
# î ñîñòîÿíèè ñåðâèñîâ файл escalations.cfg, в свою очередь, nagios/etc
host_notification_period 24x7 описывает эскалацию оповещений. В
# Ïåðèîä âðåìåíè, â òå÷åíèå êîòîðîãî
# ðàçðåøåíî ïîñûëàòü óâåäîìëåíèÿ связи с тем, что рассматриваемый Если, несмотря на все принятые
# î ñîñòîÿíèè õîñòîâ нами пример состоит всего из двух предосторожности, Nagios продолжа-
service_notification_options w,u,c,r
# Ñïèñîê ñîáûòèé ñåðâèñîâ, ïðè хостов, файлы зависимостей и эска- ет кричать об ошибках, то стоит убе-
# íàñòóïëåíèè êîòîðûõ íåîáõîäèìî лации нам не пригодятся. Отсюда диться, что директория /usr/local/
# îòñûëàòü óâåäîìëåíèÿ.
host_notification_options d,u,r вытекает приятный факт, говорящий, nagios/ вместе со всем своим содер-
# Ñïèñîê ñîáûòèé õîñòîâ, ïðè что необходимости заполнять их у нас жимым принадлежит пользователю
# íàñòóïëåíèè êîòîðûõ íåîáõîäèìî
# îòñûëàòü óâåäîìëåíèÿ нет. Возможно, в следующей статье я nagios и группе nagios. В случае еже-
service_notification_commands подробно опишу работу с файлами ли подобные ожидания не оправды-
notify-by-email, notify-by-epager
# Êîìàíäû ðàññûëêè óâåäîìëåíèé î зависимостей и эскалации. ваются, выполняем смену владельца.
# ñîáûòèÿõ ñåðâèñà Конфигурирование, наконец-то,
host_notification_commands host-
notify-by-email, host-notify-by-epager завершено. Перед пробным запуском # chown –R nagios:nagios /usr/
# Êîìàíäû ðàññûëêè óâåäîìëåíèé î стоит упомянуть, что Nagios может local/nagios/
# ñîáûòèÿõ õîñòà
email admin@regata.ru быть запущен четырьмя способами.
# Ïî÷òîâûé àäðåñ Давайте перечислим их. Ну если и это не помогло, то вам
pager 150345865@pager.icq.com
# Àäðåñ ñèñòåìû ïåéäæèíãà Вручную – как процесс переднего стоит запустить Nagios в режиме от-
} плана. ладки.
define contact{ Вручную – как фоновый процесс.
contact_name amon Вручную – как демон. # /usr/local/nagios/bin/nagios -v
# Èìÿ êîíòàêòà
alias Dmitry Larin Автоматически – как демон, при /usr/local/nagios/etc/nagios.cfg
# Èìÿ ÷åëîâåêà старте системы.
service_notification_period 24x7
# Ïåðèîä âðåìåíè, â òå÷åíèå êîòîðîãî В режиме отладки тексты сооб-
# ðàçðåøåíî ïîñûëàòü óâåäîìëåíèÿ î Для проверки конфигурации вос- щений обо всех найденных неполад-
# ñîñòîÿíèè ñåðâèñîâ
host_notification_period 24x7 пользуемся способом № 3. Собрав- ках будут более подробными. Это
# Ïåðèîä âðåìåíè, â òå÷åíèå êîòîðîãî шись с духом, можно попытаться за- обстоятельство поможет легче и
# ðàçðåøåíî ïîñûëàòü óâåäîìëåíèÿ î
# ñîñòîÿíèè õîñòîâ пустить систему и начать мониторинг. быстрее обнаружить ошибки. Проце-
service_notification_options w,u,c,r Воспользуемся для этих целей скрип- дура исправления ошибок в таком
# Ñïèñîê ñîáûòèé ñåðâèñîâ, ïðè
# íàñòóïëåíèè êîòîðûõ íåîáõîäèìî том nagios.sh. случае довольно проста. Исходя из
# îòñûëàòü óâåäîìëåíèÿ. этого, я надеюсь, что у вас все по-
host_notification_options d,u,r
# Ñïèñîê ñîáûòèé õîñòîâ, ïðè # /usr/local/etc/rc.d/nagios.sh лучится, если не с первого, то со
# íàñòóïëåíèè êîòîðûõ íåîáõîäèìî второго раза точно.
# îòñûëàòü óâåäîìëåíèÿ.
service_notification_commands После этого должно произойти Nagios уже выполняет мониторинг
notify-by-email, notify-by-epager одно из двух: либо Nagios начнет ра- сервисов и при наступлении крити-
# Êîìàíäû ðàññûëêè óâåäîìëåíèé î
# ñîáûòèÿõ ñåðâèñà ботать, либо на экране появится сле- ческих событий отправляет оповеще-
host_notification_commands host- дующая ошибка: ния всем, кому положено. Но по од-
notify-by-email, host-notify-by-epager
# Êîìàíäû ðàññûëêè óâåäîìëåíèé î ним оповещениям понять, что проис-
# ñîáûòèÿõ õîñòà Starting network monitor: nagios ходит, не так уж и легко. Согласи-
email amon@regata.ru
# Ïî÷òîâûé àäðåñ
/bin/sh: -l: unrecognized option тесь, что в интерактивном режиме
pager 150345865@pager.icq.com смотреть статистику работы и разби-
# Àäðåñ ñèñòåìû ïåéäæèíãà
} Не пугайтесь, если вам довелось раться с проблемами гораздо легче.
наступить на эти грабли. Приведенное Исходя из этого, давайте обратим
Каждый контакт должен принадле- выше сообщение об ошибке значит, наши взоры к процедуре настройки
жать как минимум одной контактной что операционная система, на которой веб-интерфейса. В данной статье
группе. Давайте создадим такую груп- вы работаете, не поддерживает опцию предполагается, что на машине, за-
пу для контактов, описанных выше. -l команды su. В случае с FreeBSD дело нимающейся системой мониторинга,
обстоит именно таким образом. По- работает веб-сервер Apache. Он обя-
Содержимое файла этому команда должна выглядеть так: зан быть хотя бы минимально настро-
contactgroups.cfg su -. В файле /usr/local/etc/rc.d/ nagios.sh ен и должен функционировать дос-
ищем строку, содержущую символы su таточно стабильно.
define contactgroup{ -l, и удаляем из нее букву l. Вот теперь- В файле настроек Apache httpd.conf
contactgroup_name regata-admins
# Èìÿ êîíòàêòíîé ãðóïïû то все должно работать как положено. ищем такой фрагмент текста:
alias regata.ru Admins Снова запускаем Nagios. Проверяем,
# Ïñåâäîíèì ãðóïïû <Directory "/usr/local/apache/
members tigrisha amon как он себя чувствует с помощью клю-
# Ñïèñîê êîíòàêòîâ, ñîñòîÿùèõ â cgi-bin">
ча командной строки status. AllowOverride None
# ãðóïïå Options None
} Order allow,deny
# /usr/local/etc/rc.d/nagios.sh
status Allow from all
Файл dependencies.cfg отвечает за </Directory>
PID TT STAT TIME COMMAND
14
администрирование
ВОССТАНОВЛЕНИЕ ЗАГРУЗКИ
ОПЕРАЦИОННОЙ СИСТЕМЫ LINUX
АНДРЕЙ ШЕВЧЕНКО
Как известно, операционные системы (ОС) фирмы представлять строку shell с раздела /(root) жесткого диска.
Microsoft, такие как Windows 95, Windows 98, Windows 98 Далее восстанавливаем загрузочную запись в зави-
SE и др., при переустановке не сохраняют информацию, симости от применяемого загрузчика.
помещенную в основную загрузочную запись (MBR –
Master Boot Record). Поэтому, при переустановке систе- lilo (äëÿ LILO) aspldr -m (äëÿ ASPLoader)
мы типа Windows в случае параллельного присутствия на
жестком диске еще одной ОС с загрузчиком, хранящем- Не забудем выйти отсюда командой:
ся в ОЗЗ, теряется возможность загрузки этой самой ОС.
Данное краткое руководство посвящено как раз воп- exit
росу восстановления возможности загрузки ОС Linux на
примере загрузочного диска (или дискеты) дистрибутива А потом отмонтировать раздел командой:
ASPLinux.
В качестве инструментария можно выбрать несколько umount /my_root_part
вариантов. Первый и более удачный – это загрузка сис-
темы с установочного диска. Второй – с загрузочных дис- Если все прошло гдадко, то можно смело перезагру-
кет или одной загрузочной дискеты. Но второй вариант жаться в нормальном режиме, предварительно отключив
имеет преимущество над первым ввиду своей универсаль- загрузку с CD или вытащив его.
ности. При этом все же желательно иметь достаточную
квалификацию. Способ второй
Обратимся теперь к более сложному варианту, когда под
Способ первый рукой нет диска, с помощью которого можно получить
Первым шагом необходимо установить загрузку с CD- «recovery console» или аналогичный shell.
ROM и вставить установочный диск. Для того чтобы воспользоваться таким диском, следу-
При появлении надписи «Starting ASPLoader. Press ет проделать несколько предварительных операций.
<ESC> for menu...», нажать Esc и выбрать в меню «ASPlinux Загружаем систему с любого носителя в любом режи-
Recovery Console». ме, чтобы получить shell с правами суперпользователя.
После загрузки появится приглашение командного Затем создаем файлы-устройства для разделов жестко-
интерпретатора с правами суперпользователя (пользова- го диска следующими командами:
теля root по умолчанию).
mkdir -p /my_dev
Очередным шагом будет следующая последователь- mknod /my_dev/hda b 3 0
ность команд: ...
mknod /y_dev/hda15 b 3 15
ИМПЕРИЯ
CISCO
ДЕНИС ЕЛАНСКИЙ
16
администрирование
Данной публикацией мы начинаем Коммутаторы
знакомить наших читателей с обо- Автор полагает, что читатель знаком
рудованием, выпускаемым фирмой с терминологией OSI ISO, а также с
Cisco. Основанная в 1984 году, Cisco базовыми аспектами построения
за прошедшие годы стала признан- ЛВС. Вкратце, коммутатор – это мно-
ным лидером в производстве актив- гопортовое устройство, работающее
ного сетевого оборудования. Кроме на канальном уровне, что позволяет
того, в настоящее время в сферу ин- существенно повысить производи-
тересов компании входят не только тельность сетей Ethernet, а также из-
канонические коммутаторы и марш- бежать ограничения 5/4/3. Основным
рутизаторы, но и многочисленное отличием коммутатора от повторите-
оборудование и программное обес- ля или концентратора является то, что
печение, имеющие к вычислитель- приходящие пакеты после усиления
ным сетям весьма опосредованное ретранслируются не на все доступные
отношение. Это серверы доступа, порты, а только на тот, канальный
кабели, ПО коммутаторов и марш- адрес (MAC-адрес) которого соответ-
рутизаторов (Cisco IOS – операци- ствует адресу получателя. Подобная
онная система межсетевого взаимо- формулировка не совсем корректна,
действия), ПО управления корпора- но вполне отображает суть дела.
тивными сетями (Cisco works), кон- В настоящее время в производ-
центраторы, интерфейсные модули стве находятся следующие типы ком-
и платы расширения, системы безо- мутаторов: Cisco Catalyst (далее – CC)
пасности, сетевые хранилища дан- 8500, СС 6000, СС 5000/5500, СС
ных, продукты телефонии, видеоси- 4840G, CC 4200, CC 4000, CC 3920,
стемы, системы виртуальных част- CC 3900, CC 3550, CC 3500 XL, CC
ных сетей и устройства беспровод- 3200, CC 3100, CC 2950, CC 2900 LRE
ной связи. XL. CC 2900 XL, CC 1900 & 2820, CC
Учитывая, что основным направ- 6400 UAC, Cisco 6000 IP DSL, Cisco
лением деятельности корпорации 1548 MS, Cisco BPX 8600, Cisco CSS
является производство активного 11000, Cisco IGX 8400, Cisco LATM,
сетевого оборудования (коммутато- Cisco MGX 8850 IP+ATM, Cisco MGX
ров и маршрутизаторов), именно 8200 и Cisco VCO/4K OP.
этим устройствам и будет уделено В семействе СС 8500 существует
наибольшее внимание. два направления: мультисервисные
18
администрирование
В таблице отражены специфичес- TX, WS-X6408-GBIC/WS-X6408A- шрутизаторы, предназначены для
кие особенности и преимущества GBIC, WS-X6416-GBIC, WS-X6416- сверхскоростной переадресации па-
описываемого оборудования. GBIC, WS-X6416-GE-MT, WS-X6501- кетов и для взаимодействия с гло-
Еще одним положительным мо- 10GEX4, WS-X6502-10GE, WS- бальными сетями, на этом уровне
ментом коммутаторов этого класса X6516-GBIC, WS-X6516-GE-TX, WS- обеспечивается избыточное резер-
является то, что все компоненты вы- X6816-GBIC. вирование по связям, которое позво-
полнены таким образом, что подле- Для упрощения понимания пояс- ляет многократно повысить живу-
жат «горячей» замене (это позволя- ню значение символов и цифр в ко- честь системы, перенаправляя сете-
ет вести работы по замене/добавке довых аббревиатурах. вой трафик в случае сбоев в одном
модулей без приостановки функцио- Каждое инвентарное название из физических каналов по другим
нирования всего устройства, что по- имеет строгий формат. Первые 2 линиям связи.
вышает надежность всей сети и улуч- символа определяют класс устрой- На уровне распределения
шает соотношение времен работос- ства. В данном случае это плата рас- (Distribution layer) осуществляется
пособности и сбойности). ширения. Последующие 4 цифры контроль за доступом к службам вер-
Платы расширения, поддержива- указывают семейство коммутаторов хнего уровня, тем самым повышает-
емые комму таторами семейства и количество портов. Затем указыва- ся эффективность использования
СС6000. ется быстродействие портов и тип ис- пропускной способности сети; кроме
На момент написания этого ма- пользуемых коннекторов. того, на этом уровне используются
териала существовал 31 тип интер- Стоит отметить, что оба представ- параметры QoS (качество обслужи-
фейсных плат, которые могут быть ленных в статье семейства коммута- вания), выделяя тем самым наиболее
собраны в следующие группы: торов относятся к третьему уровню приоритетные сетевые приложения и
модули коммутации Ethernet и фирменной модели Cisco. Естествен- службы; происходит маршрутизация
Fast Ethernet; но, это не означает, что устройства виртуальных ЛВС (VLAN), обеспече-
модули комму тации Gigabit серий 8500 и 6000 могут быть исполь- ние секретности и разделение состо-
Ethernet; зованы исключительно для построе- яний (Area aggregation).
модули ATM; ния ядра сети (Core layer). Они могут Что касается уровня доступа
модуль многоуровневой коммута- использоваться и на уровне доступа, (Access layer) – на нем решаются за-
ции; и на уровне распределения (Access дачи создания рабочих групп, отрас-
модуль сетевого анализа; и Distribution layers, соответственно). левых офисов – иными словами – на-
модуль обработки голоса. Согласно идеологии компании, вся- сыщение сети точками подключения.
кая сетевая структура может быть В последующей статье будет дано
По причине достаточно большого представлена в виде трех взаимо- описание коммутаторов серий 5ХХХ
количества номенклатуры изделий, действующих уровней (в случае если и 4ХХХ. Помимо этого автор возьмет
рассмотрим только часть из них. сеть не является вырожденной, на- на себя смелость поэкспериментиро-
Первая группа включает в себя пример, используются два-три ком- вать с настройками разного рода се-
следующие платы: WS-X6024-10FL- мутатора с относительно низкой про- тевых схем на базе коммутаторов и
MT, WS-X6224-100FX-MT, WS- изводительностью и плотностью пор- маршрутизаторов. Подобного рода
X6248-RJ-45, WS-X6248-TEL/WS- тов). попытки кажутся мне небесполезны-
X6248A-TEL, WS-X6324-100FX-SM, Говоря об эталонной иерархичес- ми хотя бы потому, что позволят ад-
WS-X6324-100FX-MM, WS-X6348-RJ- кой модели Cisco более подробно, министраторам, недавно работаю-
45, WS-X6524-100FX-MM, WS-X6548- можно сослаться на следующую ил- щим с сетями Cisco, избежать неко-
RJ-21, WS-X6548-RJ-45. люстрацию: торых трудностей, что вполне можно
Ко второй группе можно отнести Устройства уровня ядра (Core считать положительным элементом
следующие модули: WS-X6316-GE- layer), будь то коммутаторы или мар- всякой писательской деятельности.
СЕРГЕЙ РОПЧАН
администрирование
ISDN (Integrated Services Digital Network) нились. Не так давно – в 1992 и 1993 Стандарты ISDN описывают ряд ус-
– цифровые сети с интегральными годах – стандарты ISDN были еще раз луг прикладного уровня: факсимильную
(встроенными) услугами. Эта техноло- пересмотрены и дополнены. связь на скорости 64 Кбит/с, телексную
гия относится к сетям, в которых режим Само внедрение данной технологии связь на скорости 9600 бит/c, видео-
коммутации каналов является основ- началось в конце 80-х годов, однако вы- текст на скорости 9600 бит/c и некото-
ным, а данные обрабатываются в циф- сокая технологическая сложность рые другие.
ровой форме. Идеи перехода телефон- пользовательского интерфейса, отсут- На практике не все сети ISDN под-
ных сетей общего пользования (ТфОП) ствие единых стандартов на многие держивают все стандартные службы.
на полностью цифровую обработку дан- жизненно важные функции, а также не- Служба frame relay хотя и была разра-
ных высказывались давно. Сначала обходимость крупных капиталовложе- ботана в рамках сети ISDN, однако ре-
предполагалось, что абоненты этой ний для переоборудования телефонных ализуется, как правило, с помощью от-
сети будут передавать только голосо- АТС и каналов связи привели к тому, дельной сети коммутаторов кадров, не
вые сообщения. Такие сети получили что процесс развития данной техноло- пересекающейся с сетью коммутаторов
название IDN (Integrated Digital Network). гии затянулся на многие годы, и даже ISDN.
Термин “интегрированная сеть” отно- сейчас, когда прошло уже более 15 лет, Базовой скоростью сети ISDN явля-
сился к интеграции цифровой обработ- распространенность сетей ISDN в на- ется скорость канала DS-0, то есть 64
ки информации сетью с цифровой пе- шей стране оставляет желать лучше- Кбит/c. Эта скорость ориентируется на
редачей голоса абонентом. Идея такой го. Дольше всего в национальном мас- самый простой способ кодирования го-
сети была предложена еще в 1959 году. штабе эти сети работают в таких стра- лоса – ИКМ, хотя дифференциальное
Затем было решено, что такая сеть дол- нах, как Германия и Франция. кодирование и позволяет передавать
жна предоставлять своим абонентам не Если судить о тех или иных типах голос с тем же качеством на скорости
только возможность поговорить между глобальных сетей по коммуникационно- 32 или 16 Кбит/c.
собой, но и воспользоваться другими му оборудованию для корпоративных
услугами: факсимильной связью, теле- сетей, то может сложиться ложное впе- Интерфейсы ISDN
ксом (передача данных между двумя чатление, что технология ISDN появи- Одним из базовых принципов ISDN яв-
терминалами), видеотекстом (получе- лась где-то в 1994-95 годах, так как ляется предоставление пользователю
ние хранящихся в сети данных на свой именно в эти годы начали появляться стандартного интерфейса, с помощью
терминал), голосовой почтой и рядом первые маршрутизаторы, поддержива- которого пользователь может запра-
других. Предпосылка для создания та- ющие технологию ISDN. шивать у сети разнообразные услуги.
кого рода сетей сложилась в середине Архитектура сети ISDN предусмат- Этот интерфейс образуется между дву-
70-х годов. К этому времени уже широ- ривает несколько видов служб: мя типами оборудования, устанавлива-
ко применялись цифровые каналы Т1 некоммутируемые средства (выде- емого в помещении пользователя (CPE,
для передачи цифровых данных меж- ленные цифровые каналы); Customer Premis-es Equipment): терми-
ду АТС, а первый мощный цифровой коммутируемая телефонная сеть нальным оборудованием пользовате-
коммутатор телефонных каналов 4ESS общего пользования; ля ТЕ (хост с соответствующим адап-
был выпущен компанией Western сеть передачи данных с коммутаци- тером, маршрутизатор или телефон-
Electric в 1976 году. ей каналов; ный аппарат) и сетевым окончанием
В результате работ, проводимых по сеть передачи данных с коммутаци- NT, которое представляет собой уст-
стандартизации интегральных сетей в ей пакетов; ройство, завершающее канал связи с
ССITT, в 1980 году появился стандарт сеть передачи данных с трансляци- ближайшим коммутатором ISDN.
G.705, в котором излагались общие ей кадров; Пользовательский интерфейс ос-
идеи такой сети. Конкретные специфи- средства контроля и управления ра- нован на каналах трех типов:
кации сети ISDN появились в 1984 году ботой сети. В – со скоростью передачи данных
в виде серии рекомендаций I. Этот на- 64 Кбит/с;
бор спецификаций был неполным и не Как видно из приведенного списка, D – со скоростью передачи данных
подходил для построения законченной транспортные службы сетей ISDN дей- 16 или 64 Кбит/с;
сети. К тому же в некоторых случаях он ствительно поддерживают очень широ- H – со скоростью передачи данных
допускал неоднозначность толкования кий спектр услуг, включая популярные 384 Кбит/с (H0), 1536 Кбит/с (Н11)
или был противоречивым, то есть в це- услуги frame relay. Кроме того, большое или 1920 Kбит/c (Н12).
лом все эти спецификации на то время внимание уделено средствам контроля
были “сырыми” и требовали доработки. сети, которые позволяют маршрутизи- Рассмотрим каждый из каналов в
В результате, хотя оборудование ISDN ровать вызовы для установления со- отдельности.
и начало появляться с середины 80-х единения с абонентом сети, а также осу- Каналы типа В обеспечивают пере-
годов, оно часто было несовместимым, ществлять мониторинг и управление се- дачу пользовательских данных (оциф-
особенно если производилось в разных тью. Управляемость сети обеспечива- рованного голоса, компьютерных дан-
странах. В 1988 году рекомендации се- ется интеллектуальностью коммутато- ных или смеси голоса и данных) также
рии I были пересмотрены и приобрели ров и конечных узлов сети, поддержи- и с более низкими скоростями чем
более детальный и законченный вид, вающих стек протоколов, в том числе и 64 Кбит/с. Разделение данных осуще-
хотя некоторые неоднозначности сохра- специальных протоколов управления. ствляется с помощью техники TDM.
22
администрирование
сор TDM, который мультиплексирует Дело в том, что при небольшом ко- большего числа абонентов и для ис-
несколько низкоскоростных каналов в личестве терминалов (ТЕ1 или ТЕ2+- пользования в нем адреса других се-
один канал типа В. Точка подключения ТА) разрешается не использовать ме- тей, например Х.25. Cтандарт адреса-
оборудования типа NT2 к устройству стную офисную АТС, а подключать до ции в сетях ISDN получил номер E.164.
NT1 называется справочной точкой 8 устройств к одному устройству типа Формат Е.163 предусматривает до
типа Т. Наличие этого оборудования не NT1 (или NT2 без коммутационных 12 десятичных цифр в номере, а фор-
является обязательным в отличие от возможностей) с помощью схемы мон- мат адреса ISDN в стандарте Е.164
NT1. тажного ИЛИ. При подключении одно- расширен до 55 десятичных цифр. В
Устройства функциональной группы го устройства ТЕ (через терминальные сетях ISDN различают номер абонен-
TE1 (Terminal Equipment 1) относятся к резисторы R, согласующие параметры та и адрес абонента. Номер абонента
устройствам, которые поддерживают линии) к сетевому окончанию NT дли- соответствует точке Т подключения
интерфейс пользователя BRI или PRI. на кабеля может достигать 1000 м. При всего пользовательского оборудова-
Справочная точка S соответствует точ- подключении нескольких устройств к ния в сети. Например, вся офисная
ке подключения отдельного терминаль- пассивному кабелю максимальная АТС может идентифицироваться од-
ного оборудования, поддерживающего длина сокращается до 100-200 м. ним номером ISDN. Номер ISDN состо-
один из интерфейсов пользователя Правда, если эти устройства сосредо- ит из 15 десятичных цифр и делится,
ISDN. Таким оборудованием может точены на дальнем конце кабеля (ме- как и телефонный номер, по стандар-
быть телефон или факс-аппарат. Так нее 50 м), то длина кабеля может быть ту Е.163: поле “Код страны” (от 1 до 3
как оборудование типа NT2 может от- увеличена до 500 м. И наконец, суще- цифр), поле “Код города” и поле “Но-
сутствовать, то справочные точки S и T ствуют специальные многопортовые мер абонента”. Адрес ISDN включает
объединяются и обозначаются как S/T. устройства NT1, которые обеспечива- номер и 40 цифр подадреса, который
Устройства функциональной группы ют звездообразное подключение до 8 используется для нумерации терми-
ТЕ2 (Terminail Equipment 2) представля- устройств. При этом длина кабеля уве- нальных устройств за пользовательс-
ют собой устройства, которые не под- личивается до 1000 м. ким интерфейсом, то есть подключен-
держивают интерфейс BRI или PRI. Та- ных к точке S. Например, если на пред-
ким устройством может быть компью- Адресация в ISDN приятии имеется офисная АТС, то ей
тер, маршрутизатор с последователь- Технология ISDN разрабатывалась как можно присвоить один номер, напри-
ными интерфейсами, не относящими- основа всемирной телекоммуникаци- мер, 7-044-565-65-00, а для вызова
ся к ISDN, например, RS-232C, Х.21, онной сети, позволяющей связывать абонента имеющего адрес 235, вне-
V.34. Для подключения такого устрой- как телефонных абонентов, так и або- шний абонент должен набрать номер
ства к сети ISDN необходимо исполь- нентов других глобальных сетей – ком- 7-044-565-65-00-235.
зовать терминальный адаптер (Terminal пьютерных, телексных. Поэтому при При вызове абонентов из сети, не
Adapter, TA), который выпускается в разработке схемы адресации узлов относящейся к ISDN, их адрес может
формате сетевых адаптеров как встра- ISDN необходимо было: непосредственно заменять адрес
иваемая карта. во-первых, сделать эту схему дос- ISDN. Например, адрес абонента сети
Физический интерфейс в точке S/T таточно емкой для всемирной ад- Х.25, в которой используется система
представляет собой четырехпроводную ресации; адресации по стандарту Х.121, ему
линию. Так как кабель между устрой- во-вторых, совместимой со схема- должно предшествовать поле префик-
ствами ТЕ1 или ТА и сетевым оконча- ми адресации других сетей, чтобы са, в которое помещается код стандар-
нием NT1 или NT2 обычно имеет не- их абоненты в случае соединения та адресации, в данном случае стан-
большую длину, то разработчики стан- своих сетей через сеть ISDN могли дарта Х.121. Коммутаторы сети ISDN
дартов ISDN решили не усложнять обо- бы пользоваться привычными фор- могут обработать этот адрес коррект-
рудование, так как организация дуплек- матами адресов. Разработчики сте- но и установить связь с нужным або-
сного режима на четырехпроводной ка TCP/IP пошли по пути внедрения нентом сети Х.25 через сеть ISDN, ком-
линии намного легче, чем на двухпро- собственной схемы адресации, не- мутируя канал типа В с коммутатором
водной. Для интерфейса BRI в качестве зависимой от систем адресации Х.25, либо передавая данные по кана-
метода кодирования выбран биполяр- объединяемых сетей. Разработчи- лу типа D в режиме коммутации паке-
ный AMI, причем логическая единица ки технологии ISDN пошли по дру- тов. Префикс описывается стандартом
кодируется нулевым потенциалом, а ло- гому пути: они решили добиться ис- ISO 7498.
гический ноль – чередованием потен- пользования в адресе ISDN адре- Стандарт ISO 7498 определяет дос-
циалов противоположной полярности. сов объединяемых сетей. таточно сложный формат адреса, при-
Для интерфейса PRI используются дру- чем основной схемой адресации явля-
гие коды: те же, что и для интерфейсов Основное назначение ISDN – это ются первые два поля. Поле AFI (Athority
T1 и Е1, то есть соответственно B8ZS и передача телефонного трафика. По- and Formay Identifier) задает значения
HDB3. этому за основу адреса ISDN был взят всех остальных полей адреса и формат
Физическая длина интерфейса PRI формат международного телефонно- этих полей. Значением поля AFI явля-
колеблется от 100 м до 1000 м – в зави- го плана номеров, описанный в стан- ется один из 6 типов поддоменов гло-
симости от схемы подключения уст- дарте ITU-T E.163. Однако этот фор- бального домена адресации:
ройств. мат был расширен для поддержки четыре типа доменов соответству-
24
FAQ MySQL
Конфигурация MySQL WHERE user=’root’; ïóòü_ê_äèðåêòîðèè_MySQL\bin>mysqladmin
--user=root --password=your_password
«по умолчанию» mysql> FLUSH PRIVILEGES;
shutdown
При запуске MySQL «читает» на- Другой путь устанавливать пароль –
стройки из файла конфигурации. использование команды mysqladmin: ВНИМАНИЕ! Рекомендую также
Под Unix это могут быть файлы: удалить всех анонимных пользовате-
/etc/my.cnf; shell> mysqladmin -u root password лей и пользователей с неустановлен-
DATADIR/my.cnf; new_password ным паролем!
defaults-extra-file; Дело в том, что по умолчанию при
~/.my.cnf. Как только пароль для пользователя установке создается НЕ ТОЛЬКО root
root будет установлен, вы должны ис- и анонимный пользователь для
DATADIR – директория данных MySQL пользовать этот пароль при подклю- localhost!
(обычно это /usr/local/mysql/data при чении к MySQL-серверу от имени root!
установке из бинарников или /usr/ Изменять пароль для других Host User Password ...
local/var при установке из исходников). пользователей могут только пользо- ---- ---- --------
...
Под Windows (начиная с версии ватели с правом доступа для записи % root
3.22): и обновления к базе данных mysql. %
windows-system-directory\my.ini; Все «нормальные» пользователи
C:\my.cnf. (т.е. не являющиеся анонимными) мо- Значение % в столбце Host озна-
гут только изменить свой собственный чает «любой» – вам это надо? Думаю,
В этом файле в том числе пропи- пароль с помощью описанных выше нет, так что:
сывается пользователь root. команд или с помощью команды:
ВНИМАНИЕ! ïóòü_ê_äèðåêòîðèè_MySQL\bin> mysql -
По умолчанию пароль для root НЕ mysql> SET PASSWORD=PASSWORD('new uroot -pyour_password mysql
mysql> DELETE FROM user WHERE User='';
установлен! УСТАНОВИТЕ ЕГО! password');
mysql> DELETE FROM user WHERE
Password='';
mysql> QUIT
... Имейте в виду, что если вы кор- ïóòü_ê_äèðåêòîðèè_MySQL\bin>
user=root ректируете пароль непосредственно mysqladmin -uroot -pyour_password reload
password=âàø_íîâûé_ïàðîëü
в таблице user, вы должны дать сер-
Так как под Windows отсутствует веру команду перечитать таблицы
механизм регулирования того, от- привилегий: Создание баз данных
куда и куда можно устанавливать и доступ к ним для
соединения, ваш MySQL оказыва- mysql> FLUSH PRIVILEGES; отдельных проектов
ется открыт всему миру! Эту ситу- Вообще работать из-под пользовате-
ацию следует изменить (через ус- – в противном случае изменений не ля root – «дурной тон» и крайне небе-
тановку и настройку firewall, встро- произойдет! зопасное дело.
енным фильтратором пакетов на Поэтому рекомендую создавать
сетевой карте или иным способом)! Первичная настройка отдельную базу данных и отдельного
привилегий в MySQL пользователя для каждого рабочего
под Windows проекта.
Установка пароля для Так как установка MySQL по умолча- Операция это несложная, делать
пользователя root в MySQL нию производится максимально от- это нужно из-под пользователя root:
Так как установка MySQL по умолча- крытой, первое, что вы должны сде-
нию производится максимально от- лать – определять пароль для пользо- mysql> CREATE DATABASE mydatabase_name;
mysql> GRANT ALL PRIVILEGES ON
крытой, первое, что вы должны сде- вателя root и удалить анонимного mydatabase_name.* TO user_name@host_name
лать, – определять пароль для пользо- пользователя в MySQL. IDENTIFIED BY 'password';
вателя root в MySQL. Вы можете сделать это следую-
Вы можете сделать это следую- щим образом: где:
щим образом: user_name – имя пользователя;
ïóòü_ê_äèðåêòîðèè_MySQL\bin> mysql
mysql
host_name – хост, с которого бу-
shell> mysql -u root mysql дет производиться соединение
mysql> SET PASSWORD FOR mysql> DELETE FROM user WHERE
Host='localhost' AND User=''; (может быть, localhost);
root@localhost=PASSWORD('new_password'); mysql> QUIT
ïóòü_ê_äèðåêòîðèè_MySQL\bin>mysqladmin password – пароль, с которым бу-
Если вы достаточно уверены в сво- reload дет производится соединение.
ïóòü_ê_äèðåêòîðèè_MySQL\bin>mysqladmin
их действиях, вы можете непосред- -u root password your_password
ственно манипулировать таблицами
привилегий: После того как вы установили па-
роль для пользователя root, вы долж-
shell> mysql -u root mysql ны использовать его при обращении
mysql> UPDATE user SET
Password=PASSWORD(“new_password”) к серверу, как root. Например:
КАК ПИНГВИН
ГОВОРИТ ПО
ТЕЛЕФОНУ,
ИЛИ НАСТРОЙКА
DIALIN-СЕРВЕРА
ДЛЯ ДОСТУПА В
ИНТЕРНЕТ
И АВАРИЙНОЙ
КОНСОЛИ
АНДРЕЙ МОЗГОВОЙ
ОО том,
том, как
как настроить
настроить вв Linux
Linux модемное
модемное соединение,
соединение, уже
уже написано
написано большое
большое количество
количество статей.
статей.
Но
Но согласитесь,
согласитесь, что
что когда
когда приходится
приходится настраивать
настраивать какой-нибудь
какой-нибудь модем,
модем, будь
будь то
то входящее
входящее или
или
исходящее
исходящее соединение,
соединение, все
все равно
равно приходится
приходится открывать
открывать пару-тройку
пару-тройку документаций,
документаций, чтобы
чтобы
разобраться
разобраться во
во всем
всем практически
практически сс самого
самого начала.
начала. После
После прочтения
прочтения этой
этой статьи
статьи ситуация
ситуация не
не
изменится.
изменится. Настоящая
Настоящая статья
статья не
не претендует
претендует на
на оригинальное
оригинальное решение
решение поставленной
поставленной задачи,
задачи,
но
но это
это практически
практически готовое
готовое решение
решение попо настройке
настройке dialin-сервера.
dialin-сервера.
26
администрирование
«Аварийная консоль» – название за- вполне достаточно, если учесть, что ты – как вы, наверное, уже догада-
вораживающее, но в мире реально- не надо платить за пользование мо- лись – mgetty и pppd соответственно.
сти это всего лишь консоль, в кото- демным пулом. Хочу заметить, что
рую можно попасть благодаря тому у меня сервер имеет 18 модемов. Та- Настройка
же модемному соединению. Кстати, кое количество портов обеспечили Как Linux начинается с ядра, так и
она (консоль) становится действи- две мультипортовки от Digiboard. настройка его начинается с ядра.
тельно аварийной, когда доступ к Думаю, что подробное описание на-
вашему любимому серверу по ка- Полусухая теория стройки ядра выходит за рамки дан-
ким-либо причинам невозможен че- Назвать окончательно настроенный ной статьи, так что отмечу в общих
рез сеть, а вам срочно надо что-то сервер полноценным модемным пу- чертах. Убедитесь, что присутству-
поправить или проверить. Один лом не поворачивается язык. Но все ет поддержка последовательных
только пример удаленного админи- же. Для начала нам понадобится портов (обычно установлена, да и
стрирования чего стоит... Я имею в компьютер, подойдет практически если вы используете мультипортов-
виду небольшую сеть без «подсту- любой – тут уж на ваш выбор. Опе- ку, которую понимает ядро без до-
па» в Интернет. рационная система Linux. Я исполь- полнительных модулей, естественно
зую дистрибутив Slackware (http:// включите ее поддержку), поддерж-
Доступ в Интернет www.slackware.com), этот дистрибу- ка консоли на последовательных
Выражение «доступ в Интернет» в тив действительно достоин звания портах, pppd лучше не включать в
этой статье представляется так: Linux. Приятная загрузка в стиле ядро, а поддержать модулем (потом
пользователь ввел номер телефона, BSD, а самое главное – все можно не забудьте подгрузить необходи-
логин и пароль, нажал кнопку “OK”, подогнать напильником (а то и раш- мые модули). Сохраняем изменения,
послушал веселую трель модема и пилем, админы поймут). Описанная и собираем:
попал (по-настоящему попал) во ниже настройка при понимании про-
всемирную паутину байтов, прово- исходящего будет работать и на ос- 'make dep && make clean bzImage'
дов, серверов, а главное – инфор- тальных дистрибутивах Linux и, ду- 'make modules && make modules_install'
'make bzlilo' - íó èëè ÷òî ó âàñ òàì
мации. Кстати, главный девиз насто- маю, на всех остальных системах, 'rm -fr /' - øóòêà
ящих хакеров – не тех, что читают куда портирован pppd (FreeBSD и т. 'reboot'
от корки до корки журнал «Хакер», д.). Модем посоветую тот, который
и даже не тех, которым удалось-таки хорошо держит линию. Поймите Идем дальше... Самое время на-
стащить пароли других пользовате- меня правильно, конкретизировать строить мультипортовку. Если она
лей, воплощая в жизнь советы жур- здесь сложно. Разве что только не не поддерживается в стабильном
нала. Судите сами, ведь не так дав- winmodem. Куда цеплять? На Com- последнем ядре Linux, а производи-
но прошла новость, что пара таких порт. То, что у меня стоят мультипор- тель заявил что карточка “Linux
кулхацкеров получила срок. На что товки, а у вас нет – особого значе- compatible” – найдите на homesite
надеялись? Думали, что на их АТС ния не имеет, т.к. в системе это все- производителя драйвера... Тут я вам
нет определителя номера! Кхм, го лишь «имена файлов». Другое не в силах помочь. Главное – опре-
кхм... Вернемся к нашим баранам, дело, если вам надо выбрать муль- делите имена устройств в системе,
главный девиз настоящих хакеров: типортовку. Тут критерий тоже не куда подключен модем.
«Информация должна быть свобод- особо сложен – чтоб в Linux (или что Добрались до mgetty. Изначаль-
ной». Можете сами в этом убедить- у вас там) поддерживалась. Мой вы- но этот пакет написан для подклю-
ся, прочитав замечательный пере- бор Digiboаrd. О его настройках могу чения факса, но используется так же
вод книги «Hackers, heroes of сказать – все пучком. Есть файл ин- для dialin-серверов, особенно с по-
computer revolution», доступный в терактивной настройки, в котором явлением возможности AutoPPP (ав-
Интернете по адресу http:// все настраивается и прописывается. томатического определения ppp-со-
cooler.irk.ru/hackers/. И если вам не В результате подгружаются необхо- единения).
хочется платить за качественный димые модули и появляются новые
Интернет по модему, вы можете на- девайсы в /dev. Я же сказал – все if (ïàêåò óæå óñòàíîâëåí) {
Óáåäèòåñü, ÷òî îí ñîáðàí ñ ïàðàìåòðîì
строить dialin-сервер в вашем офи- пучком. -DAUTO_PPP.
се. Пусть не такой быстрый, но бес- Имеем: компьютер, ОС и подклю- } else {
Ñêà÷èâàåì ïîñëåäíþþ âåðñèþ mgetty ñ
платный. Почему не такой быстрый? ченный модем. Что дальше? А даль- äîìàøíåãî ñàéòà (http://
Все просто. Даже если на вашем мо- ше – программная часть. В теории это alpha.greenie.net/mgetty/), ðàñïàêîâû-
âàåì è ñîáèðàåì ñ ïàðàìåòðîì -DAUTO_PPP.
деме красуется надпись “56k”, это не выглядит так: работает машина, ви- Ïðîöåññ ñáîðêè õîðîøî îïèñàí â ôàéëå
значит, что модем полностью ис- сит включенный модем. Один про- README.1st, íî íåò íè÷åãî ïëîõîãî îïè-
ñàòü íåîáõîäèìûå íàì äåéñòâèÿ çäåñü.
пользует эту скорость. Дело в том, граммный пакет инициализирует мо- Âî-ïåðâûõ, íàäî ñêîïèðîâàòü ôàéë
что 56k модем (стандартный модем дем и обрабатывает входящие звон- 'policy.h-dist' â 'policy.h'.
Âî-âòîðûõ, îòðåäàêòèðîâàòü ôàéë
типа «Курьер») может только прини- ки. Решает, что «отдать» абоненту: 'Makefile', äîáàâèâ â íåãî çàâåòíûé
мать, но никак не посылать. Следо- консоль или Интернет. Консоль отда- ïàðàìåòð. Ôëàã çàäàåòñÿ êîìïèëÿòîðó â
110-é ñòðîêå.
вательно, максимальная скорость ется стандартными средствами, а Ин- Îòêðûâàåì ôàéë â ðåäàêòîðå, äëÿ êîãî
соединения будет 33.6k. Но этого тернет с помощью второго ПО. Паке- â ÷åì óäîáíåå, ÿ èñïîëüçóþ joe, ñïóñêà-
28
администрирование
Тестирование мого демона, установите привиле- Кстати, если у вас всего один мо-
Один из приятных моментов статьи. гию на запуск от владельца файла дем, то никто не запретит вам ука-
Если вы сделали все правильно, пе- (uid). зать IP-адрес для него прямо в /etc/
резагрузите initd (“init q”). Должны Биллинг пользователей модемного ppp/options. Продолжая тему выдачи
увидеть, как поднимутся модемы. По- пула сделан на основе выходных дан- IP-адреса, замечу, что если вы жела-
скольку pppd мы еще не настраива- ных самого pppd, поэтому мне неприн- ете выдавать каждому пользователю
ли, тестировать можно только ава- ципиально, чтобы каждый пользова- по своему IP-адресу, его (IP) нужно
рийную консоль. Думаю, вы понима- тель имел свой IP-адрес (=> каждый указать в четвертом столбце файла
ете, что если тестировать консоль, то модем имеет свой IP). Конфигураци- авторизации /etc/ppp/pap-secrets или
в “/bin/login” указан “/bin/login” (или онный файл pppd – /etc/ppp/options. Ли- /etc/ppp/chap-secrets. Строка “auth”
типа того), а галочка о выводе тер- стинг файла легче смотреть с помо- как раз и требует, чтоб пользователь
минала после установки соединения щью “egrep -v”#|^ *$’ /etc/ppp/options’, сначала ввел логин и пароль для
установлена. Да, чуть не забыл. так печатаются только незакомменти- регистрации, только потом pppd по-
Пользователи, которые мог ут рованные строки: зволит войти в сеть. Строки “+pap”
входить через аварийный вход, и “-chap” означают использовать
должны быть прописаны в систе- --- /etc/ppp/options --- только pap-авторизацию. Листинг
ме (/etc/passwd), а пользователи, 192.168.1.1: pap-secrets:
ms-dns <primary dns server ip>
использующие pppd (Интернет), ms-dns <scondary dns server ip>
должны быть прописаны в соот- ms-wins <primary wins server ip> --- cat pap-secrets ---
ms-wins <secondary wins server ip> # Secrets for authentication using PAP
ветствующих файлах настройки asyncmap 0 #client server secret ip-addr
pppd (при pap-авторизации /etc/ auth test * passfortest *
crtscts test1 * passfortest1 *
ppp/pap-secrets, при chap – /etc/ lock
ppp/chap-secrets). modem --- cat pap-secrets ---
-detach
В виндах настройте модемное со- +pap
единение. Звоним... модем берет -chap Если в качестве пароля указать
debug
трубу после нужного гудка, уста- usehostname “«»” (две двойные кавычки), pppd по-
навливается соединение и выва- proxyarp старается найти пароль в системной
lcp-echo-interval 30
ливается окно терминала. Введя lcp-echo-failure 4 базе данных паролей. Проще гово-
в терминале ligin&password, дол- --- /etc/ppp/options --- ря – в /etc/shadow.
жны увидеть любимый shell. Если Полный перевод комментариев
что-то не получилось, не пани- Первая строка – это IP-адрес файла /etc/ppp/options смотрите в
куйте. Посмотрите лог-файлы, сервера, на котором висит модем, и приложении. Большое спасибо авто-
уверен, найдете все ответы. клиента, который дозвонился на ру перевода, к сожалению, не знаю
Кстати, в будущем, имея настро- сервер. Формат строки: его имени.
енный pppd, мы так же будем про- На этом и заканчивается вся на-
верять и его работу с помощью <server ip addr>:<client ip addr> стройка модемного пула. Присту-
этого соединения. После того как пайте к тестированию, ищите ошиб-
получили shell, можно запустить как видите, я задаю IP-адрес толь- ки в логах.
“pppd”, затем клавишу “F7” для ко для сервера. Для клиентов, точ- Возникшие вопросы вы можете
закрытия терминала и продолже- нее, для модемов IP-адреса заданы задать в форуме домашнего сайта
ния работы, но уже в Интернете в отдельных файлах, имена кото- журнала, в разделе «Вопросы чита-
(pppd должен быть настроен). рых соответс твуют именам уст- телей к авторам» (URL: ht tp://
ройств, к которым подключены мо- www.samag.ru/cgi-bin/yabb/
Настройка pppd демы. У меня так: YaBB.pl?board=answer_cat) + (лучше
Это второй творческий вопрос. Есть пишите на форум, чем на почту).
масса вариантов, настройки. Так, --- ls -1 --- Незатронутой осталась тема под-
options
например, каждый пользователь мо- options.ttyD000 счета статистики пользователей.
жет иметь свой IP-адрес или каж- options.ttyD001 Могу натолкнуть на мысль: man pppd
options.ttyD002
дый модем может иметь свой IP. ... (раздел SCRIPTS). Будет время –
Можно организовать определитель --- ls -1 --- опишу пример построения биллинга,
номера (вопрос к mgetty), используя основанный на выполнении этих
его, настроить callback. Авторизация Если у вас нет мультипортовки, скриптов. Лучше, конечно пропат-
PAP, CHAP или скрипты. Опишу, как а модемов, допустим, только два, на чить сам pppd, но все же...
сделал сам и постараюсь затронуть первом и втором com-портах, фай- Как говорит один мой знакомый
другие варианты. Обратите внима- лы будут: системный администратор, читайте
ние на одну важную деталь – pppd доки – они рулез (с). Да прибудет с
должен иметь возможность запус- îáðàçîì: вами сила.
--- cat options.ttyS0 ---
каться от пользователя. Если вам не :192.168.1.2 – äâîåòî÷èå îáÿçàòåëüíî! Далее идет описание файла /etc/
удастся решить это настройкой са- --- cat options.ttyS0 --- ppp/options.
30
администрирование
#kdebug n # óäàëåííàÿ ñòîðîíà äîëæíà îòâå÷àòü #ipcp-restart <n>
# íà echo-request îòïðàâêîé echo-reply.
# Óñòàíîâòü çíà÷åíèå MTU [Maximum # Ýòà îïöèÿ ìîæåò áûòü èñïîëüçîâàíà ñ # Óñòàíîâèòü ìàêñèìàëüíîå ÷èñëî
# Transmit Unit] â <n>. Ïîêà äðóãàÿ # îïöèåé lcp-echo-failure äëÿ # ïåðåäà÷ IPCP terminate-request â <n>
# ñòîðîíà íå ïîïðîñèò ìåíüøåå çíà÷åíèå # îïðåäåëåíèÿ ÷òî óäàëåííàÿ ñòîðîíà # (ïî óìîë÷àíèþ – 3).
# ïðè äîãîâîðå î MRU, pppd áóäåò # áîëüøå íå ñîåäèíåíà. #ipcp-max-terminate <n>
# òðåáîâàòü ó ñåòåâîãî êîäà ÿäðà #lcp-echo-interval <n>
# îòïðàâëÿòü ïàêåòû äàííûõ íå áîëåå # Óñòàíîâèòü ìàêñèìàëüíîå ÷èñëî
# ÷åì ïî n áàéò ÷åðåç ñåòåâîé # Åñëè ýòà îïöèÿ çàäàíà, pppd áóäåò # ïåðåäà÷ IPCP configure-request â <n>
# èíòåðôåéñ PPP. # ñ÷èòàòü, ÷òî ñâÿçè ñ peer íåò, åñëè n # (ïî óìîë÷àíèþ – 10).
#mtu <n> # LCP echo-requests îòïðàâëåíû áåç #ipcp-max-configure <n>
# ïðèåìà ïðàâèëüíûõ LCP echo-reply.
# Óñòàíîâèòü èìÿ ëîêàëüíîé ñèñòåìû # Åñëè ýòî ñëó÷èëîñü, pppd çàâåðøèò # Óñòàíîâèòü ìàêñèìàëüíîå ÷èñëî IPCP
# äëÿ àóòåíòèôèêàöèîííûõ öåëåé â <n>. # ñâÿçü. Èñïîëüçîâàíèå ýòîé îïöèè # configure-NAKs, âîçâðàùåííûõ ïåðåä
# Âîçìîæíî, åå íàäî áóäåò óñòàíîâèòü # òðåáóåò íåíóëåâîãî çíà÷åíèÿ äëÿ # íà÷àëîì îòïðàâêè âìåñòî configure-
# â âàøå èìÿ íà âàøåì ISP, åñëè # ïàðàìåòðà lcp-echo-interval. # Rejects, â <n> (ïî óìîë÷àíèþ – 10).
# èñïîëüçóåòñÿ PAP/CHAP. # Ýòà îïöèÿ ìîæåò áûòü èñïîëüçîâàíà, #ipcp-max-failure <n>
#name <n> # ÷òîáû ðàçðåøèòü pppd çàâåðøàòü ñâÿçü,
# åñëè ôèçè÷åñêîå ñîåäèíåíèå îòñóòñòâóåò # Óñòàíîâèòü èíòåðâàë ðåñòàðòà PAP
# Óñòàíîâèòü èìÿ ïîëüçîâàòåëÿ äëÿ # (íàïð, ìîäåì áðîñèë òðóáêó) â # (ïàóçà âîçîáíîâëåíèÿ ïåðåäà÷è) â <n>
# àóòåíòèôèêàöèè ýòîé ìàøèíû íà # ñèòóàöèÿõ, êîãäà äîñòóïíû ëèíèè # ñåêóíä (ïî óìîë÷àíèþ – 3).
# äðóãîé ñòîðîíå èñïîëüçóÿ PAP, # óïðàâëåíèÿ ìîäåìîì. #pap-restart <n>
# â çíà÷åíèå <n>. ÍÅ èñïîëüçîâàòü, #lcp-echo-failure <n>
# åñëè âû èñïîëüçîâàëè îïöèþ 'name'! # Óñòàíîâèòü ìàêñèìàëüíîå ÷èñëî
#user <n> # Óñòàíîâèòü èíòåðâàë ðåñòàðòà LCP # ïåðåäà÷ PAP authenticate-request â
# (ïàóçà âîçîáíîâëåíèÿ ïåðåäà÷è) â # <n> (ïî óìîë÷àíèþ – 10).
# Çàñòàâèòü èñïîëüçîâàòü èìÿ õîñòà # <n> ñåêóíä (ïî óìîë÷àíèþ – 3). #pap-max-authreq <n>
# êàê èìÿ ëîêàëüíîé ñèñòåìû äëÿ #lcp-restart <n>
# àóòåíòèôèêàöèîííûõ öåëåé # Óñòàíîâèòü èíòåðâàë ðåñòàðòà CHAP
# (ïåðåêðûâàåò îïöèþ name). # Óñòàíîâèòü ìàêñèìàëüíîå ÷èñëî # (ïàóçà âîçîáíîâëåíèÿ ïåðåäà÷
#usehostname # ïåðåäà÷ LCP terminate-request â <n> # challenges) â <n> ñåêóíä
# (ïî óìîë÷àíèþ – 3). # (ïî óìîë÷àíèþ – 3).
# Óñòàíîâèòü èìÿ óäàëåííîé ñèñòåìû #lcp-max-terminate <n> #chap-restart <n>
# äëÿ àóòåíòèôèêàöèîííûõ öåëåé â <n>.
#remotename <n> # Óñòàíîâèòü ìàêñèìàëüíîå ÷èñëî # Óñòàíîâèòü ìàêñèìàëüíîå ÷èñëî
# ïåðåäà÷ LCP configure-request â <n> # ïåðåäà÷ CHAP challenge â <n>
# Äîáàâèòü çàïèñü äëÿ ýòîé ñèñòåìû â # (ïî óìîë÷àíèþ – 10). Íåêîòîðûå PPP- # (ïî óìîë÷àíèþ – 10).
# òàáëèöó ARP [Address Resolution # ñåðâåðà äîëãî ñòàðòóþò. Âàì ìîæåò #chap-max-challenge
# Protocol] ñ IP-àäðåñîì óäàëåííîé # ïîíàäîáèòüñÿ óâåëè÷èòü ýòó âåëè÷èíó,
# ñèñòåìû è Ethernet àäðåñîì ýòîé # åñëè âû ïîëó÷àåòå îøèáêè 'serial # Ñ ýòîé îïöèåé pppd áóäåò re-challenge
# ñèñòåìû. # line looped back' è âû ÓÂÅÐÅÍÛ, # óäàëåííóþ ñòîðîíó êàæäûå <n> ñåêóíä.
#proxyarp # ÷òî êîððåêòíî ðåãèñòðèðóåòåñü è PPP #chap-interval <n>
# äîëæåí çàïóñêàòüñÿ íà ñåðâåðå.
# Èñïîëüçîâàòü áàçó äàííûõ ïàðîëåé #lcp-max-configure <n> # Ñ ýòîé îïöèåé pppd áóäåò ïðèíèìàòü
# äëÿ èäåíòèôèêàöèè óäàëåííîé ñòîðîíû, # ïðåäëîæåíèå peer î íàøåì ëîêàëüíîì
# èñïîëüçóÿ PAP. # Óñòàíîâèòü ìàêñèìàëüíîå ÷èñëî LCP # IP-àäðåñå, äàæå åñëè ëîêàëüíûé
#login # configure-NAKs, âîçâðàùåííûõ ïåðåä # IP-àäðåñ áûë óêàçàí â îïöèÿõ.
# íà÷àëîì îòïðàâêè âìåñòî configure- #ipcp-accept-local
# Åñëè ýòà îïöèÿ íàçíà÷åíà, pppd áóäåò # Rejects, â <n> (ïî óìîë÷àíèþ – 10). # Ñ ýòîé îïöèåé pppd áóäåò ïðèíèìàòü
# îòïðàâëÿòü êàäð LCP echo-request #lcp-max-failure <n> # ïðåäëîæåíèå peer î åãî (óäàëåííîì)
# óäàëåííîé ñòîðîíå êàæäûå n ñåêóíä. # IP-àäðåñå, äàæå åñëè óäàëåííûé
# Ïîä Linux, echo-request îòïðàâëÿ- # Óñòàíîâèòü èíòåðâàë ðåñòàðòà IPCP # IP-àäðåñ áûë óêàçàí â îïöèÿõ.
# åòñÿ, êîãäà ïàêåòû íå ïðèíèìàþòñÿ îò # (ïàóçà âîçîáíîâëåíèÿ ïåðåäà÷è) â <n> #ipcp-accept-remote
# óäàëåííîé ñòîðîíû n ñåêóíä. Îáû÷íî # ñåêóíä (ïî óìîë÷àíèþ – 3). #EOF
ВСЕВОЛОД СТАХОВ
OpenSSL применяется во множестве сетевых серверов. ты через ssl в локальной сети обычно используются self-
В данной статье я бы хотел рассказать о работе с ssl апа- signed сертификаты, что естественно. Сертификат серве-
ча, постфикса и курьера. Соответственно происходит ра обычно подписывается сертификатом организации.
шифрация трафика http-, smtp- и imap(pop3)-протоколов. Итак, сгенерируем секретный ключ RSA и self-signed
При использовании шифрации ssl обычно меняется порт, сертификат организации:
чтобы клиент мог корректно определить использование
безопасного соединения. Для начала я расскажу об ис- dd if=/dev/urandom of=/etc/openssl/.rnd -count 64
openssl genrsa -rand /etc/openssl/.rnd -des3 -out /etc/
пользовании ssl в апаче. openssl/org.key
Апач может работать с ssl через модуль mod_ssl, кото- openssl req -new -key /etc/openssl/org.key -config \
/etc/openssl/org.cnf -out /etc/openssl/
рый может быть скачан с www.apache-ssl.org. Для компи- org.csr
ляции апача с данным модулем выполняем следующее: openssl x509 -req -signkey /etc/openssl/org.key -in /etc/
openssl/org.csr \
-extfile /etc/openssl/org.cnf -out /etc/openssl/
$ cd /usr/src/apache_1.3.x/src org.crt -days 365
$ SSL_BASE=/usr/src/mod_ssl/ ./configure — ... –enable-
module=ssl
Пример конфига сертификата организации (CA-серти-
После успешной компиляции необходимо получить сер- фикат, поэтому определяем некоторые расширения, ко-
тификат организации. Тут есть два пути: первый – это со- торые указываем программе x509):
здать self-signed сертификат, второй – получить сертифи-
кат от trusted root CA. Скорее всего, второй вариант будет [ req ]
default_bits = 1024
небесплатный, например, на www.thawte.com предлагают distinguished_name = req_DN
продать сертификат www-сервера за 160$ сроком действия RANDFILE = ca.rnd
extensions = v3_req
на год. С другой стороны, такой способ обеспечивает пол- [ req_DN ]
ную безопасность клиента, т.к. он будет знать, что серти- countryName = "1. Country Name
(2 letter code)"
фикат действителен. Обычно у браузеров есть набор trusted countryName_default = RU
root CA, и когда браузер получает сертификат, подписан- countryName_min = 2
countryName_max = 2
ный одним из trusted ca, то он может корректно проверить stateOrProvinceName = "2. State or Province
подпись и решить на её основании о действительности сер- Name
(full name)"
тификата www-сервера. Если же браузер получает self- stateOrProvinceName_default = region
signed сертификат, то он спрашивает у пользователя, мож- localityName = "3. Locality Name
(eg, city)"
но ли доверять этому сертификату, т.к. в этом случае кли- localityName_default = city
ент не может точно определить, откуда к нему пришёл этот 0.organizationName = "4. Organization Name
(eg, company)"
сертификат и не может проверить его подпись, т.к. она не 0.organizationName_default = organization
входит в его trusted root CA. В качестве альтернативного organizationalUnitName = "5. Organizational Unit
Name (eg, section)"
варианта, если вы работаете с несколькими крупными кли- organizationalUnitName_default = Certificate Authority
ентами, можно посоветовать принести каждому клиенту commonName = "6. Common Name
(eg, CA name) "
свой сертификат (например, на дискетке или компакте) и commonName_max = 64
вручную добавить его в trusted root CA клиента. Для рабо- commonName_default = ""
32
администрирование
emailAddress = "7. Email Address # Ñëóøàåì íà ïîðòó 443(https).
Listen 443
(eg,cert@organization.ru)" # Îïðåäåëÿåì ñïîñîá çàïðîñà ïàðîëÿ ê ñåêðåòíîìó êëþ÷ó
emailAddress_max = 40 # ñåðâåðà êàê built-in, èëè ìîæíî îïðåäåëèòü ïóòü ê
emailAddress_default = "" # âíåøíåìó ñêðèïòó, íî â áîëüøèíñòâå ñëó÷àåâ äîñòàòî÷íî
[ v3_req ] # built-in-ìåòîäà.
subjectAltName = email:copy SSLPassPhraseDialog builtin
basicConstraints = CA:true # Îïðåäåëÿåì êåøèðîâàíèå äàííûõ ssl â ôàéëå äàííûõ
nsComment = "CA certificate of # (none äëÿ îòêëþ÷åíèÿ êåøèðîâàíèÿ) è òàéìàóò îáíîâëåíèÿ
our organization" # äàííûõ â êåøå. Ìîæíî èñïîëüçîâàòü ïðè óêàçàíèè ôàéëà
nsCertType = sslCA # êåøà ñïåöèàëüíûé ôîðìàò shm (shm:/path/file [size]),
# êîòîðûé îáåñïå÷èâàåò âûñîêóþ ïðîèçâîäèòåëüíîñòü è
Теперь создаём сертификат сервера: # ðàáîòàåò ÷åðåç ìåõàíèçì shared memory.
SSLSessionCache dbm:logs/ssl_scache
#SSLSessionCache none
dd if=/dev/urandom of=/etc/openssl/.rnd count=64 SSLSessionCacheTimeout 300
openssl genrsa -rand /etc/openssl/.rnd -out /etc/openssl/ # Íàñòðàèâàåì ãåíåðàòîð ñëó÷àéíûõ ÷èñåë, óêàçûâàåì ìåòîä
httpd.key # äëÿ ðàíäîìèçàöèè. Óêàçûâàåòñÿ äâà èñòî÷íèêà ðàíäîìèçàöèè:
openssl req -new -key /etc/openssl/httpd.key -config / # íà÷àëüíûé (startup) è èíèöèàëèçèðóþùèéñÿ ïðè ïðèñîåäèíåíèè
etc/openssl/httpd.cnf \ # êëèåíòà (connect). Âîçìîæíûå çíà÷åíèÿ äëÿ ýòîãî ïàðàìåòðà:
-out /etc/openssl/httpd.csr # builtin – âñòðîåííûé èñòî÷íèê ðàíäîìèçàöèè,
# file:èìÿ_ôàéëà – ÷èòàþòñÿ äàííûå èç ôàéëà,
# file:èìÿ_ôàéëà ÷èñëî_áàéò – ÷èòàåòñÿ òîëüêî îïðåäåë¸ííîå
И подписываем его сертификатом организации: # ÷èñëî áàéò èç ôàéëà (ïîëåçíî äëÿ /dev/random
# è /dev/urandom)
SSLRandomSeed startup file:/dev/random 512
openssl x509 -req -signkey /etc/openssl/org.key -CA /etc/ SSLRandomSeed connect file:/dev/random 512
openssl/org.crt \ #SSLRandomSeed startup builtin
-extfile /etc/openssl/httpd.conf -out /etc/ #SSLRandomSeed connect builtin
openssl/httpd.crt \ #SSLRandomSeed startup file:/dev/urandom 512
-days 365 #SSLRandomSeed connect file:/dev/urandom 512
# Íàñòðàèâàåì ëîãè ssl. Óêàçûâàåì ôàéë è óðîâåíü çàïèñè
# â ëîã, âîçìîæíûå çíà÷åíèÿ óðîâíÿ ïî âîçðàñòàþùåìó ÷èñëó
Опять же здесь нужны расширения для серверного сер- # ðåãèñòðèðóåìûõ äàííûõ: none, error, warn, info, trace,
# debug.
тификата, ещё учтите, что лучше задавать CN серверно- SSLLog logs/ssl_engine_log
го сертификата как имя сервера: SSLLogLevel info
34
администрирование
возможность организации защищённого веб-интер- может сильно увеличить сложность работы, если вам не-
фейса для почты; обходимо раздавать сертификаты лично).
работа с клиентами данной фирмы; Теперь настало время обратиться к защите почтовых
для защиты некоторых мест от посторонних взглядов серверов. Одним из наиболее удобных вариантов являет-
(это несоизмеримо безопаснее, чем парольная аутен- ся использование courier в качестве pop3- и imap-серве-
тификация!) и подмены IP-адреса; ров, а в качестве MTA использовать postfix. Итак, начнём
для организации собственного CA. с курьера.
Курьер поставляется с грамотным конфигом, поэтому
Вообще агентства по выдаче персональных серти- у меня всё заработало сразу же безо всяких проблем с
фикатов работают по следующей схеме: пользователь настройкой. Единственное, что необходимо учесть, так это
заходит на сайт и просит сертификат, после чего уста- то, что сертфикат почтового сервера должен быть подпи-
навливается безопасное соединение, и клиент запол- сан CA-сертификатом (по умолчанию при сборке курьера
няет форму регистрации (включая пароль секретного генерится self-signed сертификат, но я бы рекомендовал
ключа), после этого создаётся запрос на сертификацию создать сертификат, как это было сделано в апаче или
(на сервере), и на основе сертификата организации со- воспользовавшись моим скриптиком CA, только необхо-
здаётся сертификат клиента. После этого обычно сер- димо изменить настройки extensions). Кроме этого, сер-
тификат клиента перегоняется в pkcs#12 формат и за- тификат организации, которым был подписан ключ сер-
писывается на диск. Пользователю же по мылу отправ- вера, должен находиться среди доверенных сертифика-
ляется ссылка на полученный сертификат. Этот несча- тов почтового клиента. Я всё же расскажу о некоторых
стный клиент проходит по ссылке, вводит своё имя и полезных опциях конфигурации couriera (imapd и pop3d):
пароль (в безопасном режиме – https) и перенаправля-
ется к своему сертификату. Браузер, получив сертифи- imapd-ssl
# Çàïóñêàåì ðàáîòó ìåõàíèçìà ssl äëÿ imap-ñåðâåðà. Â ôàéëàõ
кат, проверяет его подпись и после запроса помещает # esmtpd-ssl, pop3d-ssl ìîæíî òàêæå óñòàíàâëèâàòü ýòó îïöèþ
в хранилище личных сертификатов. Я здесь не буду # äëÿ êîíêðåòíîãî ñåðâåðà (íàïðèìåð, ESMTPDSSLSTART...).
IMAPDSSLSTART=YES
приводить готового решения, т.к. это дело очень твор-
ческое и создать вышеописанное не представляет тру- # Ïîðò äëÿ áåçîïàñíîãî ñîåäèíåíèÿ (ïî óìîë÷àíèþ ïîðò íå
# îïðåäåë¸í, íî îáû÷íî èñïîëüçóþòñÿ ñëåäóþùèå çíà÷åíèÿ:
да, только надо немного поработать (написать скрип- # IMAPS - 993, POPS - 995 è SMTPS - 465). Àäðåñ çàäàåòñÿ
тик, оформить всё это безобразие, организовать мыль- # êàê IP-àäðåñ.
SSLPORT=993
ную связь и.т. д.). SSLADDRESS=0
А теперь расскажу об одном непременном атрибуте
# PID-ôàéë äëÿ ssl ñåðâåðà.
каждого СА: создания списка недействительных сертифи- SSLPIDFILE=/var/run/courier/imapd[pop3d, esmtpd]-ssl.pid
катов (чтобы не переполнять текст, буду далее применять
обозначение CRL). По истечении определённого срока # Èñïîëüçîâàíèå óëó÷øåííîãî ïðîòîêîëà tls, ïî óìîë÷àíèþ
сертификат становится недействительным. Если это сер- # âûêëþ÷åíî, íî ó ìåíÿ âñ¸ ðàáîòàëî íîðìàëüíî ñ âêëþ÷åíèåì
# ðàñøèðåíèé tls. TLS èñïîëüçóåòñÿ, åñëè íåîáõîäèìî
тфикат сотрудника, то после его увольнения сертификат # èñïîëüçîâàòü îñîáûé ssl ïîðò, ò.å. ïîçâîëÿåò èñïîëüçîâàòü
также необходимо считать недействительным (а если уво- # îñîáûé ïîðò äëÿ ðàáîòû ssl.
IMAPDSTARTTLS=YES
лили вас?). Если секретный ключ сертификата стал дос-
тоянием общественности, то и его вносят в CRL. Для уп- # Çàñòàâëÿåò ðàáîòàòü ìåõàíèçì tls â ëþáûõ ñëó÷àÿõ
# (ïî óìîë÷àíèþ).
равления CRL можно использовать утилиту openssl ca. Для IMAP_TLS_REQUIRED=0
начала создаём crl:
Далее идут дополнительные настройки работы ssl.
openssl ca -gencrl -out crl.pem Обычно они используются при включенной опции
STARTTLS.
Затем просто отменяем нужные ( точнее говоря, не-
нужные) сертификаты командой: # Âñïîìîãàòåëüíàÿ ïðîãðàììà, èñïîëüçóþùàÿñÿ ïðè ðàáîòå
# ñ ssl. Íà ýòàïå êîìïèëÿöèè îíà ñîçäà¸ò ïðîñòîé ñåðòèôèêàò
# (êîòîðûé, âïðî÷åì, ó ìåíÿ íå ðàáîòàë, ïîýòîìó ÿ ñðàçó æå
openssl ca -revoke bad_cert.pem # ñîçäàë íóæíûé ìíå ïðàâèëüíûé ñåðòèôèêàò), à çàòåì, ïî
# èäåå, äîëæíà èñïîëüçîâàòüñÿ äëÿ àóòåíòèôèêàöèè êëèåíòîâ,
# íî, êàê ÿ ïîíÿë, ðàáîòàòü ïîäîáíûì îáðàçîì ýòî åù¸ íå
После каждого применения revoke необходимо обнов- # ðàáîòàåò (íå çàáûâàéòå, ÷òî êóðüåð - ýòî äîâîëüíî ìîëîäîé
# ïðîäóêò), íî âñ¸ æå óêàæåì ýòó îïöèþ íà âñÿêèé ñëó÷àé...
лять CRL командой openssl -gencrl. Для применения внут- COURIERTLS=/usr/bin/couriertls
ри СА необходимо дать клиентам возможность отменять
# Îïðåäåëåíèå âåðñèè èñïîëüçóåìîãî ïðîòîêîëà ssl:
их сертификаты, для этого необходимо предоставить им # SSL2 - SSLv2
доступ к CRL. Если же вы используете аутентификацию # SSL3 - SSLv3
# TLS1 - TLS1
через сертификаты, то пользователям необходимо понять, TLS_PROTOCOL=SSL3
как опасно потерять секретный ключ.
# Äàííàÿ îïöèÿ ðàññìàòðèâàåòñÿ êàê ìåõàíèçì ðàáîòû ssl,
Ещё способ давать пароль для секретного ключа с по- # åñëè îïðåäåë¸í ïàðàìåòð STARTTLS=YES.
мощью /dev/random, закодированного base64, и сообщать TLS_STARTTLS_PROTOCOL=TLS1
пароль клиенту только лично (можно также поиграться со # Ñïèñîê àëãîðèòìîâ øèôðàöèè. Ìîæíî íå òðîãàòü äàííûé
временем действия сертификата клиента, но зачастую это # ïàðàìåòð è îñòàâèòü åãî ïî óìîë÷àíèþ – è òàê ñðàáîòàåò
main.cf:
# Ñîçäà¸ì ñòàíäàðòíûé ñåðâåðíûé ñåðòèôèêàò (êàê áûëî óæå
# íåñêîëüêî ðàç îïèñàíî) è íåçàøèôðîâàííûé ñåêðåòíûé êëþ÷. Вместо имени сервиса можно указать номер порта
# Óêàçûâàåì äàëåå ê íèì ïóòü. (обычно 465).
smtpd_tls_cert_file = /etc/openssl/smtpd.pem
smtpd_tls_key_file = /etc/openssl/smtpd.key Sendmail также обладает возможностью использова-
ния ssl, но я не являюсь специалистом по sendmail (на-
# Óêàçûâàåì òàêæå ïóòü ê trusted root CA ôàéëó (pem-ôîðìàò)
# Ìîæíî òàêæå óêàçàòü ïóòü ê êàòàëîãó ñ CA-ñåðòèôèêàòàìè, верное, виной тому паталогическая лень и наличие более
# íî òóò âîçíèêàþò ïðîáëåìû ñ õåø-ôàéëàìè (ÿ èõ óæå простых в освоении инструментов).
# îïèñûâàë ïðè ðàçãîâîðå îá àïà÷å).
smtpd_tls_CAfile = /etc/openssl/ca.pem SSL, похоже, будет всё больше и больше использовать-
ся в сети, защищая стандартные протоколы. Поэтому каж-
# Óðîâåíü çàïèñè â ëîã. Ìåíÿåòñÿ îò 0 äî 4: дый администратор должен знать принципы работы с ssl.
# 0 – çàáèâàåì íà ëîãè; И если я помог кому-то в освоении данной темы, то могу
# 1 – âûâîäèì èíôîðìàöèþ î ñåðòèôèêàòàõ ïðè óñòàíîâêå
# ñîåäèíåíèÿ; считать свою задачу выполненной!
# 2,3,4 – ðàçëè÷íàÿ äîïîëíèòåëüíàÿ èíôà (âðîäå hex-äàìïîâ
# ïàêåòîâ è.ò.ä.).
# Ðåêîìåíäóåòñÿ èñïîëüçîâàòü çíà÷åíèå 1 èëè 2. Приведу некоторые ссылки:
smtpd_tls_loglevel = 1 http://www.openssl.org – основной сайт с документаци-
# Ïî óìîë÷àíèþ ìåõàíèçì ssl íå âêëþ÷¸í – âêëþ÷àåì åãî. ей и исходниками openssl;
smtpd_use_tls = yes http://www.apache-ssl.org – домашняя страница mod_ssl
# Óñòàíîâêîé ñëåäóþùåé îïöèè â yes (ïî óìîë÷àíèþ - no) апача;
# ìîæíî äîáèòüñÿ òîãî, ÷òî âñå êîìàíäû smtp-ñåðâåðà áóäóò http//www.postfix.org – страница производителей postfix;
# âûïîëíÿòüñÿ â ssl-ðåæèìå (ýòî íå ïîäõîäèò äëÿ ñåðâåðîâ,
# êîòîðûå ïðåäîñòàâëÿþò îáå óñëóãè: çàùèù¸ííîå ìûëî http://www.lothar.com/tech/crypto/ – страница генерато-
# è ñòàíäàðòíîå). ра случайностей EGD;
# smtpd_enforce_tls = no
http://www.thawte.com – одна из коммерческих фирм,
# Çàïðîñ íà ñåðòèôèêàò êëèåíòà. ß çäåñü íå áóäó торгующих сертификатами, предоставляет бесплатные
# îñòàíàâëèâàòüñÿ, ò.ê. âðÿä ëè êòî áóäåò ïðèìåíÿòü ýòîò
# óæàñ (òåì áîëåå, ÿ íå âèäåë íè îäíîãî êëèåíòà, ñïîñîáíîãî сертификаты для мыла и платные для всего остального.
# âûïîëíèòü àóòåíòèôèêàöèþ ïî ñåðòèôèêàòó). Ïîýòîìó ëó÷øå
# îñòàâèòü ýòó îïöèþ ïî óìîë÷àíèþ â no (ýòî òàêæå êàñàåòñÿ
# è îïöèè smtpd_tls_req_ccert). И ещё информация для тех, кто решил работать с ssl:
# smtpd_tls_ask_ccert = no не так давно в механизме openssl были обнаружены уяз-
вимости, поэтому не поленитесь сходить на
# Äëÿ ñîâìåñòèìîñòè ñî ñòàðûìè âåðñèÿìè postfix ïðèíèìàåòñÿ www.openssl.org за последними патчами.
36
БЕЗОПАСНОСТЬ
ИНТЕРНЕТ-КОММЕРЦИИ
Традиционные протоколы Интернета (например, HTTP – ос- При этом процесс аутентификации полностью «про-
новной протокол для передачи страниц WWW) не обеспе- зрачен» для пользователя, т.е. не требует от него спе-
чивают практически никакой защиты информации на пути циальных знаний или каких-либо действий, отличаю-
от сервера к клиенту и обратно. Злоумышленники доволь- щихся от обычной работы с интернет-браузером. Про-
но легко могут перехватывать информационные пакеты, токол SSL в настоящее время поддерживается большин-
искажать содержащиеся в них данные и даже перенаправ- ством браузеров, включая Microsoft Internet Explorer,
лять весь информационный обмен с клиентом на поддель- Netscape Navigator, Opera и Mozilla. О работе через бе-
ный сервер, имитирующий работу сервера вашей компа- зопасное соединение с использованием цифрового сер-
нии. В результате частная информация клиента (например, тификата в этих программах говорит специальный ин-
данные его кредитной карты) может стать достоянием по- дикатор в строке статуса.
стороннего, а сделки, совершенные с участием подстав-
ного сервера – предметом споров. Учитывая это, многие
пользователи, совершающие сделки через Интернет, про-
сто отказываются от работы с сайтом, не обеспечивающим
необходимого уровня защиты он-лайновых транзакций.
ПОЧТОВЫЙ
ФИЛЬТР
ИЛИ
MILTER =
MAIL + FILTER В версии Sendmail 8.11.6 появилось нововведение, которое приоткрывает
дверцу над таинственными процессами по обработке почтовых сообщений. И
эта дверца – программный интерфейс фильтров по содержанию (content filter
API, или, коротко, Milter) – очень существенный элемент для организации
обработки почты в масштабах всего почтового сервера.
РОМАН СУЗИ
администрирование
Если для индивидуальной настройки доставки почты в рован на C-приложения. Однако пример, который мы рас-
UNIX-системах обычно применяется procmail, то для об- смотрим ниже, использует Python Milter – обертку Milter
работки всей проходящей через сервер почты Milter под- API для языка Python. Эта обертка – полноценный объек-
ходит как нельзя кстати. Для большей эффективности ре- тный интерфейс к обрабатываемому SMTP-соединению.
комендуется применять версию Sendmail 8.12. Отметим, что использование интерпретатора скриптово-
Главными применениями Milter можно считать: го языка существенно не влияет на производительность
отклонение писем со спамом; приложения, так как приложение работает в режиме де-
организация проверки на вирусы; мона. Зато мы получаем большой выигрыш в выражении
обезвреживание опасных вложений; логики приложения-фильтра и доступ к богатым стандар-
фильтрация по содержимому; тным библиотекам Python.
организация нестандартной обработки и сортировки Чтобы использовать приложения-фильтры, нужно
почты. скомпилировать Sendmail с поддержкой Milter API. Как
это сделать, описано в документации к Sendmail. В част-
Еще раз отметим, что Milter дает доступ не только ко ности, необходимо указать в файле devtools/Site/
входящим письмам, но и к исходящим. Это позволяет пре- site.config.m4 опцию:
дотвращать злоупотребления почтовым сервером со сто-
роны местных пользователей. APPENDDEF(“conf_sendmail_ENVDEF”, “-DMILTER”)
Одной из очень полезных особенностей Milter являет-
ся его большая эффективность по сравнению с другими Для нашего примера понадобится Python 2.x и Python
средствами обработки почты. Во-первых, Milter дает при- Milter. Первый можно взять на www.python.org, а второй
ложению-фильтру доступ к информации о сообщении на – на http://www.bmsi.com/python/milter.html. Его необхо-
очень ранних стадиях его получения Sendmail: с помощью димо скомпилировать, использовав библиотеки соответ-
Milter приложение-фильтр получает атрибуты SMTP-ко- ствующей версии Sendmail. Подробнее об этом написа-
манд вместе с Sendmail, что позволяет отклонять сооб- но в документации к Python Milter. Возможно, потребует-
щения, еще не получив их в полном объеме. Во-вторых, ся дополнительно установить заголовочные файлы и
Milter поддерживает многопоточность, что позволяет библиотеки libmilter и smutil – конкретнее об этом сказа-
иметь всего один экземпляр приложения-фильтра, а не но на указанной выше www-странице. [Мне даже прихо-
запускать приложение для каждого сообщения (как это дилось переименовывать libsmutil в libsm – прим. авто-
делает procmail). В-третьих, подключение Milter-приложе- ра]. В результате компиляции Python Milter должен полу-
ния к Sendmail можно сделать достаточно безопасным, читься файл milter.so, который вместе с mime.py и
определив требуемую реакцию Sendmail на тот случай, Milter.py нужно поместить в каталог с другими модулями
если приложение-фильтр не отвечает. Наконец, приложе- Python.
ние-фильтр может находиться на другой машине, обща- Python Milter имеет в своем составе два закончен-
ясь с почтовым сервером по TCP/IP. Кстати, фильтр мо- ных примера, однако подходящий именно вам фильтр
жет быть не один. Крючки (hooks) к Milter API имеются для лучше составить самому. Приведенный ниже пример
многих известных антивирусных и антиспамовых про- (листинг 1) Milter поможет вам разобраться в Milter API.
грамм. Конечно, это не законченный продукт, а скорее конст-
Есть, конечно, у Milter и минусы. Во-первых, он рабо- руктор, который нужно доработать, добавив требуемую
тает только с Sendmail. Во-вторых, в нем не очень удобно вам логику.
(хотя и возможно) реализовать фильтрацию на основе ин- В этой небольшой программе описывается класс
дивидуальных настроек пользователей, как это имеет ме- ExampleMilter, основанный на классе Milter из модуля
сто с procmail. Milter. Для каждого SMTP-соединения создается новый
Sendmail и приложение-фильтр общаются через сокет. объект класса ExampleMilter. Отдельные методы этого
Это может быть сокет в файловой системе, IP-сокет (или объекта отвечают за обработку определенных событий
IPv6-сокет). Первый более эффективен, если обработка (см. комментарии в тексте программы). Вся информа-
почты происходит на локальной машине, а второй позво- ция, касающаяся определенного соединения, должна
ляет вынести фильтрацию почты на другую машину (или храниться в атрибутах объекта. В нашем примере так
машины). Например, один хост может быть целиком за- накапливается и хранится bodysize (размер тела сооб-
действован для фильтрации спама, другой – проверять щения) и некоторые вспомогательные объекты. (В Python
сообщения на вирусы, а третий – анализировать соответ- сам объект передается в метод в качестве первого аргу-
ствие содержимого почтовых сообщений принятой поли- мента и традиционно называется self, поэтому для рабо-
тике (скажем, образовательное учреждение может филь- ты с атрибутами внутри метода нужно использовать
тровать письма сомнительного содержания). На любом self.имя_атрибута. Кстати, в Python новые атрибуты мо-
этапе Milter может пропустить (ACCEPT), отклонить гут появляться в объекте в любой удобный момент.)
(REJECT) или выбросить (DROP) обрабатываемое сооб- Здесь следует заметить, что методы вызываются в оп-
щение. Milter также может менять список получателей ределенной последовательности, и нет гарантии, что для
письма, изменять заголовочную часть и тело. При откло- данного соединения будет вызван тот или иной метод.
нении письма можно указать его детальную причину. Например, следом за hello() может сразу последовать
Sendmail написан на C, и поэтому Milter API ориенти- abort(). Это обстоятельство необходимо учитывать при
40
администрирование
ëèñòèíã ¹2 ния от момента передачи конца сообщения фильтру.
def eom(self): В случае использования двух фильтров фрагмент ис-
"""Îáðàáîòêà ñîîáùåíèÿ: ïðîâåðêà íà âèðóñû
ñ ïîìîùüþ àíòèâèðóñà ClamAV""" ходного файла конфигурации Sendmail будет выглядеть
# Çàêðûâàåì âðåìåííûé ôàéë (åñëè îí åñòü) так:
if self.fp:
self.fp.close() MAIL_FILTER(`mainfilter', `S=inet:2525@milter.host.ru,
else: T=C:10m;S:30s;R:30s;E:10m')
return Milter.TEMPFAIL MAIL_FILTER(`filter2', `S=inet:2626@milter.host.ru,
T=C:10m;S:30s;R:30s;E:10m')
try: define(`confINPUT_MAIL_FILTERS', `mainfilter,filter2')
clam=os.popen("clamscanm <%s"%self.tempname,"r").read()
if clam.find("FOUND") != -1: Информация на фильтры посылается в порядке их опи-
self.log(“virus rejected: %s” % clam) сания. Следующий алгоритм взаимодействия Sendmail и
self.setreply(“550”,’5.1.1',’VIRUS FOUND %s’ % clam)
return Milter.REJECT Milter приведен в документации к Sendmail:
except:
dbg_except()
self.log(“msg accepted: size=%s” % self.bodysize) Äëÿ êàæäîãî ñîåäèíåíèÿ:
return Milter.ACCEPT Äëÿ êàæäîãî ôèëüòðà:
Âûçâàòü connect()
Milter.ACCEPT (принять), Milter.DROP (выбросить) или про- Âûçâàòü hello()
должить обработку – Milter.CONTINUE. В методе eom() Äëÿ êàæäîãî ñîîáùåíèÿ (ïîñëåäîâàòåëüíî):
Äëÿ êàæäîãî ôèëüòðà:
можно менять некоторые свойства обрабатываемого со- Âûçâàòü envfrom()
общения (см. комментарии в листинге 1). Напомним, что Äëÿ êàæäîãî ïîëó÷àòåëÿ:
Äëÿ êàæäîãî ôèëüòðà:
состав получателей не обязательно соответствует содер- Âûçâàòü envrcpt()
жимому полей To, Cc, Bcc, так как эти данные передают- Äëÿ êàæäîãî ôèëüòðà:
Äëÿ êàæäîãî ïîëÿ çàãîëîâêà:
ся отдельными командами протокола SMTP. Âûçâàòü header()
Для включения фильтра необходимо добавить пример- Âûçâàòü eoh()
Äëÿ êàæäîãî ôðàãìåíòà òåëà:
но следующие две строки к файлу sendmail.mc: Âûçâàòü body()
Âûçâàòü eom()
MAIL_FILTER(`mainfilter', `S=inet:2525@milter.host.ru, Äëÿ êàæäîãî ôèëüòðà:
T=C:10m;S:30s;R:30s;E:10m') Âûçâàòü close()
define(`confINPUT_MAIL_FILTERS', `mainfilter')
Примечание: при обрыве соединения на любой стадии
Здесь milter.host.ru и 2525 – хост, на котором запущен и по инициативе любого агента вызывается abort() и
Milter, и порт (номер выбран произвольно). close().
Если вы привыкли напрямую править sendmail.cf (что В листинге 2 приведен вариант метода eom(), с помо-
очень не рекомендуется), то в него нужно добавить сле- щью которого можно вызывать из Milter произвольные про-
дующее: граммы для проверки сообщения (например, на спам и
вирусы). В этом методе вызывается программа
O InputMailFilters=mainfilter clamscanm, принимающая файл на стандартный ввод и
#O Milter.LogLevel O Milter.macros.connect=j, _, {daemon_name},
{if_name}, {if_addr} выводящая результат на стандартный вывод. Результат
O Milter.macros.helo={tls_version}, {cipher}, {cipher_bits}, читается методом read() целиком и анализируется на при-
{cert_subject}, {cert_issuer}
O Milter.macros.envfrom=i, {auth_type}, {auth_authen}, сутствие подстроки «FOUND». Если есть такая строка,
{auth_ssf}, {auth_author}, {mail_mailer}, {mail_host}, Milter устанавливает причину отказа методом setreply, пи-
{mail_addr}
O Milter.macros.envrcpt={rcpt_mailer}, {rcpt_host}, {rcpt_addr} шет в лог и отклоняет сообщение. Так как все это проис-
Xfilteronegoru, S=inet:2525@milter.host.ru, ходит при установленном SMTP-соединении, отправитель
T=C:10m;S:30s;R:30s;E:10m
Описание каждого фильтра в файле конфигурации получит «отлуп» сразу. Аналогично можно проверять по-
Sendmail может сопровождаться тремя опциями: F, S и чту на спам.
T. Если опция F не задана, то проблемы с фильтром без- Следует отметить, что в процессе эксплуатации неак-
болезненны для доставляемого Sendmail сообщения. куратно запрограммированный Milter может оставлять за
Если F=T, неработоспособность фильтра приводит к вре- собой временные файлы. Следующая небольшая програм-
менной неудаче (temporary fail) доставки сообщения. Если ма на Python стирает оставленные Milter устаревшие фай-
F=R и фильтр недоступен, сообщение отвергается лы из каталога /var/tmp:
(reject). В опции S указывается адрес фильтра, имеющий
один из приведенных ниже форматов: #!/usr/bin/python import os, glob, time, stat recent =
time.time() - 60*20 # 20 min for fl in glob.glob(“/var/tmp/
*.tmp”):
S=local:ïóòü try:
S=inet:ïîðò@õîñò if os.stat(fl)[stat.ST_MTIME] < recent:
S=inet6:ïîðò@õîñò os.unlink(fl)
except:
pass
Здесь путь – путь к UNIX-сокету в локальной файло-
вой системе, остальные – IP-сокеты на некотором хосте. Итак, Milter дает нам полный контроль над передачей
Опции Т задают таймауты. C – таймаут соединения с сообщений на самом раннем этапе – этапе входящего
фильтром; S – таймаут при передаче информации от SMTP-соединения. Фильтры можно писать на C/C++, Perl
Sendmail фильтру; R – таймаут при ожидании ответа филь- и других языках, тем не менее Python Milter отлично справ-
тра; E – таймаут ожидания окончательного подтвержде- ляется с задачей.
СОЗДАНИЕ
ПРОСТЕЙШЕЙ
БИЛЛИНГОВОЙ
СИСТЕМЫ
Наверное, хотя бы один раз в жизни каждому из нас приходилось покупать Интернет по Dial-Up.
А раз так, то каждый из нас сталкивался с биллинговой системой: подсчетом количества времени,
трафика (мегабайт) и денег.
ДЕНИС МЯСНИЧЕНКО
администрирование
В сумме весь данный комплекс про- программу под управлением Unix – сание системы), то зачастую вы по-
грамм и называется биллинговой си- но в итоге можно спорить сколько лучаете готовую систему, но если что-
стемой. Но биллинговые системы угодно и не прийти к единому мне- то пойдет не так, вы будете отвечать
используются не только у интернет- нию. Единственной альтернативой перед вашими клиентами сами.
сервис-провайдеров (Internet Service будет использование платформы Есть еще нюанс. Компании всегда
Provider). Web и, как следствие, использова- предоставляют уже готовую систему,
Если на вашей АТС поминутная ние программы apache web server, а с одной стороны, это очень удобно, к
оплата переговоров по коммутиру- в самой программе – генерация вам приедут знающие специалисты
емой линии, то на этой АТС также html-страниц для показа через Сеть. и создадут всю систему «под ключ»
обязательно должна работать бил- буквально за несколько дней, но есть
линговая система. и обратная сторона медали: биллин-
Если вы пользуетесь мобильным Анализ биллинговых говая система будет у вас не уни-
телефоном, то у компании-провай- систем на рынке софта кальная, а это в свою очередь зна-
дера телефонных услуг также суще- Если вы решили приобрести уже го- чит, что вас смогут «взломать». Так
ствует огромный комплекс биллин- товый биллинг, для начала определи- как опытные хакеры могут найти
говых программ. тесь: что именно вам нужно. одну «дыру» в системе и, соответ-
В нашем контексте (для ИСП) Для некоторых провайдеров мо- ственно, могут взломать и все подоб-
«биллинговая система» имеет смысл жет быть выгоднее купить уже гото- ные системы. В данном случае даже
как комплекс программ для учета ко- вый комплекс биллинговых программ, самая простая, но уникальная систе-
личества секунд и байт, затраченных нежели писать их самим, для этого ма будет в огромном выигрыше, т.к.
пользователем в Интернете. Вы мо- сделаем небольшой анализ рынка ни у кого больше такой нет.
жете спросить, почему же именно се- биллинговых систем. Итак, несколько замечаний по по-
кунд и байт? Очень просто – это ба- На нашем рынке программного воду выбора программ биллинга в за-
зовые единицы измерения. Ведь обеспечения вы можете найти практи- висимости от того, что именно вам
именно из секунд мы можем получить чески любые биллинги, их разрабаты- надо подсчитывать и каким именно
остальные значения: минуты, часы, вают многие компании, но очень мало оборудованием вы можете распола-
сутки и так далее; из байт – килобай- кто может позволить себе купить дан- гать. Но нельзя считать взгляд авто-
ты, мегабайты и т. д. «А деньги?» – ные программные продукты в силу их ра единственным и непогрешимым,
возразите вы. Да, все правильно, но огромной стоимости. Например, бил- тем более в области информационных
исходя из секунд и байт, вы сможете, линговые системы для телефонных технологий можно одно и то же сде-
установив тариф, получить деньги. компаний стоят начиная от $500000. А лать многими способами.
Биллинговые системы бывают это уже совершенно другой уровень, Если вам надо подсчитывать вре-
разные, их можно примерно разде- нежели компании интернет-провайде- мя пребывания пользователя на мо-
лить по нескольким признакам: ра, тут биллинг можно приобрести и за демном пуле по коммутируемой ли-
под какую операционную систему $200. Но все упирается в то, что имен- нии, то вам легче всего будет зака-
написан данный биллинг (Windows, но будет делать данный биллинг! В зать биллинг у программиста. Это
Unix, Linux, OS/2 и т. д.); среднем цена достаточно хорошего дешево (около $200); система будет
по какому принципу данный комп- биллинга колеблется от $500 до $5000 формировать свои выводы в виде
лекс работает (принцип «счетчи- для компаний ИСП. html-страниц как единственного уни-
ка», принцип «снифера», принцип И как вы понимаете, за разные версального средства отображения
«анализа log-файлов» и т. д.); суммы создаются и разные биллинги. информации. Причем за $200 вы по-
как именно написан комплекс про- Биллинги также могут либо работать лучите готовый уникальный биллинг.
грамм в самой системе биллинга с определенным оборудованием, либо Если же вы хотите организовать
(бинарные файлы, скриптовые нет. Например, если вы приобрели биллинг на принципе анализа log-фай-
файлы и т. д.). себе оборудование модемного пула лов, то данный комплекс программ
Cisco – это уже дополнительное обо- будет еще дешевле – около $100-150.
Вы вправе не согласиться с та- рудование к обычному компьютеру, и, Данные биллинги будут работать
кой классификацией и выделить как следствие, возрастает цена мини- практически на любом оборудовании,
еще несколько признаков. Напри- мального биллинга с $200 до $500. все зависит от того, что именно вы
мер, такой: вид вывода информа- Так же имеются нюансы юридичес- поставите как модемный пул. Для ма-
ции. Но автор намеренно решил не кого плана. Если вы покупаете бил- ленькой компании интернет-сервис-
относить данный признак к так на- линговую систему у компании с гаран- провайдера автор советует приобрес-
зываемым «основным», так как нет тией или ответственностью компании ти расширитель COM-портов, так как
единого стандарта на вывод инфор- перед вами, то в зависимости от до- на один компьютер архитектуры PC
мации. Новичкам нагляднее будет говора цена может возрасти от двух можно поставить не более 2 портов.
рабочая программа под управлени- до десятков раз. Компьютер класса более чем 486DX/
ем MS Windows, для опытных сис- Если же вы заказываете создание 16 RAM/1.2 Gb HDD – это для биллинг-
темных администраторов предпоч- биллинга у программиста или группы сервера, но при этом вам придется
тительнее будет увидеть консольную программистов (для ускорения напи- поставить отдельно веб-сервер на дру-
44
администрирование
Начнем по порядку. Пользователь директории [/etc/ppp]. Добавим в $logintime;
звонит на сервер. Модем поднимает конец обоих файлов по строке: 13.open(FL, ‘>> /var/log/inet.usr’);
трубку и происходит установка связи 14.print(FL, “User: $username, LogIn:
$logintime, LogOut: $logouttime,
двух модемов. Когда связь установ- /etc/ppp/billing-up {PEERNAME} OnLineTime: $timeonline”);
лена, процесс входа пользователем в /etc/ppp/billing-down {PEERNAME}
Сеть переходит во вторую фазу – Первые строки программы такие
фазу авторизации. Затем, после ав- соответственно. Данные строчки пос- же, как и в предыдущей программе.
торизации, наступает фаза поднятия ле авторизации или выход-авториза- Строка 04 – переприсваивание име-
TCP/IP-протокола. Вот так происходит ции запустят наши программы бил- ни пользователя. Строки 05-07 – от-
вход пользователя в Сеть в Linux. Вы- линговой системы. Через пробел в крытие файла, чтение из него стро-
ход происходит в обратном порядке. наши скрипты мы добавляем любые ки, закрытие файла, или, точнее, ос-
Сначала опускается TCP/IP-протокол, переменные, которые захотим пере- вобождение дескриптора файла.
затем выход-авторизация, затем раз- дать в программу. Переменная Строка 08 – это обрезание лишних
рыв связи. Иногда бывает, что проис- {PEERNAME} имеет значение имени пробелов и символа перевода карет-
ходит разрыв связи не по воле пользо- пользователя или, точнее сказать, его ки. Строка 09 – разбиение строки на
вателя. Тогда немного меняется схе- логина. О том, как сделать полную массив переменных. Переприсваи-
ма: сначала происходит разрыв свя- авторизацию с паролем через соб- ваем в с троке 10 время входа
зи, затем уже снятие TCP/IP-протоко- ственную систему биллинга, будет от- пользователя для наглядности. Уз-
ла, и последнее – выход-авторизация. дельная статья. Так как нам необхо- наем время выхода пользователя в
Мы внесем некоторые изменения димо было передать в биллинговую с троке 11. В строке 12 узнаем,
в данную схему, а именно: добавим систему не только имя пользователя, сколько времени пробыл пользова-
дополнительный блок. После уста- но и время его входа – мы воспользу- тель на линии, данное число пред-
новки соединения и полной автори- емся языком программирования Perl ставляет собой количество секунд.
зации будет выполняться наша ма- и вызовем функцию системного вре- В строке 13 открываем файл для
ленькая программа, которая будет мени. добавления записи о пользователе.
сохранять имя пользователя, время Строка 14, собственно, сама запись:
его входа и любые другие данные, auth-up фиксируем имя пользователя, время
которые могут потребоваться в ва- 1.#!/usr/bin/perl входа, время выхода и время, прове-
шей системе. 2.# Ïðîãðàììà auth-up денное пользователем на линии.
3.# Ñîõðàíåíèå ëîãèíà ïîëüçîâàòåëÿ
Так же добавим дополнительное è âðåìåíè åãî âõîäà Данная система биллинга очень
звено и в выходную цепочку, поста- простая: она считает только лишь вре-
4.$username = $ARGV[1];
вив дополнительное звено после вы- мя, проведенное пользователем на
ход-авторизации. 5.open(FL, ‘> /etc/ppp online.usr’); линии. Для того чтобы считать коли-
6.print(FL, “$username “, localtime,
“\n”); чество байт, которые пользователь
загрузил или выгрузил из Интернета,
звонок пользователя
Строка 01 – обязательная, она сооб- нужно усложнить наши программы. В
щает, что это Perl-программа. Строка каждом конкретном случае надо под-
04 – мы переприсваиваем имя пользо- ходить отдельно.
вателя из массива в переменную, это- Для той операционной системы, ко-
го можно и не делать, – это сделано торую мы выбрали для написания бил-
для наглядности. Строка 05 – откры- линга, свойственно ядро (kernel) версии
соединение модемов, авторизация
ваем файл для записи, в данном фай- 2.2.х. В данном ядре была реализова-
ле будет храниться строка: что за на система контроля за IP-пакетами –
пользователь зашел и во сколько (в на уровне IP-цепочек (ipchains). Для
формате UTC). Строка 06 – собствен- версии ядра 2.4.х уже реализована си-
но, запись имени пользователя и вре- стема Netfilter, с управлением через IP-
мени его входа в систему. таблицы (iptables). Она более гибкая и
сохранение временных данных,
более совершенная, нежели цепочки.
необходимых для подсчета auth-down Но в выбранной операционной систе-
1.#!/usr/bin/perl ме применены цепочки, вы можете
2.# Ïðîãðàììà auth-down сами пересобрать ядро более высокой
3.# Îêîí÷àòåëüíûé àíàëèç ïðåáûâàíèÿ
ïîëüçîâàòåëÿ â Èíòåðíåòå. версии, но это уже отдельная тема.
Существует очень много способов
4.$username = $ARGV[1];
5.open(FL, ‘< /etc/ppp/online.usr’); подсчета трафика, автор приводит
поднятие TCP/IP-протокола 6.read(FL, $temp); для примера один из них: принцип
7.close(FL);
8.chomp($temp); счетчика.
На практике это произойдет пу- 9.@user = split(/ /,$temp); Чтобы подсчитать количество
10.$logintime = $user[2];
тем редактирования двух файлов 11.$logouttime = localtime; байт, загруженных или выгруженных
auth-up и auth-down, находящихся в 12.$timeonline = $logouttime — пользователем, необходимо создать
46
администрирование
УСТАНАВЛИВАЕМ
MULTIPLE-DEVICE
(MULTILINK)-ДОЗВОН В
WINDOWS XP ТАТЬЯНА АНТИПОВА
В Windows XP вы можете использо- подключение и сервер удаленного до- dial-up-подключение), и затем, под
вать несколько модемов, чтобы под- ступа должны поддерживать Multilink. Network Tasks, жмем на Change
ключиться к ISP-провайдеру, тем са- Network Connections может дина- settings of this connection.
мым увеличивая общую скорость пе- мически управлять линиями, исполь- 3. Жмем вкладку General, и затем
редачи ваших данных. Multiple- зующими Multilink. Система позволя- выбираем устройства, которые вы хо-
device-дозвон (также известный как ет ограничивать количество исполь- тите использовать для этого подклю-
PPP, modem aggregation или Multilink) зуемых линий, тем самым устраняя чения.
позволяет объединять несколько фи- дополнительную пропускную способ- 4. Используйте один или несколько из
зических устройств в одно логичес- ность. Вы можете конфигурировать следующих шагов:
кое устройство. Как правило, две или условия, при которых будут использо- Чтобы конфигурировать устрой-
больше ISDN-линий или модемов ваться дополнительные линии, изме- ства дозвона, телефонные номе-
связываются вместе для увеличения няя параметры настройки Network ра, адрес хоста, коды страны или
пропускной способности. Теперь это Connections. области, правила набора, жмите
можно использовать в системах Обратите внимание: если вы ис- на вкладку General.
Windows XP. пользуете Multilink, чтобы дозвонить- Чтобы конфигурировать опции
ся до сервера, который требует об- дозвона и повторного дозвона или
Требования ратный вызов (callback), только одно X.25-параметры, жмите на вклад-
Чтобы использовать multiple-device- из ваших Multilink-устройств будет ис- ку Options.
дозвон, должны выполняться следую- пользоваться для обратного дозвона. Чтобы конфигурировать иденти-
щие условия: Это происходит, потому что можно фикацию, шифрование данных
Ваш ISP-провайдер должен под- хранить только один номер в учетной или окно терминала и варианты
держивать синхронизацию не- записи пользователя. Поэтому со- начального сценария, жмите на
скольких доменов. единится только одно устройство, и вкладку Security.
Вы должны установить несколько все другие устройства не будут ис- Чтобы конфигурировать сервер
модемов. пользоваться, – т.е. ваше подключе- удаленного доступа и используе-
Для каждого модема требуется от- ние теряет функциональные возмож- мые протоколы для создаваемого
дельная телефонная линия. ности Multilink. Этой проблемы мож- подключения, жмите на вкладку
но избежать: Networking. Также кликните
Обратите внимание, что один Если phonebook-запись для Settings и выберите Negotiate multi-
ISDN-адаптер может работать как не- Multilink-подключения использует link для single link подключения.
сколько устройств, потому что ISDN стандартную конфигурацию моде- Чтобы включить и отключить
включает два 56-Kbps B канала, ко- ма, и сервер удаленного доступа, Internet Connection Sharing, Internet
торые могут использоваться незави- который вызывает ваше подклю- Connection Firewall и on-demand-
симо. чение, использует больше одной дозвон, жмите на вкладку
строки для одного номера. Advanced.
Конфигурируем Если phonebook-запись для
multiple-device-дозвон Multilink подключения – ISDN с дву- Примечания:
Особенность Network Connections по- мя каналами, которые имеют один В зависимости от формируемого
зволяет использовать Point-to-Point номер. типа подключения, в свойствах
(PPP) Multilink-дозвон в нескольких подключения появляются различ-
ISDN, X.25 или модемных линиях. Эта Конфигурируем ные опции и вкладки.
особенность объединяет несколько подключение: Для подробной информации об оп-
физических каналов в логический 1. Жмем Start –> Start –> Network and ределенном элементе на вкладке
канал связи; получившийся канал уве- Internet Connections и затем жмем на щелкните правой кнопкой мыши
личивает пропускную способность Network Connections. по элементу и затем щелкните
подключения. Чтобы использовать не- 2. Жмем нa подключение, которое вы What’s This?
сколько устройств для дозвона, ваше хотите сконфигурировать (например,
МИФЫ И ЛЕГЕНДЫ
СОВРЕМЕННОЙ
ОСОЛОГИИ…
ИЛИ «ОС –
ЭТО БОЛЬШОЙ
ПОЛОСАТЫЙ МУХ?»
Речь пойдёт о весьма распространённых мифах о трёх популярных операционных системах
(Windows, Unix FreeBSD и Linux) в частности и о других в общем (сюда будут отнесены QNX, OS/2,
BeOS и все-все-все…). Итак, что у нас есть на данный момент? Относительно немного:
компьютерное сообщество, имеющее дурную привычку тратить много сил, энергии, дискового
пространства серверов и сетевой пропускной способности для обсуждения того, чья игрушка
лучше, а именно: Windows, Unix FreeBSD или Linux. На основании этих… назовём их мягко –
споров, часто складывается определённое мнение людей, не особо в этом разбирающихся…
Попробуем заняться сложным и опасным делом – понять, кто прав, а кто – не очень.
АЛЕКСАНДР ПОТЕМКИН
48
администрирование
Microsoft Windows обеспечении есть ошибки! Более лям. Самое главное – это показать
И первым кандидатом (по популярно- того, их количество прямо пропор- пользователю возможности, а уже
сти) у нас будет продукция от небе- ционально количеству предостав- потом устранять все ошибки. И
зызвестной компании Microsoft. ляемых возможностей. Что точно только потом доводить безопас-
Встречайте! Операционная система можно поставить в вину Microsoft, ность до нормального уровня. С
Windows! Я думаю, а точнее даже уве- так это сырость первых продуктов. точки зрения рынка такую техно-
рен, что многие из нас слышали не Но если учесть, что задача была логию можно назвать более чем
один анекдот об этом творении (на- быстро завоевать рынок, и что правильной: сначала завоевать
пример, про зависающие ракеты под пользователям нужно было пока- нишу, а уже потом делать продукт
управлением ОС Windows), думаю, зать как можно больше возможно- нормальным. Оставим в стороне
что многие имели «счастье» лицез- стей, то такую стратегию понять этическую сторону данного вопро-
реть «крахи» и «баги» этой операци- можно. Смею заметить, что ста- са, ибо, как говорится в известной
онки… Но позволю себе «наглость» бильность последних продуктов поговорке: «Любовь приходит и
заняться подробным рассмотрением увеличивается, а «сырость» кода уходит, а кушать хочется всегда».
всех посягательств на неё. уменьшается. Второй аргумент: сказать, что бро-
дить по Интернету с помощью ус-
Посягательство первое: ОС Посягательство четвёртое: поче- тановленных по умолчанию версий
Windows – самая ужасная опера- му в Windows я не могу сделать InternetExplorer & OutlookExpress
ционка! всего того, что я захочу?! весьма опасно – равнозначно
Опровержение: угу, если ещё Опровержение: вообще Windows тому, что просто тихо промолчать.
есть с чем сравнивать… Очень лю- не даёт (и не должна) полного до- Плюс ко всему третий аргумент
бят эти фразы писать из-под ступа пользователю ко всему (во- появляется: конкуренты жить ме-
Internet Explorer (не в редакции для обще наиболее полный доступ ко шают. Тут уж всё просто: хочешь
Solaris…) или в mIRC, на худой ко- всему можно получить, лишь имея жить – умей вертеться! Так ведь
нец, в ICQ от Мирабилиса (опять- под рукой исходный код програм- из-за всей шумихи пользователи
таки Windows-версия). Это я всё к мы – тут уже прямая дорога в *nix- к конкуренту перебежать могут…
чему? Да к тому, что подобные системы). Простой домохозяйке не
фразы часто пишут люди, ничего нужно давать возможность всё Ну, с Windows хватит. Пожалуй,
другого не видевшие, либо слы- уничтожить одним действием. следует перейти к тому, что столь ча-
шавшие про легендарную надёж- сто позиционируется как реальная
ность Unix-систем (до них ещё до- Ещё подобные претензии можно конкуренция – ОС Linux. Тут всё не-
берёмся). услышать к Windows как к серверной сколько забавнее, поскольку проект
платформе. Здесь внимание на созда- Linux относительно молод, и его
Посягательство второе: ОС ние: изначально была задача просто- пользователи весьма разношёрстны.
Windows – очень нестабильна… го и понятного доступа, а также при-
Опровержение: Здесь сложно ятной работы пользователя. Тут уж, GNU/Linux OS
спорить. Можно привести только пардон, действует правило: безопас- И самое тут весёлое, с моей скром-
одно оправдание и один упрёк. Оп- ность системы обратно пропорцио- ной точки зрения, – это то, что Linux
равдание можно озвучить как тот нальна её удобству. И несмотря на позиционируется как вполне полно-
факт, что вообще заставить рабо- это, Microsoft делает многое для уве- ценная альтернатива продукции от
тать такую дикую помесь 16-ти и личения безопасности. Это отмечает- Microsoft. Наиболее часто в подобных
32-ух разрядного кода нужно су- ся и командами, специализированно утверждениях фигурирует дистрибу-
меть (сделанную в конечном ито- занимающимися безопасностью этой тив Linux Mandrake… Ну что ж… на
ге для пользователя – совмести- ОС; кроме того, на момент написания вкус и цвет, как говорится, товарищей
мость со своими программами по- этих строк Билл Гейтс провозгласил поискать надо, но когда «беспристра-
чему-то всем хочется увидеть и в высокий приоритет безопасности для стные» пользователи-журналисты
новой версии операционной систе- всей компании. Последний «клич» начинают утверждать, что вышеобоз-
мы). Но тут вступает в силу упрёк: такого толка привёл к тому, что до- наченный набор пакетов (да простят
всё бы неплохо, но вот заставлять минирование Netscape на рынке бра- меня его поклонники, но не нахожу я
людей платить за такой «програм- узеров было не то чтобы потеснено, лучших слов для того, что занимает
мистский опус» не есть хорошо… а скорее даже просто разгромлено в ненормально большое количество
пух и прах. Возникновения этого «кли- места на винчестере, в оперативной
Посягательство третье: в ча» именно сейчас вполне можно обо- памяти, ну и времени процессора в
Windows очень много багов (оши- сновать тремя аргументами: придачу; хотя я точно знаю, что мож-
бок)… В своей книге «Дорога в будущее» но сделать то же самое с меньшими
Опровержение: да, много. Особен- Билл Гейтс и не скрывает ни от потерями для компьютера) ставится
но если пользоваться Windows 95, кого, что безопасность стоит дале- и работает лучше, быстрее и понят-
который более даже не поддержи- ко не на первом месте в предос- нее, чем Windows XP, то остаётся
вается. В любом программном тавлении продукта пользовате- только пожать плечами со словами из
50
администрирование
граммного обеспечения. Ну и кроме талоге /cdrom/packages, если CD-ROM OS/2 – это детище IBM, которая
того, команда разработчиков, видимо, смонтирован в соответствующем ка- решила в своё время попасть ещё и
проповедует принцип безопасности талоге). на рынок операционных систем (не
прямо «из коробки», то есть большин- Эмуляция Linux – это несколько зря, видимо, говорят, что история раз-
ство никому не нужных сервисов про- каталогов портов (или соответствен- вивается по спирали… Неспроста это
сто отключено; всё, что есть, установ- но несколько пакетов), позволяющие рисование пингвинов на улицах горо-
лено с вполне приемлемыми для сер- запускать программы для Linux с не- да…). И всё бы с ней было хорошо,
вера опциями. доступными исходными текстами под но существует такое понятие, как «по-
Программистам эта система мо- Unix FreeBSD, так, например, работа- явиться раньше времени». По край-
жет понравиться уже хотя бы и тем, ют VMWare, Adobe AcrobatReader и ней мере, именно такой «диагноз» ей
что с самого момента установки в многое другое. ставят многие. Технически это была
системе ставится компилятор, как Теперь о менее приятном, но том, весьма грамотная система, но пользо-
одна из опций есть установка пол- что есть в любой системе: недостатки. ватели, как это часто бывает, прого-
ного набора исходных текстов с Минусы следующие: у системы не лосовали кошельком. Результат вы
весьма логичным и понятным уст- очень много разработчиков, пользо- можете лицезреть на большинстве
ройством каталогов. И нет никаких вателей и того, без чего не выживет десктопов – про «полуось», как её лю-
проблем с документацией. В боль- ни один проект – инвесторов. Посему бовно называют, знают немногие, а
шинстве случаев вся документация в FreeBSD реализовано может быть Windows, с которым была конкурен-
весьма чётко синхронизирована с не всё, что хотелось бы. Нечем осо- ция, стоит у подавляющего большин-
бинарными продуктами. бенно сильно хвастаться и в области ства.
Ну а кому надоел Linux, эта плат- поддержки железа (не то чтобы драй- На данный момент существует до-
форма может нравиться тем, что всё веров было мало, но в том же Linux статочно «тёплый» клуб почитателей
находится, как было сказано на одном их всё же больше). В минус можно OS/2 (www.os2.ru, например), дей-
из форумов www.linux.org.ru, «под од- зачислить и не особенную понятность ствительно готовый всегда помочь.
ной крышей». Весьма чёткая структу- системы новичку – сложновато на- Бесплатная поддержка этой системы
рированность системы, достаточно звать её дружелюбной, напичканной IBM на данный момент уже заверше-
простой апгрейд системы. всевозможными мастерами, – скорее на, что добавляет проблем для конеч-
Стоит ещё описать фирменные уж системой, чётко подчинённой ло- ных потребителей. Ответ на вопрос
«фичи» системы, к каковым относят- гике и поддерживающей старинные «почему» весьма прост: при попытке
ся система портов и возможность эму- традиции *nix-систем (впрочем, не в установки «полуоси» на сколь-либо
лировать Linux. ущерб прогрессу). современный компьютер возникает
Физически порты – это каталог Существуют, несомненно, и ошиб- действительно большое количество
/usr/ports, в котором весьма красиво ки в самой системе, существуют и не- проблем – в основном по причине про-
разложен своеобразный индекс про- достатки, которые можно, конечно, блем с драйверами, какими-то на-
граммного обеспечения, портирован- исправить, но всё же оставляют не- стройками и прочим, прочим, прочим.
ного под Unix FreeBSD и не включён- которое не особо приятное впечатле- Однако многие уверяют, что для сла-
ного в основную установку. Причём ние (например, Unix FreeBSD 4.4 име- беньких машинок (например, 386 про-
установка любой необходимой про- ла, видимо, не особо оттестирован- цессор, 40 Mhz, 12 Mb RAM & 350 Mb
граммы при наличии подключения к ный FAT32 filesystem драйвер, а пото- HDD) это будет просто идеальный ва-
сети производится парой команд: му «куролесила» при записи на эти риант.
разделы, или необходимость установ- Сложновато придётся с поиском
# cd /usr/ports/{NameOfSection}/ ки порта для чтения русских имён на программного обеспечения, посколь-
{ProgramName}
# make install; make clean CD-ROM диске, последнее, впрочем, ку пользователей и разработчиков
обещают точно исправить в 5-ой вет- программного обеспечения для этой
Первую строку удобнее будет рас- ке). платформы немного, а мало-мальски
смотреть на примере – нам нужно по- Ну, с FreeBSD всё, но у нас есть и последние продукты пишутся про-
ставить эмулятор Windows – WINE. другие системы… граммистами-энтузиастами в боль-
Тогда серия команд весьма проста: шинстве случаев не без помощи фон-
… and others (QNX, OS/2, да свободного программного обеспе-
# cd /usr/ports/emulators/wine BeOS) чения (ничего не имею против такого
# make install; make clean Не оставим без внимания и других слав- пути разработки, но никаких серьёз-
ных представителей ОСологии – OS/2, ных продуктов здесь ждать не прихо-
Для тех, у кого нет возможности BeOS и QNX. Интересны они многим, дится).
качать все необходимые исходники (а и, несомненно, имеют своих поклонни- BeOS – это чадо Be Inc. Основное
именно из них всё и собирается для ков и противников. У каждой из них есть освещение прессы и приток пользо-
конкретной системы), существуют какая-то своя характерная черта и что- вателей получило лишь после выхо-
уже скомпилированные пакеты наибо- то революционно новое, привнесенное да пятой версии, которая вышла в
лее популярных и нужных программ этой операционной системой. Впрочем, двух вариантах – Personal Edition (PE)
(обычно расположены на диске в ка- поподробнее о каждой. и Professional (Pro). Первая версия
52
программирование
БРАНДМАУЭР Часть 2
ВЛАДИМИР МЕШКОВ
54
программирование
Задача программы инициализации и запуска процесса
демона – принять исходные данные (правила фильтра-
ции) и запустить на выполнение процесс-демон, пере-
дав ему эти правила. В нашем примере правилами филь-
трации является IP-адрес хоста, чьи пакеты мы будем
блокировать.
Процесс-демон после активизации передает модулю
ядра правила фильтрации и в дальнейшем занимается
ведением log-файла, в котором фиксируется время за-
пуска/останова демона и попытки доступа с запрещен-
ного адреса.
Теперь давайте детально рассмотрим каждую состав-
ляющую.
Программа
инициализации и запуска
процесса-демона
Нижеприведенный программный код разместим в файле
sfc.c. Здесь будет находиться главная функция main().
Рассмотрение программы начнем с определения за-
головочных файлов и переменных.
Нам понадобятся следующие header-файлы:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <signal.h>
#include <errno.h>
#include <sys/stat.h>
#include <sys/types.h>
#include "sfc.h"
void usage()
{
fprintf(stderr,"\nUsage: daemon [ start / stop ]\n\n");
return;
}
Проверяем правильность ввода входных параметров: Для остановки процесса-демона необходимо получить
значение его идентификатора.
if(argc!=2) { Это значение извлекаем из PID-файла:
usage();
return (-1); pid_file=open(PID,O_RDONLY);
} if(pid_file<0) {
perror(PID);
return (-1);
Если входной параметр указан, определяем, какой }
режим работы задан. Их, как мы уже сказали, два.
if(read(pid_file,(char *)&pid,sizeof(pid_t)) < 0) {
perror(PID);
Режим запуска процесса-демона на выполнение return (-1);
}
if(!(strcmp(argv[1],"start"))) { close(pid_file);
Во избежание повторного запуска проверяем наличие PID-файл нам больше не нужен, удаляем его:
в текущем каталоге PID-файла. Если файл присутствует,
то демон уже запущен, о чем пользователь получает уве- if(unlink(PID) < 0) {
домление: perror(PID);
return (-1);
}
if(stat(PID,&s)==0) {
fprintf(stderr,"\nDaemon is allready running !\n\n"); Теперь останавливаем процесс-демон, послав ему сиг-
return (-1);
} нал SIGINT:
pid = fork();
if (pid < 0) {
Процесс-демон
perror("fork"); Весь код, отвечающий за запуск, функционирование и
exit(1); остановку процесса-демона, разместим в файле
}
sf_daemon.c. По сути, этот файл будет представлять со-
if (pid==0) { бой набор функций.
56
программирование
__u32 addr; Если установлен флаг готовности данных для считы-
int action; вания и поступил пакет с запрещенного адреса, фиксиру-
int ready;
}; ем это событие в log-файле:
if(data.ready==1) {
В этом файле определено имя log-файла и структура if(data.action==0) {
data_log, в которой хранятся данные для заполнения log-
if(fill_log(f,data.action,data.addr) < 0)
файла. Назначение полей структуры следующее: stop_daemon();
__u32 – IP-адрес хоста (в сетевом формате), от кото-
}
рого поступил пакет; }
int action – выполняемое действие (1 – разрешить про- }
}
хождение пакета, 0 – отбросить пакет);
int ready – флаг готовности данных в устройстве для Заполнением log-файла ведает функция fill_log, к ней
считывания. мы еще вернемся.
Теперь подошла очередь функции инициализации.
Поскольку наш демон работает с двумя файлами (файл Напомню, что ее задача – передать модулю ядра правила
устройства /dev/firewall и log-файл), то необходимо опре- фильтрации (т.е. IP-адрес).
делить две переменные для хранения дескрипторов этих
файлов: void init_daemon()
{
А теперь стартуем:
start_log(f);
Функция fill_log
packet_loop(); Эта функция, кроме дескриптора log-файла, принимает
exit(1); IP-адрес пакета, который был заблокирован (u_long addr),
}
и идентификатор выполненного действия (int action). Фун-
кция очень простая, и необходимости в комментариях я
LOG-файл не вижу.
Нам осталось рассмотреть функции для ведения log-фай- int fill_log(int f, int action, u_long addr)
ла. Их три: {
start_log – запись о начале выполнения процесса-де- char buf[BSIZE];
time_t fill_t;
мона;
fill_log – запись информации о блокировании IP-пакета; bzero(buf,BSIZE);
time(&fill_t);
stop_log – запись об остановке выполнения процесса-
демона. if(action==0) {
sprintf(buf,"Packet from %s was rejected at
%s",inet_ntoa(addr), ctime(&fill_t));
Каждая из этих функций фиксирует текущее время if (write(f,buf,strlen(buf)) < 0)
return (-1);
возникновения того или иного события. return (0);
Все три функции разместим в файле sf_log.c. }
}
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
Makefile
#include <fcntl.h> Для сборки исполняемого модуля создадим Makefile сле-
#include <time.h> дующего содержания:
#include <sys/socket.h>
#include <linux/in.h>
#define BSIZE 80 CC = gcc
name = daemon
DAEMON = sfc.o sf_daemon.o sf_log.o
Все функции принимают в качестве аргумента деск-
$(name): $(DAEMON)
риптор log-файла, в который будет осуществляться запись $(CC) -g -o $(name) $(DAEMON)
информации. В случае удачного завершения операции все sfc.o: sfc.c
$(CC) -c sfc.c
функции возвращают 0, в случае ошибки -1. sf_daemon.o: sf_daemon.c
58
программирование
$(CC) -c sf_daemon.c рузить модуль ядра.
sf_log.o: sf_log.c После запуска демона в текущем каталоге появится
$(CC) -c sf_log.c
файл daemon.pid. Не удаляйте этот файл! В нем хранится
clean: идентификатор процесса-демона для возможности его
rm -f *.o
корректной остановки. Для остановки выполнения процес-
Здесь все должно быть вам знакомо. Ключ «-g» при са-демона введите команду:
успешной сборке можно будет заменить на «-s».
./daemon stop
Запуск и остановка выполнения
процесса-демона Файл daemon.pid автоматически удаляется.
После сборки в текущем каталоге появится исполняемый Информация о времени запуска и останова процесса-
файл daemon. Для его запуска наберите команду: демона, а также о заблокированных пакетах будет зафик-
сирована в файле /var/log/daemon.
./daemon start При подготовке статьи были использованы исходные
тексты и документация брандмауэра SINUS (http://
Перед запуском процесса-демона необходимо заг- www.ifi.unizh.ch).
ПАКЕТНЫЙ ФИЛЬТР
Если вы используете сетевой анализатор с выводом информации на консоль, то одна из проблем,
с которой вы столкнетесь, заключается в том, что анализатор не будет успевать отображать все
данные, поступившие из сети, и часть пакетов будет для вас потеряна.
ВЛАДИМИР МЕШКОВ
Это особенно актуально, если трафик очень плотный. Вто- Назначение полей структуры следующее:
рая проблема – вас могут интересовать только пакеты, поле k – числовое значение операнда, с которым ра-
адресованные выделенным хостам, а не все подряд. Ре- ботает инструкция;
шение заключается в фильтрации входящих сетевых па- поля jt (jump true) и jf (jump false) – меняют порядок
кетов по какому-либо определенному признаку, например выполнения инструкций;
по адресной части. Одним из вариантов решения являет- поле code – код выполняемой инструкции.
ся использование оператора условия if, однако данное ре-
шение неэффективно. В этом случае ядру приходится вы- Существует 8 типов инструкций. Вначале их пере-
таскивать полный пакет из сети, на что отнимается про- числим, а потом остановимся отдельно на каждом. Итак,
цессорное время, затем анализатор вынужден «экзаме- вот эти 8 типов: BPF_LD, BPF_LDX, BPF_ST, BPF_STX,
новать» заголовок каждого пакета перед принятием ре- BPF_ALU, BPF_JMP, BPF_RET, BPF_MISC.
шения – отображать данные или нет. Оптимальным явля-
ется решение отсеять лишние пакеты как можно раньше, BPF_LD
на уровне драйвера сетевой карты. Ядро Linux позволяет Инструкция BPF_LD служит для загрузки в аккумулятор
сделать это при помощи пакетного фильтра. следующих величин:
константы (BPF_IMM);
Описание языка BPF блока данных, расположенных по фиксированному
Пакетный фильтр представляет собой последователь- смещению (BPF_ABS);
ность инструкций, составленных в кодах псевдо-машин- блока данных, расположенных по смещению, которое
ного языка, который называется BPF – Berkeley Packet является переменной величиной (BPF_IND);
Filter. Этот язык был разработан Стивом Маккеном (Steve длины блока данных (BPF_LEN);
McCanne) и Ван Якобсоном (Van Jacobson). BPF похож на значения, находящегося в ячейке памяти
язык ассемблер. В нем, как и в ассемблере, есть регист- (BPF_MEM).
ры, инструкции для загрузки и хранения операндов, вы-
полнения арифметико-логических операций, условных и Для значений BPF_IND и BPF_ABS размер загружае-
безусловных переходов. Для работы с операндами в BPF мых данных должен быть задан как слово (BPF_W), полу-
используются регистр-аккумулятор (или просто аккуму- слово (BPF_H), байт (BPF_B). Здесь имеется в виду ма-
лятор), индексный регистр, ячейка памяти и внутренний шинное слово, которое равно числу разрядов в регистрах
программный счетчик. общего назначения. Для 32-х разрядных процессоров это
Формат инструкции языка BPF определяет следующая значение равно 4 байта.
структура: Примеры использования данной инструкции.
60
программирование
В аккумулятор загружается 2 байта из блока данных. Сме- ся в ячейке памяти с адресом k.
щение в блоке данных задается константой k.
BPF_LDX+BPF_W+BPF_LEN X <- len
BPF_LD+BPF_B+BPF_ABS A <- P [ k : 1 ]
В индексный регистр загружается длина блока данных.
В аккумулятор загружается 1 байт из блока данных. Сме- Следующая инструкция позволяет быстро определить
щение в блоке данных задается константой k. размер заголовка IP-пакета:
В аккумулятор загружается длина блока данных. Значение k определяет адрес ячейки памяти.
В аккумулятор загружается значение, находящееся в ячей- Значение k определяет адрес ячейки памяти.
ке памяти с адресом k. BPF_ALU Инструкция BPF_ALU выполняет арифме-
тико-логические между аккумулятором и индексным ре-
BPF_ST гистром или константой. Результат сохраняется в акку-
Инструкция BPF_LDX служит для загрузки в индексный муляторе.
регистр следующих величин:
константы (BPF_IMM); BPF_ALU+BPF_ADD+BPF_K
BPF_ALU+BPF_SUB+BPF_K
A
A
<-
<-
A
A
+ k
— k
значения, находящегося в ячейке памяти (BPF_MEM); BPF_ALU+BPF_MUL+BPF_K A <- A * k
длины блока данных (BPF_LEN). BPF_ALU+BPF_DIV+BPF_K
BPF_ALU+BPF_AND+BPF_K
A
A
<-
<-
A
A
/ k
& k
BPF_ALU+BPF_OR+BPF_K A <- A | k
Примеры использования данной инструкции. BPF_ALU+BPF_LSH+BPF_K A <- A << k
BPF_ALU+BPF_RSH+BPF_K A <- A >> k
BPF_ALU+BPF_ADD+BPF_X A <- A + X
BPF_LDX+BPF_W+BPF_IMM X <- k
Здесь я не вижу необходимости в комментариях, все про-
В индексный регистр загружается константа k, размер зрачно.
которой составляет 4 байта.
BPF_JMP
BPF_LDX+BPF_W+BPF_MEM X <- M [ k ] Инструкция BPF_JMP изменяет порядок выполнения про-
граммы фильтрации. Данная инструкция может осуществ-
В индексный регистр загружается значение, находящее- лять как условный, так и безусловный переход между ин-
BPF_JMP+BPF_JGE+BPF_X
BPF_JMP+BPF_JEQ+BPF_K
pc += ( A >= X ) ? jt : jf
pc += ( A == X ) ? jt : jf
Программа фильтрации
BPF_JMP+BPF_JSET+BPF_K pc += ( A & X ) ? jt : jf Программа фильтрации представляет собой массив струк-
тур struct sock_filter. При ее составлении воспользуемся
макросами BPF_STMP и BPF_JUMP, которые определе-
BPF_RET ны в заголовочном файле <linux/filter>.
Программа фильтрации выполняется для каждого пакета,
поступающего на сетевой интерфейс. Результатом работы struct sock_filter BPF_code [ ] = {
фильтра является целое положительное число, показыва- BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 12),
ющее, сколько байт в принятом пакете будет доступно для
дальнейшей обработки приложению пользователя. Если В принятом Ethernet-кадре по смещению, равному 12 байт
принятый пакет не удовлетворяет условиям фильтрации, (6 байт MAC-адреса источника + 6 байт MAC-адреса назна-
он отбрасывается и программой фильтрации возвращает- чения), находится 2-х байтовый идентификатор протокола
ся нулевое значение. Инструкция BPF_RET завершает вы- сетевого уровня. Эти 2 байта мы загружаем в аккумулятор.
полнение программы фильтрации и возвращает число байт
в пакете, доступных для дальнейшей обработки. BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, ETH_P_IP, 0, 8),
BPF_RET+BPF_A
Проверяем соответствие значения, загруженного в ак-
кумулятор, идентификатору IP-протокола (ETH_P_IP =
Возвращаемый результат находится в аккумуляторе. 0x800). При выполнении условия переходим к следующей
инструкции (jt = 0). В противном случае смещаемся на 8
BPF_RET+BPF_K
структур вниз (jf = 8) и выходим из программы фильтра-
ции с возвратом нулевого значения. Это значит, что дан-
Результат возвращается в виде константы. ный пакет отброшен.
62
программирование
0x201A8C0. Это связано с порядком передачи в сети – пе- рес. Для хранения введенного IP-адреса нам потребуют-
редача начинается с бита младшего разряда. Если адрес ся дополнительные переменные:
не совпадает – выходим из программы фильтрации.
union {
BPF_STMT(BPF_LD+BPF_B+BPF_ABS, 23), u_long net;
char point [4];
} addr;
Загружаем в аккумулятор 1 байт, находящийся по сме-
щению 23. В этом поле содержится идентификатор про- В поле net объединения addr будет храниться введен-
токола транспортного уровня. Для протокола TCP это зна- ный IP-адрес в сетевом формате. Заполним поле net:
чение равно 6.
addr. net = inet_addr (argv [1]);
BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, IPPROTO_TCP, 0, 4),
Теперь необходимо зеркально перевернуть значение
Проверяем соответствие транспортного протокола. IP-адреса в сетевом формате. Сделаем это, поменяв ме-
Далее нам необходимо проверить поле «Порт источ- стами 0-й и 3-й байты, 1-й и 2-й:
ника» на соответствие значению 23. Для этого необходи-
мо сперва установить длину заголовка IP-пакета. addr. point [0] ^= addr. point [3];
addr. point [3] ^= addr. point [1];
addr. point [0] ^= addr. point [3];
BPF_STMT(BPF_LDX+BPF_B+BPF_MSH, 14), addr. point [1] ^= addr. point [2];
addr. point [2] ^= addr. point [1];
addr. point [1] ^= addr. point [2];
В индексный регистр будет загружено значение дли-
ны заголовка IP-пакета. По смещению, равному сумме Заполним необходимое поле в массиве BPF_code:
длин Ethernet-заголовка и IP-заголовка, будет находиться
поле «Порт источника». Загрузим его в аккумулятор: BPF_code [3]. k = addr. net;
BPF_STMT(BPF_RET+BPF_K,1500),
BPF_STMT(BPF_RET+BPF_K,0),
Использование tcpdump
}; Для упрощения задачи составления программы фильтра-
Çàïîëíèì ïîëÿ ñòðóêòóðû struct sock_fprog *Filter : ции можно воспользоваться утилитой tcpdump. Давайте
Filter -> len = 11; - çíà÷åíèå ïîëÿ len ðàâíî
÷èñëó ñòðóêòóð â ìàññèâå BPF_code [ ] рассмотрим, как это делается. Предположим, нам необ-
Filter -> filter = BPF_code; - óêàçàòåëü íà ìàññèâ ñòðóê- ходим пакетный фильтр, принимающий IP-пакеты, адре-
òóð BPF_code [ ]
сатом или отправителем которых является хост с IP-адре-
Ïðèâÿçêà ôèëüòðà ê ñîêåòó âûïîëíÿåòñÿ ïðè ïîìîùè âûçîâà сом 192.168.9.1. Вводим следующую команду:
setsockopt ñëåäóþùèì îáðàçîì:
if ( setsockopt ( e0_r, SOL_SOCKET, SO_ATTACH_FILTER, Filter, tcpdump -dd host 192.168.9.1
sizeof (*Filter) ) < 0 ) {
perror ( "SO_ATTACH_FILTER" );
close ( e0_r ); На консоли будет отображен результат работы программы:
exit (1);
}
{ 0x28, 0, 0, 0x0000000c },
В приведенном примере есть один недостаток: исходные { 0x15, 0, 4, 0x00000800 },
{ 0x20, 0, 0, 0x0000001a },
данные, такие как IP-адрес, номер порта, вводятся в текст { 0x15, 8, 0, 0xc0a80901 },
программы. При необходимости изменения условий фильт- { 0x20, 0, 0, 0x0000001e },
{ 0x15, 6, 7, 0xc0a80901 },
рации придется каждый раз вносить изменения в исходный { 0x15, 1, 0, 0x00000806 },
текст и перекомпилировать программу. Модифицируем про- { 0x15, 0, 5, 0x00008035 },
{ 0x20, 0, 0, 0x0000001c },
грамму фильтрации для возможности гибкой настройки { 0x15, 2, 0, 0xc0a80901 },
фильтра на новое условие, например, на новый IP-адрес. IP- { 0x20, 0, 0, 0x00000026 },
{ 0x15, 0, 1, 0xc0a80901 },
адрес будем вводить в командной строке (аргумент argv [1]). { 0x6, 0, 0, 0x00000044 },
В массиве BPF_code третий элемент перепишем в виде: { 0x6, 0, 0, 0x00000000 },
ДАНИИЛ АЛИЕВСКИЙ
программирование
В предыдущих частях статьи мы познакомились с техноло- supplemental license terms», пункт 3 и файл jre/
гией отражений (Java Reflection). Это мощнейший механизм README.txt, раздел «Redistribution of Java 2 SDK Files».
Java, позволяющий делать с .class-файлами практически все Но самое приятное заключается в том, что в действи-
что угодно – загружать из произвольных файлов, анализи- тельности компилятор фирмы Sun реализован на том же
ровать набор членов класса, обращаться к этим членам, при языке Java – в виде класса com.sun.tools.javac.Main и па-
необходимости обходя стандартную защиту «private»/ кета вспомогательных классов, размещенных в архиве
«protected». При желании можно даже подменить стандарт- tools.jar. Утилита javac является всего-навсего «оболоч-
ный механизм загрузки Java-классов и взять этот процесс кой», стартующей виртуальную машину Java и запускаю-
под полный контроль, например, разрешить перезагружать щей указанный класс. Архив tools.jar, как и саму утилиту
изменившиеся версии .class-файлов без полной перезагруз- javac, разрешается свободно распространять (в дополне-
ки Java-машины (эта техника подробно рассматривалась в ние к стандартному JRE) совместно с Java-приложением.
части II, см. №1(2) журнала «Системный администратор»). Это означает, что для компиляции Java-класса из Java-
В этой части статьи мы научимся компилировать Java- приложения нет необходимости обращаться к внешней
код в .class-файлы. Совместно с технологией отражений утилите javac средствами операционной системы (мето-
это позволит в процессе исполнения программы «на лету» дами Runtime.getRuntime().exec(...)). Можно напрямую вос-
создавать новые классы в виде исходного текста, компи- пользоваться классом com.sun.tools.javac.Main.
лировать их, загружать и использовать. Столь мощные Использование класса com.sun.tools.javac.Main пре-
возможности обычно присущи лишь чисто интерпретиру- дельно просто. Вот полный интерфейс этого класса (кон-
емым, сравнительно медленным языкам типа JavaScript структор и public-методы):
или Perl или Ассемблеру (точнее, машинному языку).
Всюду далее, если не оговорено обратное, мы будем // Constructors
подразумевать последнюю (на момент написания статьи) public Main()
версию Java фирмы Sun: Sun Java SDK 1.4. // Methods
public static void main(String[] p0)
public static int compile(String[] p0)
Как скомпилировать Java-файл public static int compile(String[] p0,
с исходным текстом PrintWriter p1)
Решение, вообще говоря, совершенно банально – выз-
вать стандартный компилятор javac! Для вызова компилятора нужно обратиться к к одно-
На первый взгляд подобное решение кажется неизящ- му из двух его static-методов compile.
ным, сопряженным с массой проблем. Например, компи- В качестве аргумента p0 нужно передать массив
лятор придется поставлять всем вашим пользователям. строк-параметров, которые обычно передаются утили-
Другой пример – интеграция компилятора с вашей систе- те javac, например:
мой: сообщения компилятора должны выдаваться не на
системную консоль, а «внутрь» вызывающей программы new String[] {
для обработки и визуализации в рамках вашего пользо- "-d",
"/ïóòü_ê_ïîäêàòàëîãó",
вательского интерфейса. "myfile.java"
Разработчики Java позаботились о том, чтобы эти про- }
блемы легко решались.
Прежде всего, стандартный компилятор javac входит В качестве аргумента p1 во второй из этих методов
в комплект поставки Sun Java SDK, распространяемого нужно передать поток вывода, который будет использо-
совершенно бесплатно. Правда, здесь есть одна тонкость. ваться для вывода всех сообщений компилятора. Таким
При формировании дистрибутива Java-приложения образом можно «перехватить» все сообщения компиля-
обычно принято включать в этот дистрибутив некий тора и перенаправить их в свой собственный буфер, ко-
фрагмент Java SDK, так называемый JRE (Java2 TM торый впоследствии можно проанализировать или пока-
Runtime Environment) – набор файлов, достаточный для зать пользователю.
запуска Java-приложения. В комплекте Sun Java SDK В качестве результата оба метода возвращают стан-
этот набор оформлен в виде подкаталога jre/. По умол- дартный код возврата утилиты javac (errorlevel в терми-
чанию JRE не содержит компилятора javac (и ряда дру- нах MS-DOS). 0 сигнализирует об успешном завершении,
гих полезных утилит из Java SDK). Включать в дистри- другие значения – о каких-либо ошибках.
бутив полный пакет Java SDK запрещено лицензион- Приведем пример вызова компилятора путем обраще-
ным соглашением фирмы Sun. ния к классу com.sun.tools.javac.Main:
Однако в том же лицензионном соглашении специ-
String[] args= ïàðàìåòðû óòèëèòû javac;
ально оговорено, что компилятор байт-кода javac вме- CharArrayWriter writer= new CharArrayWriter();
сте с необходимым вспомогательным JAR-файлом int result= com.sun.tools.javac.Main.compile(
args,
tools.jar можно включать в дистрибутив в дополнение к new PrintWriter(writer,true));
стандартному JRE, точнее, распространять совместно if (result!=0) {
/* - ïðîèçîøëà êàêàÿ-òî îøèáêà */
с Java-приложением. См. файл jre/license в комплекте àíàëèçèðóåì è, âîçìîæíî, ïîêàçûâàåì
поставки Sun Java SDK 1.4.1, раздел «JavaTM 2 runtime ïîëüçîâàòåëþ ñòðîêó ñîîáùåíèé
êîìïèëÿòîðà writer.toString()
environment (j2re), standard edition, version 1.4.1_x }
66
программирование
класс либо сохранится, либо превратится в легальный до- Обратите внимание: чтение потоков вывода и ошибок
кументированный класс, например, в пакете java.*, тогда в отдельных параллельных потоках совершенно необходи-
необходимые изменения будут минимальны. мо. Если этого не сделать, то вызов метода waitFor() может
Если необходимо надежное документированное реше- привести к зависанию в случае, когда внешняя программа
ние, то на сегодня единственный доступный вариант – выводит хоть что-нибудь в свои потоки вывода и ошибок.
вызвать внешнюю утилиту javac одним из методов
Runtime.getRuntime().exec(...). Как скомпилировать исходный текст
Для этого, правда, эту утилиту нужно еще найти в фай- Java, заданный в виде строки
ловой системе. Если данная утилита входит в состав дист- Итак, мы научились вызывать компилятор Java. Таким об-
рибутива и инсталлируется вместе с Java-приложением, то разом можно скомпилировать любой Java-файл – доста-
инсталлятор может сам позаботиться о том, чтобы полный точно следовать инструкциям по использованию компи-
путь к утилите javac передавался в Java-программу. Если лятора javac. Но что делать, если у нас нет готового Java-
же приложение дожно работать под управлением «чужо- файла, размещенного где-то в файловой системе? Допу-
го» Java SDK, инсталлируемого пользователем независи- стим, мы располагаем просто исходным текстом Java-про-
мо от приложения, то можно поискать файлы: граммы в виде строки типа String – загруженным, скажем,
bin/javac.exe (случай Microsoft Windows); из базы данных, или сгенерированным автоматически. Как
bin/javac (случай Unix/Linux); скомпилировать такой текст?
bin/sparcv9/javac (случай Solaris SPARC) Очевидно, нужно создать некоторый временный файл с
в каталоге System.getProperty(«java.home») и содержащем расширением .java, записать туда исходный текст, после чего
его каталоге. (Чаще всего System.getProperty(«java.home») вызвать компилятор. Эти действия далеко не так просты,
соответствует подкаталогу jre/ в главном каталоге Sun как кажется на первый взгляд. Рассмотрим это подробнее.
Java SDK. Соответственно, утилита javac расположена в В стандартных библиотеках Java есть средства для со-
подкаталоге bin/ содержащего его каталога.) здания временных файлов – это 2 статических метода
Для получения сообщений компилятора в данном слу- createTempFile класса File, создающие файл с уникальным
чае можно использовать стандартную технику – чтение «случайным» именем. К сожалению, воспользоваться ими
из потоков, возвращаемых методами getInputStream() и в данном случае невозможно. Новый Java-файл, создава-
getErrorStream() объекта Process, полученного в резуль- емый для сохранения заданного исходного Java-кода, не
тате обращения к методу Runtime.getRuntime().exec(...). может иметь произвольное имя – его имя обязательно дол-
Вот как примерно это выглядит: жно совпадать с именем public-класса, объявленного в этом
исходном коде (если, конечно, таковой имеется). Кроме
Process p= Runtime.getRuntime().exec(
ìàññèâ_àðãóìåíòîâ); того, нужен какой-то каталог, куда будут записаны .class-
/* - ïåðâûé ýëåìåíò â ìàññèâå äîëæåí файлы, полученные в результате компиляции.
ñîäåðæàòü ïîëíîå èìÿ ôàéëà óòèëèòû
javac, îñòàëüíûå ýëåìåíòû - Все это означает, что нужна специальная функция, со-
ïàðàìåòðû ýòîé óòèëèòû */ здающая временный подкаталог – так же, как File.create-
final InputStreamReader is= TempFile создает временный файл. Внутри этого подката-
new InputStreamReader(p.getInputStream()); лога можно создать серию вложенных каталогов, соответ-
final InputStreamReader es=
new InputStreamReader(p.getErrorStream()); ствующую пакету, в котором должен располагаться компи-
final StringBuffer out= new StringBuffer(); лируемый класс. Затем в самый внутренний каталог нуж-
final StringBuffer err= new StringBuffer();
но записать Java-файл с исходным текстом, присвоив это-
new Thread() { му файлу имя, соответствующее имени компилируемого
public void run() {
try { класса. Эту же структуру каталогов можно использовать
char[] buf= new char[32768]; для размещения результирующих .class-файлов, передав
int len;
while ((len=is.read(buf,0,buf.length))>=0) { соответствующие инструкции компилятору javac.
out.append(buf,0,len); Написать функцию создания временного каталога не
}
} catch (Exception e) { очень сложно. Достаточно использовать в качестве образ-
e.printStackTrace(); ца реализацию File.createTempFile в исходном тексте клас-
}
} са java.io.File. Основная идея – циклически генерировать
}.start(); более или менее случайные имена подкаталогов внутри
new Thread() { каталога временных файлов операционной системы, для
public void run() { каждого подкаталога пытаться его создать (методом
... (àíàëîãè÷íûé öèêë äëÿ es è err)
} File.mkdir) и выйти из цикла, как только очередная попытка
}.start(); будет удачной (mkdir вернет true). Цикл генерации имен и
int result= p.waitFor(); создания подкаталога нужно синхронизовать относитель-
/* - äîæèäàåìñÿ çàâåðøåíèÿ óòèëèòû javac но какого-либо глобального объекта точно так же, как это
è ïîëó÷àåì åå êîä çàâåðøåíèÿ */
сделано в методе File.createTempFile. Чтобы найти умолча-
if (result!=0) { тельный каталог временных файлов операционной систе-
/* - ïðîèçîøëà êàêàÿ-òî îøèáêà */
àíàëèçèðóåì è, âîçìîæíî, ïîêàçûâàåì мы, можно обратиться к переменной среды:
ïîëüçîâàòåëþ ñîîáùåíèÿ êîìïèëÿòîðà
out è err System.getProperty("java.io.tmpdir")
}
68
программирование
public static class Context { return returnValue;
public int a,b; }
} }
...
public void ÍåêîòîðûéÌåòîä() { Вместо NNN подставляется некоторый уникальный ин-
...
Context c= new Context(); декс – свой для каждого текста формулы. (Если разные
c.a= 23; формулы будут интерпретироваться с помощью разных
c.b= 45;
String formula= "new Integer(a+b)"; классов, то эти классы можно будет кэшировать и не ком-
Integer result= (Integer)Evaluator.eval(formula,c); пилировать повторно – смотри о кэшировании в конце пре-
...
} дыдущего раздела.) Вместо «имя_класса_context» подстав-
ляется context.getClass().getName(), вместо «текст_форму-
Язык Java по обыкновению создает затруднения при лы» – значение javaExpression.
попытке работать с примитивными типами на общих ос- Тип результата int метода ___performEval и тип перемен-
нованиях – их приходится заменять соответствующими ной returnValue соответствуют варианту метода evalInt. Дру-
классами-оболочками. Специально для упрощения рабо- гие варианты – eval, evalDouble и прочие – должны исполь-
ты с примитивными типами имеет смысл дополнить ос- зовать другой тип (соответственно Object, double, и т. д.).
новной метод eval версиями evalInt, evalLong, evalFloat, Имя «c» аргумента ___performEval – это имя, под ко-
evaDouble, evalBoolean, возвращающими результат соот- торым объект context будет доступен внутри формулы. Оно
ветствующего примитивного типа. Тогда последние 2 стро- может быть дополнительным аргументом методов eval,
ки примера выглядели бы проще: evalInt, ...
Компилируем полученный текст класса и загружаем
... скомпилированный класс, как описано в предыдущих раз-
String formula= "a+b";
int result= Evaluator.evalInt(formula,c); делах. Затем средствами отражений вызываем его ста-
... тический метод ___performEval, передавая ему в качестве
аргумента наш объект context, и возвращаем полученный
Наконец, если считать, что наш пример является час- результат. Задача решена.
тью реализации нестатического метода некоторого клас- Дополнительная переменная returnValue позволяет пе-
са, то пример можно было бы упростить еще больше: редавать в качестве формулы javaExpression фрагменты
кода, состоящие более чем из одного оператора Java. В
public class ÍåêîòîðûéÊëàññ { этом случае по умолчанию результатом вызова eval ока-
...
public int a,b; жется результат первого оператора, но всегда можно бу-
public void ÍåêîòîðûéÌåòîä() { дет в последнем операторе написать что-нибудь вроде
...
a= 23;
b= 45; returnValue= ðåçóëüòàò_íàøèõ_âû÷èñëåíèé;
String formula= "a+b";
int result= Evaluator.evalInt(formula,this);
... и тем самым вернуть другой результат.
}
} Приведенное решение, разумеется, неизящно. В фор-
муле приходится ссылаться на члены класса-контекста че-
Это практически так же удобно, как и eval в скрипто- рез громоздкую запись типа «c.a». Попробуем избавить-
вых языках. ся от явной ссылки «c.». Язык Java разрешает ссылаться
Как решить поставленную задачу – реализовать опи- непосредственно, без дополнительных уточнений, на чле-
санные методы eval, evalInt и прочие? ны текущего класса, его предков, члены класса, по отно-
Существует достаточно элементарное частичное ре- шению к которому текущий является вложенным, и чле-
шение. ны предков этого класса. Если класс, которому принад-
Потребуем, чтобы все обращения к членам объекта лежит метод ___performEval, унаследовать от класса
context в формуле javaExpression производились не напря- context.getClass().getName() или вложить в другой класс,
мую, а через некоторую дополнительную переменную – унаследованный от context.get-Class().getName(), то к чле-
ссылку на объект context. Формула в этом случае приобре- нам этого предка можно будет обращаться из нашей фор-
тает примерно такой вид: «c.a+c.b» (имя ссылки «c» могло мулы непосредственно. Метод ___performEval, разумеет-
бы быть дополнительным аргументом метода eval). ся, нужно будет сделать нестатическим.
В этом варианте задачу решить легко. Конструируем Таким способом формулу типа «a+b» скомпилировать
«на лету» текст Java-класса: удастся – синтаксически все будет соблюдено. Но как до-
биться, чтобы a и b ссылались именно на члены данного
import java.io.*; экземпляра context, переданного в качестве аргумента в
import java.util.*;
êàêèå-íèáóäü åùå ïîëåçíûå import, метод eval (или evalInt, evalDouble, ...)? Все, что можно
êîòîðûå ìîãóò ïðèãîäèòüñÿ âíóòðè ôîðìóëû сделать «легально» для исполнения формулы – создать
public class ___ExpressionNNN { новый экземпляр для нашего нового класса (или по эк-
public static int ___performEval( земпляру для серии вложенных классов) и указать имен-
èìÿ_êëàññà_context c)
{ но этот новый экземпляр при вызове метода ___perform-
int returnValue= òåêñò_ôîðìóëû; Eval через отражения. Виртуальная машина Java не по-
70
программирование
Такую коррекцию невозможно сделать «легальным» для строк «XXXX», «LXXXX;», (LXXXX;)V». Здесь XXXX –
путем, изменяя исходный текст и вызывая компилятор полное имя класса context, в котором точки (разделители
javac. Стандартный компилятор при генерации вложен- имени пакета) заменены знаком “/”:
ного класса непременно придаст ссылке this$0 точный
тип того класса, в который вложен данный. Но можно context.getClass().getName().replace('.','/')
скорректировать уже скомпилированный .class-файл
___ExpressionNNN$___Performer.class. Полученный новый массив байтов (другой длины) нуж-
Это не так сложно, как кажется. Формат .class-файлов но записать обратно в файл ___ExpressionNNN$___Per-
спроектирован очень грамотно и удобен для наших целей. former.class.
В начале файла идет так называемый «пул кон- Если имя ___ExpressionNNN не используется в Java-
стант», в котором собраны все символьные идентифи- приложении ни для каких других целей – для максималь-
каторы (в кодировке UTF-8), в том числе имена всех ной уверенности можно заменить его чем-нибудь вроде
упоминаемых классов. Весь .class-файл, в частности ___Expression_Asj5Sjl3_NNN, – то полученный .class-файл
пул констант, организован в виде последовательности будет вполне корректным. Остается загрузить его, создать
секций примерно такого вида: экземпляр, передав конструктору в качестве аргумента
код_типа_секции наш объект context, и выполнить метод ___performEval().
содержимое_фиксированной_длины Задача решена полностью.
или Возможно, в формулах имеет смысл открыть непосред-
код_типа_секции ственный доступ (без уточняющего имени класса) к како-
длина_секции му-либо набору стандартных функций или констант. Напри-
содержимое_переменной_длины мер, в математических формулах естественнее смотрелась
бы запись «sin(a+PI/4)», а не «Math.sin(a+Math.PI/4)». Для
Если в произвольной секции изменить содержимое и со- этого достаточно автоматически добавить желаемый на-
ответствующим образом подправить длину секции (размер бор функций и констант во вложенный класс ___Performer.
файла при этом тоже поменяется), то файл сохранит свою Некоторое неудобство приведенного решения связано с
корректность. В .class-файле не встречаются прямые сме- тем, что класс объекта context обязан быть public, а в случае
щения от начала файла или длины в байтах каких-то фраг- локального класса – public static. В частности, недопустимо
ментов файла, за исключением длин элементарных секций. использовать анонимные классы или локальные классы,
Имя класса ___ExpressionNNN может встречаться внут- объявленные внутри методов. В противном случае нам по-
ри файла ___ExpressionNNN$___Performer.class в виде просту не удастся унаследовать от него класс ___Expres-
строковых констант трех видов: sionNNN, расположенный, вообще говоря, в совершенно
непосредственно строка «___ExpressionNNN» (исполь- другом пакете (в наших примерах – в корневом пакете).
зуется не всеми компиляторами); Очевидно также, что для достижения хорошей эффек-
строка «L___ExpressionNNN;» – внутреннее имя типа тивности все скомпилированные формулы необходимо кэ-
___ExpressionNNN: именно таким образом виртуальная шировать, чтобы одна и та же формула не компилирова-
машина «именует» классы «внутри себя» (для примитив- лась повторно. Имеет смысл для каждой пары «формулы,
ных типов и массивов используются другие обозначения); экземпляр context» сохранить (в таблице HashMap) готовый
строка «(L___ExpressionNNN;)V» – сигнатура конструк- объект java.lang.reflect.Method для метода ___performEval и
тора или любого другого метода с единственным ар- экземпляр вложенного класса ___Performer, чтобы при по-
гументом типа ___ExpressionNNN. вторном обращении к eval осталось просто вызвать метод
invoke. Также есть смысл проверить, что одна и та же фор-
Если бы наш класс ___ExpressionNNN был вложен мула с одним и тем же context вызывается повторно, и в
внутрь какого-либо некорневого пакета (в наших приме- этом случае перейти на особо быструю ветку – не обращаю-
рах он размещается в корневом пакете), то в его полном щуюся к таблице HashMap. Подобная оптимизация позво-
имени нужно было бы заменить точки символами “/”. ляет достичь чрезвычайно высокого быстродействия, недо-
Строковые константы, в частности перечисленные стижимого для интерпретируемых скриптовых языков: на-
выше, представлены в пуле констант в виде следую- кладные расходы будут укладываться в доли микросекунды
щих цепочек байтов: (на компьютерах класса Pentium-III 800).
1 байт: 1 (код строкового типа); Идея описанного выше изящного решения принадлежит
2 байта: длина length строковой константы в кодиров- моему коллеге, Алексею Вылегжанину (anv@siams.com).
ке UTF-8 (сначала старший байт, потом младший); Разумеется, это решение (в отличие от первого вари-
length байтов: содержимое строковой константы в ко- анта, требующего использования в формулах ссылки «с.»),
дировке UTF-8. не является стопроцентно переносимым. Оно зависит от
особенностей компилятора javac, которые в принципе мо-
Все, что нам нужно сделать – загрузить файл гут измениться в следующей версии Java. Например, ком-
___ExpressionNNN$___Performer.class в виде массива бай- пилятору ничто не мешает вставить в класс ___Performer
тов, отыскать в нем все такие цепочки байтов для строк явную проверку, что поле this$0 принадлежит нужному типу,
«___ExpressionNNN», «L___ExpressionNNN;», «(L___Expres- причем сформировать имя типа динамически путем сло-
sionNNN;)V» и заменить их соответствующими цепочками жения строк «___Expres» и «sionNNN». Тогда скорректиро-
72
безопасность
OPENLDAP
И ЗАЩИТА ДАННЫХ
В настоящее время при администрировании крупных сетей часто используется система LDAP.
Но документации на русском по ней практически нет, а документация на английском очень уж
«размазана». Поэтому я решил полностью описать механизмы настройки сервера OpenLDAP и его
взаимодействия с уже существующими сетевыми сервисами...
ВСЕВОЛОД СТАХОВ
При администрировании сети на опре- тель» имеет своё имя, телефон, отдел, одна возможность централизован-
делённом этапе возникает проблема служебное положение, скрипт для вхо- ной аутентификации – службы NIS,
централизованного контроля аутенти- да в систему. Каждый пользователь работающие через UDP. LDAP пост-
фикации. Это особенно актуально для обладает определёнными правами, не- роен по объектно-ориентированно-
крупных сетей (100 и более пользова- которые из которых наследуются из му принципу и позволяет с лёгкос-
телей). Раньше единственным прием- прав группы, которой данный пользо- тью добавлять и изменять объекты
лемым выходом в такой ситуации была ватель принадлежит. При входе в сис- при помощи файлов схем. Кроме
установка Novell Netware как централь- тему каталогов пользователь получа- этого, LDAP обладает большими
ного сервера или службы NIS, если ет доступ только к «своим» файлам. возможностями в плане структури-
сеть основана на *nix машинах, что При этом сама система каталогов мо- рованности и работы с клиентами
бывает довольно редко. У Netware жет находиться на нескольких серве- различных платформ. Множество
(версии 4 и старше) существует очень рах. Конечно, здесь очень много ню- приложений поддерживают LDAP че-
грамотный механизм NDS (служба ди- ансов и очень много полезных возмож- рез PAM, но об этом далее. На осно-
ректорий Novell), позволяющий со- ностей, но я перейду сразу же к основ- ве LDAP легко построить гетероген-
здать единое дерево сети, в котором ной теме: службе директорий, работа- ные сети, кроме этого, информация
каждый компонент сети является ющей в TCP/IP-сетях – LDAP об объектах хранится в древовидной
объектом службы директорий. Причём (Lightweight Directory Access Protocol). структуре. Например, вот как может
каждый объект обладает определён- выглядеть дерево для крупной орга-
ными параметрами для его идентифи- Теория и терминология низации, разбросанной по несколь-
кации. Например, объект «пользова- Раньше в *nix существовала только ким странам с дочерними фирмами:
74
безопасность
ROOT
Ñòðàíà=C
Ñòðàíà
Îðãàíèçàöèÿ=O
Îðãàíèçàöèÿ
Ãëàâíûé
Ãëàâíûé
Ãëàâíûé Ãëàâíûé
Îáüåêòû íèæíåãî óðîâíÿ
Ïðèíòåð Ïðèíòåð
Îáúåêòû âåðõíåãî óðîâíÿ(C, O, OU, DC, L) ÿâëÿþòñÿ êîíòåéíåðíûìè, ò.å. Ìîãóò ñîäåðæàòü äðóãèå îáúåêòû. Îáúåêòû íèæíåãî
óðîâíÿ îáû÷íî òàêîé îñîáåííîñòüþ íå îáëàäàþò. Ïðèâåä¸ííàÿ ñõåìà æåñòêî íå çàêðåïëÿåò èåðàðõèþ îáúåêòîâ, äåðåâî ìîæåò ñòðîèòü-
ñÿ â ðàçëè÷íîì ïîðÿäêå. Ïðè èñïîëüçîâàíèè èíòåðíåò-äåðåâà ìîæåò èñïîëüçîâàòüñÿ èåðàðõèÿ îïðåäåëåíèé dc. Çà÷àñòóþ òàêæå
ïðèìåíÿþò ñìåøàííûå ñõåìû ñòàíäàðòíîé è èíòåðíåò íîòèôèêàöèè. Äëÿ âûáîðà êîíêðåòíîé âåòâè èñïîëüçóþò òåðìèí dn ïîèñêà -
âåðõíèé îáúåêò, îò êîòîðîãî íà÷èíàåòñÿ ïîèñê.
Здесь можно сразу же опреде- ные объекты-контейнеры будут играть стройкой сервера. Я использовал
литься с сокращениями, принятыми роль веток, а обычные объекты – роль OpenLDAP и всё нижесказанное от-
в службе директорий: листьев. Вообще, древовидная струк- носится только к данному пакету
С(ountry) – страна; тура имеет множество преимуществ по LDAP.
ST(ate) – имя региона, области сравнению с линейной (/etc/passwd), Для начала необходимо иметь сле-
или штата; т.к. позволяет точно определить нахож- дующие вещи (я предполагаю уста-
L(ocation) – имя города, посёлка, дение пользователя или иного объек- новку из пакетов, а не из сырцов; ус-
деревни; та. /etc/passwd предоставляет лишь тановка из сырцов также не должна
O(rganization) – имя компании; жалкое подобие данной модели – поле вызвать затруднений, но у меня
O(rganizational)U(nit) – раздел GECOS, но работая с LDAP, просто не- оных просто не было):
компании. обходимо указывать полное описание библиотеки LDAP;
объекта. Для обозначения полного сервер LDAP (slapd);
Данные объекты дерева являются описания (+имени) объекта относи- pam_ldap и nss_ldap для аутенти-
основополагающими, т.к. являются тельно скелета дерева используется фикации через LDAP.
контейнерами для других объектов. На термин DN (distinguished name – назна-
их основе обычно строится дерево ка- ченное имя, контекст). На этом по- После чего надо настроить сер-
талогов. Самый верхний уровень пред- звольте завершить описание теории и вер на работу в вашей службе ката-
ставляет объект root (и здесь рут!), от перейти к практике... логов. Открываем файл конфигура-
него происходят скелетные объекты, ции /etc/[open]ldap/slapd.conf (при
внутри которых и заключаются конк- Общая настройка установке из исходников /usr/local/
ретные объекты-листья дерева. Если сервера slapd etc/openldap). Он содержит прибли-
представить себе дерево, то скелет- Займёмся самым интересным: на- зительно следующее:
76
безопасность
базе можно использовать следую- ldapsearch -LL -H ldap://localhost
#---------------------------------- -b"dc=test,dc=ru" -x "(uid=null)"
dn: ou=users,dc=test,dc=ru щий синтаксис:
# Êîíòåêñò ãðóïïû ïîëüçîâàòåëåé #
ou: users # filter: (uid=null)
# Çíà÷åíèå ãðóïïû
objectclass: top ldapadd -x -D "cn=root,dc=test,dc=ru"
-W -f base.ldif # requesting: ALL
objectclass: organizationalUnit
# Êëàññ ãðóïïà #
или же # null, Users, test, ru
#----------------------------------
dn: uid=null,ou=users,dc=test,dc=ru
# Êîíòåêñò êîíêðåòíîãî ïîëüçîâàòåëÿ dn: uid=null,ou=Users,dc=test,dc=ru
# èç /etc/passwd slapadd -f base.ldif
uid: null uid: null
# Åãî ïîëüçîâàòåëüñêèé ïñåâäîíèì cn: Neo
cn: Neo для добавления записи в режиме
# Ðåàëüíûé ïñåâäîíèì offline. Первый способ лучше, так
objectclass: account objectClass: account
# Êëàññ ïîëüçîâàòåëüñêèé ïðîôèëü как позволяет проверить работу
objectclass: posixAccount objectClass: posixAccount
LDAP в сети (фактически использу-
# Êëàññ ïîëüçîâàòåëÿ POSIX objectClass: top
objectclass: top ются TCP-сокеты).
Далее выполняем миграцию того, objectClass: uidObject
objectclass: uidObject
# Ñàìàÿ ëó÷øàÿ îáîëî÷êà - zsh! что нужно перенести в LDAP, например:
loginshell: /bin/zsh loginShell: /bin/zsh
# Âñå ñëåäóþùèå ïàðàìåòðû ñîâïàäàþò uidNumber: 1000
# ñ àíàëîãè÷íûìè â /etc/passwd ./migrate_hosts.pl /etc/hosts
uidnumber: 1000 hosts.ldif gidNumber: 1000
gidnumber: 1000 homeDirectory: /home/null
Файл hosts.ldif будет содержать
homedirectory: /home/null gecos: Neo
примерно следующее (в файле /etc/
gecos: Neo hosts было 192.168.1.23 work.test.ru # search result
userpassword: $1$abcdvPbaLa6vs4ABab1N work):
search: 2
78
безопасность
Защита LDAP [ v3_req ]
subjectAltName = email:copy
трафика с порта 389 с целью повы-
при помощи SSL basicConstraints = CA:false шения безопасности (это запрещает
Как я уже говорил, в LDAP существует nsComment = "LDAP server certifica- доступ по сети к серверу ldap без ме-
te"
возможность защиты данных, переда- nsCertType = server ханизма ssl). Для генерации сертифи-
ваемых по сети. При этом использует- ката в данном случае можно приме-
ся два метода: TLS и SASL. Первый из Немного страшновато выглядит, но нить скрипт для генерации stunnel сер-
них не меняет порта, на котором слу- в ходе всех этих действий создаются тификатов, который обычно поставля-
шает LDAP (336), а просто организует два сертификата: доверенный серти- ется вместе с stunnel. Можно также
аутентификацию асимметрическим фикат и подписанный им сертификат применить следующее:
шифрованием, SASL же меняет порт сервера. Таким образом, сервер LDAP
LDAP на ldaps:// и соединение идёт по сможет проверить правильность свое- $ openssl req -new -x509 -days 365
-nodes -config stunnel.cnf \
другому механизму: через туннель го сертификата через доверенный сер- -out stunnel.pem -keyout stunnel.pem
SASL. TLS намного проще в настройке, тификат. Кстати, если у вас уже есть $ openssl gendh 512 >> stunnel.pem
поэтому я расскажу именно о нём. Для доверенные сертификаты, то можно
начала надо сгенерировать серверную воспользоваться ими: просто пропус- для генерации self-signed сертифика-
пару ключей асимметрического шиф- тите второй и третий шаг, и на четвер- та и параметров для ключей Дифле-
рования. Для этого в Linux удобно вос- том шаге введите имя своего доверен- мана-Хельмана. На самом деле через
пользоваться единым центром серти- ного сертификата (можно также вос- туннель у меня все работало просто
фикации OpenSSL (об этом я уже пи- пользоваться моим скриптом CA). на ура, а встроенные механизмы ра-
сал на страницах январского номера): Итак, после всех этих действий ботали несколько странно, хотя я пе-
создаем rsa ключ длиной 1024 перемещаем сертификаты и ключ речитал все маны и руководства, но
бита и сохраняем его в файле сервера LDAP (ldap.key) куда-нибудь это не помогло...
ldap.key: в /etc/ssl/ldap (принято хранить все Теперь перезапускаем slapd и на-
ключи и сертификаты, созданные страиваем клиентов. Для настройки
$ openssl genrsa -out ldap.key openssl в /etc/ssl) и делаем их доступ- клиентов надо прописать в файле
1024 ными для чтения только владельцу: ldap.conf следующие строки:
80
безопасность
# ldapsearch -ZZ -H localhost -b cti/ldap-smb/ldap-smb-2_2-howto.html – # öåëÿõ áåçîïàñíîñòè).
"o=smb, dc=test, dc=ru" "uid=pc1$" AuthLDAPBindDN
-- отличный пример настройки контрол- cn=proxy,dc=test,dc=ru
dn: uid=icb$, o=smb, dc=test, dc=ru лера домена с LDAP (не буду же я # Ïàðîëü äëÿ îñíîâíîãî êîíòåêñòà
objectClass: sambaAccount AuthLDAPBindPassword secret
uid: pc1$ здесь приводить все эти конфиги, а # Âêëþ÷åíèå ìåõàíèçìà TLS äëÿ äîñòóïà
pwdLastSet: 0 мои собственные исторической ценно- # ê ñåðâåðó ldap (ïî óìîë÷àíèþ off)
logonTime: 0 AuthLDAPStartTLS on
logoffTime: 2147483647 сти не имеют). # Îñíîâíîé ïàðàìåòð, êîòîðûé
kickoffTime: 2147483647 Напоследок скажу ещё об одном # îïðåäåëÿåò ñåðâåð ldap, dn ïîèñêà,
pwdCanChange: 0 # àòðèáóòû è ôèëüòð, ïî êîòîðîìó
pwdMustChange: 2147483647 приложении, работающем непосред- # âûïîëíÿåòñÿ àóòåíòèôèêàöèÿ:
displayName: MustdiePC ственно с LDAP, – это squid. Для него # ldaps://host:port/
cn: PC1 basedn?attribute?
rid: 2054 существует модуль, позволяющий вы- # scope?filter, ãäå basedn -
primaryGroupID: 1201 полнить http-аутентификацию, ис- áàçîâûé
lmPassword: # dn äëÿ ïîèñêà (èùåòñÿ òîëüêî â äàí-
56D989A3C45BBAD3462E8109C329E116 пользуя базу LDAP. В исходных тек- # íîé âåòâè äåðåâà è å¸ ïîòîìêàõ)
ntPassword: стах сквида можно найти модуль, # attribute – ñïèñîê àòðèáóòîâ,
56D989A3C45BBAD3462E8109C129E116 # ðàçäåëÿåìûõ çàïÿòîé, ïî êîòîðûì
acctFlags: [W ] squid_ldap_auth, представляющий со- # ïðîèçâîäèòñÿ ïîèñê (ïî óìîë÷àíèþ
-- бой внешнюю программу, его исход- # èñïîëüçóåòñÿ àòðèáóò uid)
# scope - ôëàã, îïðåäåëÿþùèé òèï
Далее вы можете изменять инфор- ные тексты находятся в каталоге # âîçâðàùàåìûõ çíà÷åíèé one - èùåòñÿ
мацию профиля пользователя. Напри- auth_modules/LDAP. Скомпилировав # ïåðâîå âûðàæåíèå, sub - èùóòñÿ âñå
# âûðàæåíèÿ, ñîîòâåòñòâóþùèå
мер, весьма полезны атрибуты её обычным образом (./configure -> # ôèëüòðó (ïðèíÿòî ïî óìîë÷àíèþ).
scriptPath (скрипт, выполняющийся make -> make install), получаем # filter - ñòðîêà, îïðåäåëÿþùàÿ
# ôèëüòð ïîèñêà ýëåìåíòîâ ldap,
при логине клиента), homeDrive (диск обычный исполняемый файл # çàêëþ÷àåòñÿ â ñêîáêè, ïî óìîë÷àíèþ
домашней директории), profilePath squid_ldap_auth. После установки # ðàâíà (objectclass=*). Ôèëüòð ìîæåò
# ñîäåðæàòü ëîãè÷åñêèå âûðàæåíèÿ |
(путь к профилю), pwdMustChange (не- модуля добавляем такие строчки в # è & êîòîðûå äîëæíû ñòîÿòü íå ìåæäó
обходимость смены пароля пользова- squid.conf: # äâóìÿ ñêîáêàìè, à ÏÅÐÅÄ íèìè.
# Ïðèâåäó íåñêîëüêî ïðèìåðîâ ôèëüò-
телем). Для изменения базы данных # ðîâ: (|(cn=admin)(uid=root)) –
LDAP на лету существует команда authenticate_program /usr/squid/ # èëè cn admin èëè UID root
libexec/squid/squid_ldap_auth -b # (cn=admin) - òîëüêî cn = admin
ldapmodify, которая, как и команда dc=test,dc=ru localhost # Â äàííîì ïðèìåðå äîïóñòèìûì ÿâëÿþò-
ldapadd, работает с файлами ldiff. Я # ñÿ òîëüêî îáúåêòû, ïðèíàäëåæàùèå
basedn
не буду подробно описывать формат Вначале указываем путь к испол- # O=myorg, OU=sysopka
этого файла, а просто приведу при- няемому файлу, затем основной суф- AuthLDAPUrl ldaps://test.ru/
O=myorg, OU=sysopka
мер изменения нужных атрибутов: фикс базы LDAP и LDAP-сервер # Òðåáóåì òîëüêî ïîëüçîâàòåëåé,
(localhost у меня). Далее в squid.conf # ïðîøåäøèõ ïðîâåðêó íà ldap-ñåðâåðå
require valid-user
dn: uid=001, o=smb, dc=test, dc=ru добавляем права доступа(ACL): </Directory>
changetype: modify
replace: profilePath
profilePath: \\%N\profiles\user1 # Çàñòàâëÿåì âñåõ àóòåíòèôèöèðî- Существует ещё несколько опций
- # âàòüñÿ äëÿ äîñòóïà ê ïðîêñè модуля, но они используются реже, и
replace: scripthPath acl password proxy_auth REQUIRED
scripthPath: 001.bat # Âîçìîæåí äîñòóï http âñåì, êòî о них можно почитать в документации.
- # ïðîø¸ë ïðîâåðêó Proftpd имеет схожий модуль auth-ldap,
replace: homeDrive http_access allow password
homeDrive: Z: # Îñòàëüíûõ øëåì ïîãóëÿòü но здесь описывать его я не буду, т.к.
- http_access deny all настройка модуля ftp-сервера очень
replace: pwdCanChange
pwdCanChange: 0 похожа на конфигурацию апача.
- Теперь о возможности работы с Настройка почтовых серверов
replace: pwdMustChange
pwdMustChange: 0 LDAP апача. Апач имеет модуль также не представляет особой про-
- mod_auth_ldap, который позволяет блемы. Я, например, без проблем
replace: primaryGroupID
primaryGroupID: 513 производить http-аутентификацию настроил postfix и курьер, последний
- через LDAP-сервер. Здесь я опять же настраивать особенно легко, т.к. он
ограничусь только примером типич- работает сразу же после того, как
Для добавления информации в ной настройки аутентификации че- указывается LDAP-сервер, основной
базу воспользуйтесь командой: рез ldap: dn, запись администратора и её па-
роль в открытом виде для доступа к
$ ldapmodify -H localhost -D httpd.conf полям паролей пользователей
"<admin_DN>" -W -ZZ -l modifi- # Çàãðóæàåì ìîäóëü àóòåíòèôèêàöèè.
cation.ldif # Îáû÷íî íàõîäèòñÿ â extramodules (опять же можно использовать
LoadModule auth_ldap_module proxy). Конфигурация postfix не-
extramodules/auth_ldap.so
(Примечание: в руководствах гово- AddModule auth_ldap.c сколько сложнее:
рится, что надо использовать ключ -f,
# Îïðåäåëåíèÿ àóòåíòèôèêàöèè ÷åðåç main.cf
а не -l, но у меня по-другому не рабо- # ldap äëÿ êîíêðåòíîãî êàòàëîãà
<Directory /var/www/secure> virtual_maps = ldap:ldapvirtual
тало, хотя, наверное, я что-то делаю
# Ýòî îñíîâíîé êîíòåêñò äëÿ ïîèñêà # Ñåðâåð ldap è ïîðò
не так). # ñîîòâåòñòâèÿ ïîëüçîâàòåëÿ è ïàðîëÿ
# â áàçå LDAP, åñëè äàííàÿ îïöèÿ íå ldapvirtual_server_host = test.ru
Любителям готовых примеров по- ldapvirtual_server_port = 389
# óêàçàíà, íî èñïîëüçóåòñÿ àíîíèìíûé # Îñíîâíîé dn äëÿ ïîèñêà ïî áàçå
советую сходить на http://www.unav.es/ # äîñòóï (÷òî îáû÷íî çàïðåùàåòñÿ â
82
безопасность
ществуют файлы схем. В файле схе- реть, как сделано в готовых схемах ять пробел!), который указывает,
мы описываются классы и их атрибу- (я думаю, что изменить последнюю что данный атрибут может прини-
ты, чтобы подключить схему к LDAP, пару чисел готового OID не соста- мать только единственное значе-
необходимо прописать в файле вит труда, а описывать это мне пред- ние (по умолчанию ему можно при-
slapd.conf полный путь к нужной схе- ставляется совершенно ненужным). сваивать несколько значений).
ме. По умолчанию к LDAP подключе- После сочинения OID перейдём к до- NO-USER-MODIFICATION – флаг,
ны несколько основных схем, суще- бавлению новых атрибутов. Для запрещающий модификацию дан-
ствуют также сторонние схемы, на- этой цели используется директива ного атрибута пользователем (по
пример для SAMBA или некоторых attributetype. Вот как выглядят опи- умолчанию модификация разре-
почтовых серверов. Чтобы эти схемы сания атрибутов в схеме SAMBA шена).
использовать, в slapd.conf прописыва- (приведён маленький фрагмент):
ют нечто подобное: При составлении схемы учтите, что
attributetype ( 1.2.840.113556.1.4.8 после каждой лексемы (включая скоб-
NAME 'userAccountControl'
# Âêëþ÷àåì ñõåìû ïî óìîë÷àíèþ SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 ки и флаги) должен идти один пробел.
# êîìàíäîé include SINGLE-VALUE ) Приведу пример составления атрибу-
include /usr/share/openldap/schema/
core.schema attributetype (1.2.840.113556.1.4.166 та картинки как пути к jpg-файлу:
include /usr/share/openldap/schema/ NAME 'groupMembershipSAM'
cosine.schema SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
include /usr/share/openldap/schema/ attributetype ( 1.1.2.1.2 NAME 'pic'
SINGLE-VALUE ) DESC 'my jpeg picture'
inetorgperson.schema
# Âêëþ÷àåì ñõåìó ñàìáû SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
attributetype (1.2.840.113556.1.4.213 SINGLE-VALUE )
include /usr/share/openldap/schema/ NAME 'defaultClassStore'
samba.schema SYNTAX 1.3.6.1.4.1.1466.115.121.1.12)
# Âêëþ÷àåì ñâîþ ñõåìó
include /usr/share/openldap/schema/ И, например, картинки на сайте,
my_cool.schema Как видно, в скобках идёт внача- представленной в виде URL:
ле OID атрибута, затем NAME и имя
Теперь разберёмся, как эти схемы атрибута в кавычках, а затем тип ат- attributetype ( 1.1.2.1.3 NAME 'URLpic'
DESC 'URL to picture'
создавать. Если вы откроете какую- рибута. Вот тут немного остановлюсь. SUP pic )
нибудь схему, то сначала всё покажет- Видно, что тип атрибута – это также
ся довольно жутким. Хочу сразу же OID (ужас-то какой, но это позволяет Создание нового класса несколь-
вас обрадовать: это действительно добавлять даже свои типы). Стандар- ко проще, приведу пример класса
жутко! Чтобы хоть чего-то объяснить тно предопределено несколько типов: cronEntry из cron.schema:
расскажу об OID. OID (уникальный
идентификатор объекта) использует- ëîãè÷åñêèé objectclass (1.3.6.1.4.1.7006.1.3.2.1
1.3.6.1.4.1.1466.115.121.1.7 NAME 'cronEntry'
ся LDAP, чтобы не было наложений èìÿ LDAP(DN) SUP top
классов и их атрибутов. OID состоит 1.3.6.1.4.1.1466.115.121.1.12 STRUCTURAL
ñòðîêà ôîðìàòà UTF-8 MUST ( cn $ cronCommand $ uid )
из числовых значений разделённых 1.3.6.1.4.1.1466.115.121.1.15 MAY ( cronHost $
точкой и составляющих в целом ñòðîêà ASCII cronMinute $
1.3.6.1.4.1.1466.115.121.1.26 cronHour $
иерархию OID: öåëîå cronDay $
1.3.6.1.4.1.1466.115.121.1.27 cronMonth $
DN è èäåíòèôèêàòîð ïîëüçîâàòåëÿ(UID) cronDayOfWeek $
1.1 1.3.6.1.4.1.1466.115.121.1.34 owner $
OID äàííîé îðãàíèçàöèè(âûáèðà- ñòðîêà èç ÷èñåë description ) )
åòñÿ ëþáîé) 1.3.6.1.4.1.1466.115.121.1.36
1.1.2 OID
Ñàìè èäåíòèôèêàòîðû LDAP 1.3.6.1.4.1.1466.115.121.1.38 Вначале идёт OID, имя (не забудь-
1.1.2.1
Àòðèáóòû êëàññîâ те кавычки), родительский класс (на-
1.1.2.1.1 Кроме типа атрибута можно ука- следуются атрибуты), тип класса (для
Êîíêðåòíûé àòðèáóò(ìåíÿåì ïîñëåä-
íþþ öèôðó äëÿ êàæäîãî àòðèáóòà) зывать дополнительные его пара- знакомых с объектно-ориентирован-
1.1.2.2 метры: ной моделью объясняю: ABSTRACT –
Ñàìè êëàññû
1.1.2.2.1 DESC – строка (обычный текст), абстрактный (нельзя делать объекты
Êîíêðåòíûé êëàññ которая описывает данный атри- данного класса, можно только насле-
бут. довать) и STRUCTURAL – обычный
Для получения OID можно зайти SUP – строка (имя) или OID роди- (по умолчанию)). Далее идут поля ат-
на узел www.iana.org (начинается с тельского атрибута (происходит рибутов для класса: MUST – обяза-
1.3.6.1.4). Вообще, как я понял, со- наследование синтаксиса роди- тельные атрибуты, MAY – необяза-
ставление иерархии OID – дело до- тельского атрибута). тельные. Список атрибутов заключа-
вольно проблематичное. Проще все- EQUALITY – строка (наименование) ется в скобки и разделяется по стран-
го взять какой-либо OID для атрибу- или OID метода поиска, например, ной прихоти не запятыми, а знаками
тов (обычной базой OID является caseIgnoreMatch для поиска данно- доллара (очевидно, это намёк разра-
1.3.6.1.4) и для классов, а затем про- го атрибута без учёта регистра. ботчиков). Думаю, тут можно ещё раз
сто добавить ещё несколько цифр. SINGLE-VALUE – просто флаг (пос- напомнить о необходимости пробе-
А вообще, лучше просто посмот- ле него должен обязательно сто- лов после каждой лексемы (и долла-
84
BUGTRAQ
Переполнение буфера в Winamp Межсайтовый скриптинг в Apache
Winamp поддерживает проигрывание b4s-файлов, ко- Уязвимость межсайтового скриптинга обнаружена в
торые составляются посредством xml. Синтаксис таков: типовом сценарии “printenv”, поставляемом с Apache
веб-сервером. Уязвимость позволяет удаленному ата-
<?xml version="1.0" encoding='UTF-8' standalone="yes"?> кующему создать злонамеренную ссылку, содержащую
<WinampXML>
<!-- Generated by: Nullsoft Winamp3 version 3.0 --> произвольный код сценария в параметрах уязвимого
<playlist num_entries="[êîë-âî çàïèñåé]" скрипта, который будет выполнен в браузере пользо-
label="[íàçâàíèå_list'a]">
вателя в контексте уязвимого сайта при клике на та-
<entry Playstring="file:[ïóòü_ê_çâóêîâîìó_ôàéëó]"> кую ссылку. Уязвимость позволяет атакующему красть
<Name>[íàçâàíè_ïåñíè]</Name>
<Length>[âåëè÷èíà_â_áàéòàõ]</Lengt> данные, хранящиеся в куки пользователя. Пример:
</entry>
</playlist> http://www.example.com/cgi-bin/printenv/<a
</WinampXML> href="bad">test</a>
Переполнение буфера происходит при обработке чрез- Уязвимость обнаружена в Apache Software Foundation
мерно длинного названия листа (4-ая строчка). Причем Apache 1.3.22-2.0.43.
есть некоторые нюансы:
При получении 16 398 байт переполнение происходит Множественные уязвимости в KDE
только при выходе из WinAmp’a. 4-мя байтами затирает- В некоторых случаях KDE неправильно приводит па-
ся eax и retaddr (причем ret находится в регистре eax). Если раметры инструкций, переданные в командную оболоч-
же название листа еще увеличить на ~100b, переполне- ку для исполнения.
ние произойдет сразу же при запуске. 12-ю байтами пе- Эти параметры могут содержать данные типа URL,
резапишутся ecx, esi и retaddr. Хотя, что касается адрес- имен файлов и адресов электронной почты, и эти данные
ного пространства, данные могут разниться в зависимос- могут быть дистанционно преданы жертве в электронном
ти от билда WinAmp’a и вообще операционной системы. сообщении, веб-странице или через другие источники.
Так или иначе, составить b4s’ку, протроянивающую сис- Тщательно обрабатывая такие данные, нападающий
тему, не составляет никакого труда. может выполнить произвольные команды на уязвимой
Уязвимость обнаружена D4rkGr3y из Damage Hacking системе с привилегиями текущего пользователя.
Group. Уязвимость обнаружена в KDE 2.0-3.0.5.
БЕЗОПАСНОСТЬ ТЕХНОЛОГИИ
ВИРТУАЛЬНЫХ КАРТ
СЕРГЕЙ РОПЧАН
Смысл виртуальной карты заключается в том, чтобы психологически «раскрепостить» клиента при
совершении электронных покупок. Действительно, карта, которой пользуется покупатель, связана
с небольшим по размеру счетом, и потому весь риск покупателя ограничен потерей средств на
нем.
Идея виртуальной карты (е-card) осно- сотовой связи, интернет-провайдеров, эмитенты должны понятным для
вана на том, что во время проведения туристических компаний, предприя- клиента образом передать ему но-
CNP-транзакции (CPN-Cardholder Not тий гостиничного бизнеса и т. д. Для мер карты, ее срок действия и т. п.,
Present – операция покупки по пласти- проведения других операций (расче- а также способ ее использования;
ковой карте, в момент совершения ко- тов в обычной торговой сети, получе- эмитенты должны утвердить вы-
торой клиент не присутствует лично в ния наличных денежных средств) кар- пуск виртуальных карт в соответ-
торговой точке, а сообщает ей рекви- та VISA E-c@rd не предназначена. ствующих департаментах серти-
зиты своей карты, необходимые для Использование виртуальной карты фикации карт международных
проведения авторизации) пластиковая удобно для клиента в случае, когда платежных систем;
карта как физический объект не банк-эмитент дополнительно предос- эмитент должен ясно объяснить
применяется. Используются лишь рек- тавляет ему услуги интернет-банкин- владельцу виртуальной карты, что
визиты карты, и совсем необязатель- га для управления своими счетами. В она не может использоваться в ре-
но, чтобы они были нанесены на плас- этом случае клиент в удаленном режи- жиме Dual Mode, когда авториза-
тик. Поэтому можно выделить от- ме при помощи только персонального ция производится по виртуальной
дельные, предназначенные специаль- компьютера, подключенного к Интер- карте, а презентмент сформиро-
но для электронной коммерции номе- нету, может в режиме реального вре- ван по обычной карте, привязан-
ра карт с сопутствующими им рекви- мени перевести средства со своего ной к тому же счету, что и
зитами, и «привязать» к таким вирту- «главного» счета на счет, связанный с виртуальная карта.
альным картам счета с небольшим ос- виртуальной картой, в количестве, не-
татком. В этом случае клиент будет за- обходимом для совершения намечен- Для того чтобы передать клиенту
страхован от крупных потерь, связан- ных электронных покупок. реквизиты виртуальной карты, эми-
ных с риском мошенничества. Требования к виртуальным картам тент может использовать некоторый
Гута Банк стал первым российс- состоят в следующем: физический носитель информации о
ким банком, который приступил к виртуальная карта должна иметь реквизитах карты (Reference Device –
эмиссии виртуальных карт платеж- номер (например, система RD). RD по своим физическим харак-
ной системы VISA, получивших MasterCard требует, чтобы номер теристикам должен явным образом
название VISA E-c@rd и специально карты состоял из 16 цифр) и срок отличаться от обычной карты. В част-
предназначенных для осуществления действия; ности, RD не должен иметь тех же
платежей в Интернете. Проект был система MasterCard требует, что- размеров и пропорций, что и обычная
запущен летом 2000 года, после того бы с виртуальной картой была свя- карта, содержать голограмм платеж-
как компания VISA International за- зана величина CVC2 (VISA остав- ных систем, а также магнитной поло-
вершила сертификацию VISA E-c@rd ляет вопрос использования вели- сы и чипа.
и официально санкционировала их чины CVV2 для виртуальной кар- В то же время на физическом но-
эмиссию Гута Банком. ты на решение эмитента карты); сителе должен находиться логотип
Карты VISA E-c@rd предназначе- к виртуальным картам применяют- платежной системы, размеры и цвет
ны для оплаты через Интернет любых ся те же правила, что и к обычным которого определяются правилами
видов товаров и услуг в любых элект- картам, за исключением правил, платежной системы. Дизайн физичес-
ронных магазинах во всем мире, в том которые связаны с физическими кого носителя, а также иные средства
числе для оплаты услуг операторов характеристиками карт; доведения информации о реквизитах
86
безопасность
карты и правилах ее использования помощью технологии виртуального расчетов разделены) система эмитен-
должны пройти обязательную серти- номера карты должен установить на та будет обязана также обработать
фикацию в платежной системе. свой компьютер специальное ПО. клиринговое (финансовое) сообще-
Другое важное требование между- После того как клиент получает от ние, связанное с рассматриваемой
народных платежных систем заклю- интернет-магазина для заполнения транзакцией. При обработке клирин-
чается в том, что виртуальная карта форму, содержащую информацию о гового сообщения требуется выпол-
может быть выдана: реквизитах карты, ПО клиента ини- нить необходимую подстановку ре-
владельцу «физической» карты; циирует обращение к системе сво- ального номера карты вместо вирту-
клиенту, не имеющему «физичес- его эмитента. Эмитент генерирует ального номера.
кой» карты платежной системы, но для клиента виртуальный номер кар- Достоинство идеи виртуального
имеющему возможность получить ты и возвращает его клиенту. При номера карты уже отмечалось. Веро-
ее по его первому требованию. этом эмитент контролирует в неко- ятность мошенничества при реализа-
тором смысле уникальность сгене- ции идеи эмитентом практически рав-
Эти условия по замыслу платеж- рированного номера карты, а также на нулю. При этом технология работы
ных систем должны сформировать принадлежность префикса карты к платежной системы никак не затра-
столь же серьезное отношение бан- выделенному для эмитента диапа- гивается, начиная с уровня торговой
ка-эмитента к виртуальной карте, как зону значений BIN. точки – те же протоколы, форматы
и к обычной, поскольку ответствен- После этого транзакция выполня- сообщений и т. п.
ность банка за своего клиента-вла- ется обычным образом. Клиент на- В то же время идея виртуальных
дельца виртуальной карты не меня- правляет интернет-магазину запол- номеров карт имеет и ряд недостатков.
ется по сравнению со случаем вла- ненную форму, в которой в качестве Во-первых, как уже упоминалось,
дельца обычной карты. номера карты фигурирует виртуаль- владелец карты должен установить на
Ключевым фактором в реализа- ный номер. В результате выполнения своем компьютере специальное ПО,
ции программ виртуальных карт явля- стандартных процедур обработки называемое электронным кошельком.
ется небольшое время, необходимое транзакции в системе обслуживаю- Для некоторой категории клиентов
международным системам и банкам- щего банка и платежной системы из такая процедура сама по себе пред-
эмитентам для их запуска. Сегодня последней в систему эмитента посту- ставляет проблему.
это время оценивается в две недели. пает авторизационный запрос, со- Во-вторых, эмитент должен пред-
держащий виртуальный номер кар- ложить клиенту процедуру его аутен-
Виртуальные номера карт ты. Эмитент, получив авторизацион- тификации во время обращения кли-
Идея виртуальной карты получила ный запрос, устанавливает соответ- ента за виртуальным номером в сис-
развитие в технологии виртуального ствие между данными, сгенерирован- тему эмитента. Как правило, исполь-
номера карты (используются также ными при инициализации транзак- зуется система паролей – клиент в
термины pseudo card number и proxy ции, и данными авторизационного защищенной сессии с системой эми-
card number). Суть этой технологии запроса. Соответствие ищется по тента сообщает последней свой иден-
заключается в том, что при запол- целому ряду параметров. тификатор и кодовое слово (пароль).
нении формы торгового предприя- Например, система MasterCard к Здесь существуют несколько подхо-
тия во время операции по оплате обязательным параметрам относит дов к решению задачи. Наиболее на-
владелец карты вместо реального номер карты, срок ее действия, имя дежным является получение клиентом
номера карты сообщает интернет- магазина (Merchant Name), идентифи- своих идентификатора и пароля
магазину некоторый случайный но- катор магазина (Merchant ID), сумму непосредственно в банке (в крайнем
мер. После того как транзакция транзакции и валюту транзакции. случае письмом из банка, причем
поступает в систему эмитента для Эмитент определяет реальный номер идентификаторы клиента должны
авторизации, производится обрат- карты, выполняя обратное преобразо- распечатываться в PIN-конверте для
ное преобразование виртуального вание, проводит с его использовани- того, чтобы сделать информацию зак-
номера карты в реальный номер. В ем авторизацию транзакции и резуль- рытой для банковского персонала).
результате при выполнении опера- тат возвращает в платежную сеть, Этот подход является неудобным
ций покупки реальный номер карты предварительно вновь подставив в для клиента. Поэтому на практике
никогда не передается в платежную авторизационный ответ виртуальный находит применение другой, менее
сеть и остается в системе эмитен- номер карты. надежный метод. Клиент получает
та. Таким образом, вероятность ком- Если в платежной системе исполь- свои идентификаторы во время пер-
прометации реальных номеров карт, зуется технология Single Message вой сессии с системой эмитента. Он
а также вероятность успешного со- System (авторизационный запрос яв- идентифицирует себя, представляя
вершения транзакции мошенником ляется одновременно и финансовым эмитенту реквизиты карты, а также
становятся близкими к нулю. сообщением, требующим от эмитен- дополнительную информацию, запра-
Технически идея виртуального та возмещения средств), то процесс шиваемую эмитентом (например, но-
номера карты может быть реализо- на этом завершается. В случае при- мер паспорта, девичью фамилию ма-
вана следующим образом. Клиент менения технологии Dual Message тери и т. п.). В ответ в случае положи-
для оплаты электронных покупок с System (процедуры авторизации и тельного результата аутентификации
88
BUGTRAQ
Уязвимость в для этой уязвимости через веб-браузер и Outlook. Злона-
Linux 2.2.xx /proc/<pid>/mem mmap() меренный сайт мог содержать IFRAME NetBIOS-ресурса,
Локальная системная уязвимость аварийного отказа который содержит злонамеренный MP3-файл. Точно так-
присутствует в Linux ядре 2.2.x. Система, вероятно, за- же можно послать HTML-электронное сообщение, кото-
виснет и потребуется ручная перезагрузка. рое содержит ссылку на NetBIOS-ресурс. Успех такого на-
Интерфейс /proc/pid/mem предназначен, чтобы разре- падения зависит от параметров настройки Outlook. Напа-
шить одному приложению при некоторых условиях обра- дение через злонамеренный веб-сайт не зависит от пара-
титься к памяти другого приложения. Эта особенность метров настройки защиты Internet Explorer.
очень полезна для разработчиков или администраторов, Уязвимость обнаружена в Windows Explorer для
которые желают отладить или анализировать программы, Windows XP.
выполняющиеся на их системе. Один из способов обра-
титься к памяти непосредственно – использовать mmap().
Уязвимость обнаружена в способе, которым этот про- Переполнение буфера
цесс подтверждает правильность. Уязвимость позволяет в Hyperion FTP Server
пользователю, используя интерфейс mmap(), обратиться Hyperion FTP Server (http://www.mollensoft.com/ ) – FTP-
к страницам памяти, которые нечитаемы прослеживае- server для Windows-систем. Уязвимость, обнаруженная в
мым процессом. Пользователь может передать параметр Hyperion Ftp Server (version 2.8.11), позволяет удаленно-
PROT_READ для этого запроса, чтобы запросить доступ му пользователю выполнять произвольный код. Перепол-
для чтения к этому отображению. Из-за недостаточной нение происходит при передаче длинного параметра (бо-
проверки правильности он получит такой доступ. Это при- лее 300 байт) к команде Dir:
ведет к краху системы.
ftpservx.dll
who does not support dir+(buffer=300 byte)
Access violation - code c0000005 (first chance)
Подробности переполнения eax=0012bcbc ebx=0012c574 ecx=42424242 edx=7846f5b5
буфера в Windows XP esi=0012bce4 edi=00147ffd
eip=42424242 esp=0012bc24 ebp=0012bc44 iopl=0 nv up
Переполнение буфера существует в Explorer при ав- ei pl zr na po nc
томатическом считывании атрибутов MP3- или WMA-фай- cs=001b ss=0023 ds=0023 es=0023 fs=003b
gs=0000 efl=00000246
лов в Windows XP. Нападающий может создать злонаме- 42424242 ?? ???
ренный MP3- или WMA-файл в папке в системе Windows
XP, который может использоваться для удаленного вы- Уязвимость обнаружена в Hyperion FTP Server 2.8.11.
полнения произвольного кода при просмотре такой папки
в Windows XP. При этом MP3-файл не должен быть запу-
щен, он просто должен быть сохранен в папке, которая Переполнение буфера в
будет просмотрена, типа папки загрузки MP3, рабочего Common Unix Printing System
стола или NetBIOS-ресурса. Cups (Common Unix Printing System) – свободно дос-
Пользователь Windows XP, посещающий сайт с помо- тупный пакет для управления принтером от Cups Project
щью Internet Explorer, может быть дистанционно скомпро- для Unix- и Linux-платформ.
метирован без какого-либо предупреждения или загруз- Обнаруженная в CUPS уязвимость позволяет удален-
ки файлов, независимо от параметров настройки защи- ному атакующему выполнять произвольный код на уязви-
ты Internet Explorer. мой системе. Нападающий может эксплуатировать эту
В отличие от Windows 2000, Windows XP поддержива- уязвимость, соединяясь с уязвимой системой и переда-
ет чтение и анализ атрибутов MP3- и WMA-файлов. Если вая уродливые HTTP-заголовки с отрицательным значе-
пользователь подсвечивает MP3- или WMA-файл курсо- нием для некоторых полей. Когда cupsd получит этот зап-
ром, будут отображены соответствующие подробности рос, его работа аварийно завершится. Пример:
файла. Explorer автоматически читает атрибуты файла,
независимо от того, действительно ли пользователь под- $ nc -v localhost 631
свечивает или открывает файл. Переполнение произой- localhost [127.0.0.1] 631 (?) open
дет, если некорректные атрибуты существуют внутри MP3- POST /printers HTTP/1.1
Host: localhost
или WMA-файла. Authorization: Basic AAA
Пользователь просто должен просмотреть папку (ло- Content-Length: -1
кальный или сетевой ресурс), который содержит злонаме- $ nc -v localhost 631
ренный файл. Например, пользователь может загрузить localhost [127.0.0.1] 631 (?) open
POST /printers HTTP/1.1
MP3-файл, используя популярные пиринговые программы, Host: localhost
и затем открыть их MP3-папку (чтобы прослушать загру- Authorization: Basic AAA
Transfer-Encoding: chunked
женный MP3-файл). После открытия папки Explorer выпол-
нил бы код, содержащийся внутри атрибутов файла. - - - - -FFFFFFFE
Пользователи Windows 2000 неуязвимы при просмот-
ре таких MP3-файлов с испорченными атрибутами. Уязвимость обнаружена в Easy Software Products CUPS
Два дополнительных вектора нападения существуют 1.0.4-1.1.17 Apple MacOS X 10.2-10.2.2.
ЭТИКА СИСАДМИНА
АНДРЕЙ ГУСЕЛЕТОВ
90
IMHO
Не так уж и давно, а именно – 26 июля администраторы – имели некий ко- тысячи, а, боюсь, гораздо больше...
2002 года, я отмечал свой професси- декс чести. Чтобы не оступиться. Да- Вот ведь какая штука получает-
ональный праздник – «День систем- вайте его создадим? ся – недостаточно иметь отличные
ного администратора»1, что, впрочем, Действительно, задумайтесь: в технические познания, для того
наверняка делали и вы: какой же рус- типичной небольшой организации чтобы быть хорошим сис-
ский не любит быстрой езды и празд- (около 60-90 компьютеров) систем- темным администратором,
ников? Знал я об этом заранее и, как ный администратор зачастую имеет надо еще и уважать людей не
на многие праздники, проснулся ут- практически неограниченные права. только за их познания о компью-
ром раненько с чувством легкой эй- Я специально не буду рассматривать терах. Нет, я не призываю вас бро-
фории и в предвкушении чего-то нео- ситуацию с раздельным админист- саться целоваться с любителем ваз
быкновенного. Ну ничего необыкно- рированием (когда, например, один эпохи Минь или акварельных рисун-
венного в этот день не случилось, занимается только правами на ди- ков на рисовой бумаге. Совсем нет.
правда, один мой друг с Мальты при- ректории, второй – пользовательс- (Каким бы это не показалось смеш-
слал мне ссылочку на сайт2, посвя- кими бюджетами, а за дисковые кво- ным и надуманным, но вот как раз
щенный Дню системного администра- ты отвечает третий человек). Да, та- последнее – японские акварели на
тора. И вот, читая его содержимое, я кие системы и идеологии существу- рисовой бумаге – я просто обожаю.)
и задумался: «А что собственно ле- ют. Но где они реально работают? Но и подходить к людям с мерилом
жит в моральной основе моих дей- Вернемся к нашей преуспевающей по их познанию NTFS или sendmail
ствий, в моей профессиональной эти- фирме: эта гипотетическая органи- тоже нельзя.
ке?». Собственно, фраза, которая зация развивалась очень быстро, за Допустим, с одной вещью я разоб-
меня толкнула на эти размышления, 3-4 года штат компьютеров увели- рался, поднимаю своего Константи-
звучит в оригинале так: «System чился с 3 до 50, и, соответственно, на (еще помните? паренёк-админис-
Administrator Appreciation Day – a первоначально работавший там про- тратор в небольшой, но весьма пре-
special day, once a year, to acknowledge граммистом человек, паренек лет успевающей российской фирме) на
the worthiness and appreciation of the 20-24 (уж очень в нашей стране лю- ступенечку выше – теперь он уважа-
person occupying the role, especially as бят экономить деньги, нанимая сту- ет бухгалтера Степан Васильевича,
it is often this person who really keeps дентов) теперь фактически работа- как оказалось, у того дома живут
the wheels of your company turning». ет системным администратором. четыре канарейки, и он столько все-
«День, посвященный системному ад- Пусть его зовут Костя. Да, он где-то го может о них рассказать – просто
министратору, – особый день в году, подучился, уже умеет достаточно заслушаешься! И приходит к Кон-
в который вы можете выразить, на- прилично ставить Windows 2000 стантину девушка-диспетчер:
сколько вы цените и признательны че- Advanced Server, кое-что знает о – Костя, вот у меня тут отчет не
ловеку, занимающему это место [си- Linux и коммуникациях, зачастую он читается, ты не мог бы посмотреть,
стемного администратора], так как ча- же параллельно занимается и офис- может у меня что-то с дисководом ?
сто это тот, кто действительно помо- ной АТС. Вот, казалось бы, а что еще – Угм, – тихо буркнул себе под нос
гает крутиться «колесам» вашей ком- надо? А как он разговаривает с Костя, даже не повернувшись на го-
пании»). Вот и поехали, я буду поти- пользователями, что он о них дума- лос, хотя в этот момент просто откры-
хоньку это раскручивать. ет? Случай из практики. вал описание очередной утилиты для
Скажем честно: было у вас когда- Технически подкованный моло- автоматического пинга нескольких
нибудь желание «зарезать» особо дой человек, с высшим образовани- серверов одновременно. Естествен-
противному пользователю квоту или ем, назовем его Алексеем, в разго- но никуда он сразу не побежал...
доступ в Интернет, не потому что он воре с начальником отдела, отзыва- А представляете, как будет себя
нарушил какие-то правила фирмы, а ясь о своих пользователя говорит: вести такой человек, когда ему что-
потому что насолил вам лично? Пси- «...да нет, я им всё быстро сделал. то нужно сделать на компьютере, на
хологи, когда ставят такой вопрос в Всего-то и надо было – форматнуть котором у же работает какой-то
тест, обычно подразумевают шкалу дискету», и вывод, заметьте – «ла- пользователь – молча подходит,
невалидности – т.е. честный ответ мерьё». Уж извините меня за жар- двигает человека, что-то делает и
должен быть утвердительным, «да, гон. Человек Алексей достаточно удовлетворенный уходит – всё мол-
хотелось, но ?». А что но? Чем я не нормальный, в повседневном обще- ча! Ага, вот вам и второй пункт:
царь и не бог. «Рраз – и готово». К нии достаточно приятный, ну а вот Хороший системный администра-
сожалению, не раз слышал от такое пренебрежительное отноше- тор должен быть челове-
пользователей предположения о том, ние к людям, которые о компьюте- ком коммуникабельным и
что так и происходит. «Вот, у меня с рах знают меньше его – проскаки- желательно дружелюбным. Пусть
N-ского сайта еле качается, это ты вало не один раз. Как вы думаете – я прихожу на работу, а у меня дома
мне урезал, я знаю!». Отвечаю вам, такой человек, при хорошем, я имею болеет ребенок, пусть на улице сля-
читатели; нет, никогда за уже без в виду, при действительно хорошем коть и мерзость, но вспоминаю –
малого 5 лет на этом рабочем месте руководителе – далеко по служеб- семьдесят пользователей, и боль-
я такого не делал и не собираюсь. Я ной лестнице пойдет? Вряд ли. А шая часть из них надеется именно
бы хотел, чтобы все мы – системные таких людей – даже не сотни, и не на меня, я просто не имею никакого
92
FAQ Python
ВОПРОС: ВОПРОС:
Можно ли на Python создавать программы с графичес- Есть ли в Python аналог следующего оператора Perl:
ким интерфейсом?
S =~ s/(text)/f($1)/ge;
ОТВЕТ: ОТВЕТ:
Да. Даже в стандартной поставке Python есть пакет В языке Python регулярные выражения записываются
Tkinter – многоплатформенные средства для графичес- так же, как и в Perl, но операции по поиску, сопоставле-
кого интерфейса на основе Tcl/Tk. Помимо этого, для нию, заменам и т. п. производятся с помощью функций
Python можно найти привязки к более чем десятку других модуля re. Следующий код Python соответствует приве-
GUI-библиотек. Наиболее продвинутым средством счита- денному выше выражению:
ется wxPython. Python для Java (Jython) может использо- import re S = re.sub(«(text)», lambda m: f(m.group(1)), S)
вать стандартные для Java библиотеки (AWT, Swing).
То есть в качестве второго аргумента функции re.sub()
может выступать функция, которой в качестве аргумента
ВОПРОС: передается объект с очередным успешно найденным
Можно ли на Python написать простенький HTTP-сервер? фрагментом строки.
Более развернутый вариант:
ОТВЕТ:
import re def subf(m): return f(m.group(1))
Да. Более того, в стандартной поставке Python есть S = re.sub(«(text)», subf, S)
несколько готовых примеров: BaseHTTPServer.py,
CGIHTTPServer.py и т. п. Составил Роман Сузи
Оформляйте
подписку
на журнал
через агентство
«Роспечать»
Подписные
индексы:
для частных лиц
81655
для организаций и
предприятий
81656
Рады видеть
Вас нашими
читателями!
94
Во втором, улучшенном и В книге обсуждаются
обновленном издании кни- вопросы профессиональ-
ги, посвященной новой тех- ной разработки приложе-
нологии информационной ний в Borland Delphi 7 и
безопасности – обнаруже- особое внимание уделя-
нию атак, систематизируют- ется практике програм-
ся разрозненные данные о мирования.
приемах совершения атак, Представлено де-
исследуются различные тальное описание объек-
критерии атак и признаки тной концепции, стан-
их обнаружения, источники дартных и программных
информации об атаках и технологий, используе-
методы их анализа. Приве- мых при работе програм-
дена подробная классифи- мистов.
кация систем обнаружения Значительная часть
атак с примерами конкрет- материала посвящена
ных отечественных и зарубежных решений. Рассматривают- разработке приложений, базирующихся на широко ис-
ся критерии выбора систем обнаружения атак для различных пользуемых и перспективных технологиях доступа к
групп потребителей, имеющих разные приоритеты при пост- данным: ADO, dbExpress, InterBase Express.
роении инфраструктуры обнаружения атак. Большое внима- Распределенным многозвенным приложениям и тех-
ние уделено практике эксплуатации систем обнаружения атак, нологии DataSnap также отведено достойное место. Все
включая вопросы их установки и размещения. Впервые све- рассматриваемые в этой книге темы сопровождаются
дены воедино и описаны недостатки существующих средств подробными примерами, которые помогут быстро ос-
обнаружения атак и способы их преодоления. воить данный этот язык программирования.
ISBN 5-94157-246-8, 608 стр ISBN 5-94157-116-Х 784 стр.
2
СИСТЕМНЫЙ АДМИНИСТРАТОР
№ 2(3), Февраль, 2003 год
ЧИТАЙТЕ
ЧИТАЙТЕ
РЕДАКЦИЯ
Исполнительный директор
Владимир Положевец
В СЛЕДУЮЩЕМ
В СЛЕДУЮЩЕМ
Главный редактор
Александр Михалев
НОМЕРЕ:
НОМЕРЕ:
chief@samag.ru
Ответственный секретарь
Наталья Хвостова
sekretar@samag.ru Перехват системных Некоторые
Технический редактор вызовов в ОС Linux недокументированные
Владимир Лукин За последние годы операционная си- функции Java
Художник стема Linux прочно заняла лидирую- Изучение недокументированных фун-
Игорь Усков щее положение в качестве серверной кций в применении к языку Java мо-
igus@samag.ru платформы, опережая многие ком- жет показаться несколько странным.
мерческие разработки. Тем не менее Java – грамотный, современный, вы-
РЕКЛАМНАЯ СЛУЖБА вопросы защиты информационных соконадежный объектно-ориентиро-
тел.:(095)928-8253 (доб. 112) систем, построенных на базе этой ОС, ванный язык программирования с об-
факс:(095)928-8253 не перестают быть актуальными. ширнейшими библиотеками готовых
Константин Меделян Обеспечение безопасности системы классов.
reklama@samag.ru требует выполнения целого комплек- Неужели в среде Java существу-
са мероприятий. Предлагаем вам рас- ют задачи, которые не решаются с по-
Верстка смотреть механизм защиты, основан- мощью стандартных библиотек, и для
imposer@samag.ru ный на перехвате системных вызовов решения которых имеет смысл прибе-
maker_up@samag.ru операционной системы Linux. Данный гать к недокументированным функци-
механизм позволяет взять под конт- ям? И что вообще такое «недокумен-
103012, г. Москва, роль работу любого приложения и тем тированная функция» в рамках Java?
Ветошный переулок, дом 13/15 самым предотвратить возможные де-
тел.: (095) 928-8253 (доб. 112) структивные действия, которые оно Можно ли защитить
факс: (095) 928-8253 может выполнить. веб-страницы от анализа
Е-mail: info@samag.ru исходного кода?
Internet: www.samag.ru TACACS Можно ли как-то помешать програм-
Это протокол аутентификации кисок мисту-профессионалу, располагаю-
РУКОВОДИТЕЛЬ ПРОЕКТА на сервере. Я опишу основные прин- щему сколь угодно богатым арсена-
Петр Положевец ципы настройки сервера и клиента лом специализированных программ –
УЧРЕДИТЕЛИ (киски) TACACS+ (плюс указывает отладчиком, собственной версией
Владимир Положевец на версию протокола, которая ис- браузера с исходными текстами, вир-
Александр Михалев пользуется в настоящее время). туальной машиной и любыми други-
ИЗДАТЕЛЬ TACACS имеет очень широкое при- ми средствами – проанализировать
ЗАО «Издательский дом менение, так как может обеспечи- исходный HTML-код веб-страницы
«Учительская газета» вать работу всех кисок с единым или, по крайней мере, клиентский
сервером авторизации, который так- JavaScript?
Отпечатано типографией же позволяет настраивать привиле- Если это и возможно, то так же
ООО «Мастер Печати» гии различных пользователей в ши- трудно, как реализация схемы защи-
Тираж 5000 экз. роких пределах, например: давать ты, описанной в этой статье.
определённым пользователям дос-
Журнал зарегистрирован туп только к определённым коман- Установка FreeBSD
в Министерстве РФ по делам печати, дам, давать определённым лицам Если бы у меня спросили, какую опе-
телерадиовещания и средств мас- пользоваться определёнными сер- рационную систему я бы установил в
совых коммуникаций (свидетельство висами только с заданных адресов, качестве сервера из Windows, Linux и
ПИ № 77-12542 от 24 апреля 2002г.) организовывать группы пользовате- различных вариантов BSD, я бы не
лей, вести лог-файл доступа пользо- задумываясь ответил: FreeBSD. Поче-
За содержание статьи ответственность вателей (это особенно важно для му? Стабильность серверов под уп-
несет автор. За содержание рекламно- маршрутизаторов, так как позволя- равлением этой системы уже давно ни
го обьявления ответственность несет ет определить, кто и сколько пользо- у кого не вызывает сомнений. Чтобы
рекламодатель. Все права на опубли- вался определёнными сетевыми работать в системе, необходимо пер-
кованные материалы защищены. Ре- службами: ppp, slip и т. д.), выпол- воначально ее установить. Описани-
дакция оставляет за собой право изме- нять для пользователей определён- ем чего, собственно говоря, и займем-
нять содержание следующих номеров. ные команды ОС. ся в этой статье.
96