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

№12(25) декабрь 2004

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


www.samag.ru

Единая учетная запись для Windows


и UNIX в Active Directory
Копирование файлов
в автоматическом режиме
с множества компьютеров через SSH
Защита сетевых сервисов
с помощью stunnel
Использование аппаратных ключей
в целях аутентификации в Linux
Система обнаружения атак SHADOW
Биллинг для АТС на базе PostgreSQL
Обработка переадресованных
http-запросов
№12(25) декабрь 2004

Автоматизация FTP с помощью Python


оглавление

РЕПОРТАЖ 2 БЕЗОПАСНОСТЬ
АДМИНИСТРИРОВАНИЕ Защита сетевых сервисов
с помощью stunnel
Linspire одним глазком
Андрей Бешков
Валентин Синицын tigrisha@sysadmins.ru 42
val@linuxcenter.ru 4
Железный login:
Идеальный карманный компьютер ломаем зубы грубой силе
для системного администратора
Часть 2 Александр Похабов
chiko@agk.ru 48
Андрей Маркелов
andrew@markelov.net 8 Тени исчезают в полдень
Дистрибутив для всех Сергей Яремчук
grinder@ua.fm 54
Сергей Яремчук
grinder@ua.fm 10 WEB
Копирование файлов PHP-GTK
в автоматическом режиме
с множества компьютеров через SSH Андрей Уваров
dashin@ua.fm 60
Рашид Ачилов
shelton@granch.ru 12 Обработка переадресованных
http-запросов
Единая учетная запись
для Windows и UNIX Алексей Мичурин
в Active Directory alexey@office-a.mtu-net.ru 62
Игорь Полянский HARDWARE
ipoliansky@mail.ru 18
Запись дисков CD-R/RW в Linux
FreeBSD tips: настройка VLAN Часть 2
Сергей Супрунов
amsand@rambler.ru 24 Владимир Мешков
ubob@mail.ru 68
Биллинг для АТС на базе PostgreSQL
ОБРАЗОВАНИЕ
Георгий Толоконников
info@samag.ru 26 Файловая система NTFS извне и изнутри
Часть 2
Пакетный фильтр OpenBSD
Часть 2 Крис Касперски
kk@sendmail.ru 76
Денис Назаров
pheonix@sysattack.com 30 Разработка сценария регистрации
пользователей в сети
Настоящий UNIX в наши дни Часть 2
Александр Байрак Иван Коробко
x01mer@pisem.net 34 ikorobko@prosv.ru 82
Автоматизируем FTP с помощью Python Содержание журнала за 2004 год 92
Сергей Супрунов
amsand@rambler.ru 36 BUGTRAQ 33, 53, 91, 94

№12(25), декабрь 2004 1


репортаж

AGNITUM OUTPOST OFFICE FIREWALL


НОВЫЙ АСПЕКТ КОРПОРАТИВНОЙ ЗАЩИТЫ
3 декабря 2004 года компания Agnitum (www.agnitum.com) – Клиентская часть после установки взаимодействует с
разработчик популярного персонального брандмауэра сервером и нацелена на работу в корпоративной сети. В
Outpost Firewall Pro анонсировала выход новой версии свое- частности, контроль компонентов приложений (Component
го продукта – Outpost Office Firewall, нацеленного на исполь- Control) и контроль скрытых процессов (Hidden Process
зование в корпоративных локальных сетях в качестве сред- Control) будут выключены по умолчанию, а брандмауэр бу-
ства персональной защиты клиентских компьютеров. Новая дет загружаться в фоновом режиме. Это обеспечит мини-
разработка явилась продолжением работы над очередной мальное вовлечение пользователя в процесс защиты ком-
версией брандмауэра – Outpost Firewall Pro 2.5. Стоит отме- пьютера – многочисленные запросы сетевого доступа при-
тить, что речь идет не о серверном варианте Outpost Firewall, ложениями могли бы ввести неопытного пользователя в
а именно об офисной версии, то есть специализированном замешательство. К сожалению, клиентская часть Outpost
ПО, предназначенном для массового развертывания в кор- Office Firewall несовместима с предыдущими версиями про-
поративной сети, на компьютерах пользователей. граммы. Если на некоторых компьютерах уже установлена
Презентация проходила в Санкт-Петербурге, на борту одна из предыдущих версий, включая Outpost Firewall 2.5,
легендарного крейсера «Аврора», что само по себе явилось ее необходимо полностью удалить перед установкой офис-
удивительным сюрпризом. Главный менеджер по продажам ного варианта. Новых серьезных изменений по сравнению
Николай Васильев и координатор российского проекта, с версией 2.5 в клиентской части практически не будет. Фун-
организатор презентации Ольга Величко (на фото) расска- кциональность нового продукта будет постоянно улучшать-
зали, что они давно хотели провести презентацию на этом ся, а переговоры с создателями антивирусных продуктов о
историческом крейсере под лозунгом «Революция в мире реализации совместных решений помогут привести к со-
информационных технологий». зданию надежной комплексной защиты. Например, реали-
В назначенное время у трапа крейсера собрались жур- зовать защиту от программ типа Ad-Aware, количество ко-
налисты практически всех популярных IT-изданий России. торых в последнее время угрожающе растет.
На борту представителей прессы встречали В.И. Ленин и Средством управления и мониторинга будет служить
военные матросы, вручая каждому морскую бескозырку с Outpost Command Center, выполненный в виде оснастки «Кон-
ленточкой, на которой было написано «Outpost Firewall Pro». соли управления» (MMC snap-in), через который осуществ-
Расскажем о впечатлениях от анонса и о заявленных ляется управление службами, запуск редактора настроек и
возможностях нового продукта. публикация конфигураций для клиентских машин. Одновре-
В качестве клиентской части Outpost Office Firewall бу- менно с ним устанавливается редактор настроек, предназ-
дет содержать некоторое подобие Outpost Firewall Pro 2.5. наченный для конфигурирования брандмауэра на клиентс-
Дистрибутив брандмауэра поставляется в формате MSI, что ких машинах, а также «Служба обновлений» и «Служба пуб-
позволяет для развертывания его в домене Active Directory ликации».
использовать групповые политики. К сожалению, в пилот- Конфигурации клиентам передает «Служба публика-
ной версии другие возможности удаленной установки под- ции». Она запускается на том же сервере, где и «Команд-
держиваться пока не будут. Таким образом, автоматичес- ный центр» Outpost, и также управляется с его помощью.
кое развертывание Outpost Firewall будет возможно только При каждой загрузке компьютер пользователя запрашива-
в доменах Active Directory и только на компьютерах с ет у сервера конфигурацию. Если были созданы и опубли-
Windows 2000 и старше. В остальных случаях установку кованы новые настройки, то «Служба публикации» пере-
придется произвести вручную. Возможность удаленной ус- дает клиенту файл по внутреннему протоколу. После полу-
тановки при помощи RPC, а не через групповые политики чения настроек брандмауэр на компьютере пользователя
планируется реализовать в следующих версиях. применяет их. Период запроса клиентами обновлений кон-
фигурации – изменяемый параметр. Однако форсировать
немедленное обновление на клиентах пока нельзя. Возмож-
но, это появится в следующих версиях.
В первой версии Outpost Office Firewall не предвидится
возможности назначения разных конфигураций различным
группам клиентов, а также не планируется разрешать ре-
дактирование отдельных записей в конфигурации без зат-
рагивания остальных параметров.
По словам представителей компании выпуск коммер-
ческой версии продукта ожидается примерно в феврале
2005 года.
Роман Марков
Фото автора

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

LINSPIRE ОДНИМ ГЛАЗКОМ

ВАЛЕНТИН СИНИЦИН
Фирма Linspire (www.linspire.com) – ветеран движения за по- ставщиков закрытого ПО) канал доставки, компания выз-
пуляризацию Linux, хотя самой торговой марке едва насчи- вала сильное удивление у коллег по цеху, а г-н Робертсон в
тывается пять месяцев. Между тем компания была основа- очередной раз подтвердил звание большого затейника.
на в далеком 2001 году. С тех пор и по сей день ее бес- Подробности доступны по адресу: http://info.linspire.com/p2p/
сменным управляющим является всемирно известный аван- p2p-pr.html. Иногда (правда, в последнее время все реже и
тюрист-инноватор Майкл Робертсон (Michael Robertson), со- реже) Linspire проводит промо-акции, в ходе которых тре-
здатель портала MP3.com. Первоначально компания назы- буется угадать текст купона (как правило, это нечто оче-
валась Lindows, а ее основное детище и герой сегодняш- видное для тех, кто внимательно следит за заголовками
ней статьи, настольный дистрибутив Linux, – LindowsOS. новостных лент), ввести его и получить стопроцентную скид-
Такое явное созвучие с «Окнами» не могло понравиться ку в интернет-магазине компании. После этого ISO-образ
корпорации Microsoft и очень быстро стало предметом мно- дистрибутива можно загрузить бесплатно через HTTP или
гочисленных судебных разбирательств как на территории все тот же BitTorrent.
США, так и за их пределами. Тяжба не утихала в течение В данном обзоре мы рассмотрим основные возможнос-
нескольких лет, причем фортуна практически равным об- ти Linspire 4.5.189 Developers Edition, датированной янва-
разом благоволила как той, так и другой стороне. Вконец рем 2004 года. С тех пор было выпущено несколько исправ-
погрязнув в пучине судебных баталий, Lindows, Inc. и лений (об их роли в этой истории мы поговорим чуть поз-
Microsoft в июле этого года пришли к мировому соглаше- же), однако базовая функциональность системы не претер-
нию, по которому все права на торговую марку «Lindows» и пела существенных изменений.
соответствующие доменные имена отошли в «Редмонд»,
правда, не безвозмездно. Размер контрибуции составил Делай раз: установка
около 20 млн. долларов. Вполне удовлетворенная исходом Итак, вставляем компакт-диск с Linspire в оптический при-
дела, Lindows сменила имя на Linspire и с большой выго- вод и перезапускаем компьютер. Нашему взору представ-
дой продала свою прежнюю вывеску на аукционе eBay. ляется графический splash-экран с логотипом компании и
На сегодняшний день компания представляет широкий меню с двумя загрузочными опциями: Install и Diagnostic. Пос-
модельный ряд, включающий базовую редакцию Linspire ледний вариант может использоваться для тонкой (эксперт-
4.5, профессиональную Linspire 4.5 Developers Edition, заг- ной) настройки параметров или восстановления системы.
ружаемый диск LinspireLive! и специальную версию Выбрав его и подождав достаточное время, можно попасть
LinspireEspaсol для испаноязычных пользователей. Поми- в текстовую консоль и, например, переразбить жесткий диск,
мо этого имеются различные дополнения, например, пользуясь командой fdisk или же реанимировать файловую
LinspireOffice. Ранее существовала еще одна разновид- систему с помощью fsck. Из важных утилит в этом режиме
ность – Laptop Edition, предназначенная для ноутбуков, но не доступен, пожалуй, один hdparam (читатели, у которых
сейчас она, по-видимому, слилась с базовой версией. хотя бы раз «взрывался» хорошо раскрученный CD-ROM,
Как и многие настольные дистрибутивы, Linspire явля- меня поймут). Впрочем, развитие промышленности идет се-
ется коммерческим программным продуктом. Цена базо- мимильными шагами и несбалансированные/некачествен-
вой редакции – 49,95 доллара. Версия для разработчиков ные диски сейчас встречаются все реже и реже.
стоит чуть дороже – $59,95. LinspireLive! можно приобрести Сделав все необходимое, можно начать установку
за $19,95 или (официально!) загрузить через файлообмен- Linspire командой startx или же выйти из диагностического
ную сеть BitTorrent. Выбрав столь оригинальный (для по- режима, набрав exit.

4
администрирование
ентированные на ту же целевую аудиторию, стали продви-
гать совместимость с WiFi лишь к концу 2004 года (моя вер-
сия Linspire, напомню, была выпущена в январе). Возмож-
но, эти ошибки уже исправлены, однако достоверных све-
дений на сей счет у меня нет.
В процессе установки программа сама отформатирует
предназначенный системе раздел. В качестве файловой си-
стемы по умолчанию (впрочем, этот термин здесь не впол-
не уместен, ведь ничего другого выбрать не предложили)
используется ReiserFS, что неудивительно – Linspire спон-
сирует ее разработчиков, о чем красноречиво свидетель-
ствует лейбл на сайте Namesys (www.namesys.com). Эта
компания вообще поддерживает или принимает участие в
достаточно большом числе открытых проектов, в том чис-
ле KDE (www.kde.org) и Mozilla (www.mozilla.org), и даже с
Ðèñóíîê 1. Êëèåíò Click-N-Run некоторых пор имеет собственную Open Source инициати-
Программа-инсталлятор, напротив, является воплоще- ву – Nvu (www.nvu.com), задача которой ни много ни мало –
нием простоты. Достаточно упомянуть, что она состоит мак- создать свободный аналог Macromedia DreamWeaver и
симум из четырех экранов. Вначале пользователю предла- Microsoft Frontpage. В качестве основы используется редак-
гается выбрать один из двух режимов: Take Over An Entire тор Mozilla Composer. Проект делает определенные успе-
Hard Disk («Занять жесткий диск целиком» – режим по умол- хи: по крайней мере все новые страницы на сайте Linspire
чанию, хорошо подходит для установки на чистый нераз- разработаны с помощью Nvu.
меченный диск и не требует вмешательства пользователя) Завершив (ура!) копирование файлов, инсталлятор вы-
или Advanced Install. «Продвинутость» в данном случае оз- даст соответствующее сообщение и предложит перезагру-
начает возможность указать существующий раздел для ин- зить систему. Добро пожаловать в мир настольного Linux!
сталляции корневой файловой системы. Изменить их струк-
туру программа не позволяет, вероятно, для того, чтобы нео- Делай два: первый запуск
пытный пользователь нечаянно не уничтожил данные на со- и постинсталляционная настройка
седнем Windows-разделе. После осуществления выбора мы После неизбежного перезапуска мы видим уже знакомую
переходим на третий экран, где предлагается ввести имя заставку и меню, на этот раз содержащее три опции. Две
для нашего компьютера и пароль. Последняя настройка яв- из них нам хорошо известны и предназначены для нормаль-
ляется необязательной, что очень понравится пользовате- ного старта системы и перехода в экспертный режим. Сред-
лям Windows 9x и приведет в ужас бывалых администрато- няя, «Redetect», используется для обнаружения нового обо-
ров. Программа не проверяет введенные пароли на проч- рудования. Дождавшись загрузки системы (наберитесь тер-
ность: хотите «123456» – пожалуйста. После заполнения пения – как и многие настольные дистрибутивы, Linspire не
данных полей ваше участие в процессе заканчивается и слишком легок на подъем. Это неизбежная плата за отсут-
система приступает к копированию файлов. Вполне оправ- ствие тонкой настройки) и введя пароль (если таковой име-
дывающий себя подход, по крайней мере до тех пор, пока ется), мы окажемся в окне мастера первого запуска, кото-
не возникнет внештатная ситуация. рый предложит нам ознакомиться с лицензией и установить
Сообщения инсталлятора об ошибках малоинформатив- ряд параметров. Беглый взгляд на соглашение конечного
ны и обычно состоят из числового кода, краткого описания пользователя (EULA) обнаруживает занятную вещь – лицен-
(например: «200: rsync failed» или «255 Unspecified Error») и зия Linspire является Family Friendly. Говоря русским язы-
предложения обратиться в службу технической поддерж- ком, одну копию системы можно легально установить на
ки, которая, как следует из периодически появляющейся в неограниченное число компьютеров, владельцы которых со-
ходе установки рекламной картинки, доступна через Web и ставляют одну семью. Не вдаваясь в юридические тонко-
по телефону, правда, не круглосуточно. Опыт показывает, сти, отметим явное преимущество такого договора как для
что специалисты откликаются достаточно быстро, однако нас с вами, так и для производителя: если отечественный
на вопрос о причинах неудачи разводят руками: мол ошиб- пользователь худо-бедно свыкся с мыслью о том, что про-
ка, знаем, работаем. Возможно, build 189 был в этом отно- граммы имеют лицензию, которую надо соблюдать, то пла-
шении не слишком успешным (как уже упоминалось ранее, тить за себя, за маму и за папу он точно не станет. Нажав
с тех пор вышло несколько исправлений, и текущий релиз на расположенную в окне кнопку «Advanced», можно доба-
имеет номер 444), но мне с трудом удалось найти компью- вить новые учетные записи (по умолчанию вы заходите в
тер, на который Linspire поставился без сучка и задоринки. систему как root) или настроить экранное разрешение, глу-
Особенно обидно, что в число «неприкасаемых» попал и бину цвета и частоту развертки (в состав Linspire входят
мой ноутбук, с помощью которого предполагалось прове- фирменные драйверы ATI и Nvidia, поэтому приготовьтесь
рить на практике, насколько хорошо система поддержива- к высокому refresh rate). Программа также предложит вам
ет работу с беспроводными сетями. Эта возможность ши- настроить системное время. Выполнив все необходимые
роко рекламируется в руководстве пользователя, что вну- операции, можете спокойно выходить из мастера. Вас ждет
шает некоторое уважение: прочие дистрибутивы Linux, ори- сюрприз: одно из фирменных аудиоруководств Linspire! В

№12(25), декабрь 2004 5


администрирование
ходе интерактивных уроков, выполненных с использовани- грамм, как открытых, так и коммерческих. Для этого потре-
ем технологии Macromedia Flash (конечно, проигрыватель буется доступ в Интернет и несколько щелчков мышью. Кли-
Flash-роликов также включен в комплект поставки), пользо- ент Click-N-Run (рис. 1) автоматически скачает и установит
ватель может получить представление о возможностях си- выбранные вами программы, а также позволит добавить
стемы и приобрести базовые навыки работы с нею. Значи- иконку на рабочий стол или в меню Autostart. Вы можете
тельная часть первого руководства посвящена технологии инсталлировать как отдельные приложения, так и целые на-
CNR («Click-N-Run»), речь о которой пойдет чуть ниже. К боры – «Aisles», созданные разработчиками Linspire или
сожалению, эта красота требует жертв: после нескольких другими пользователями. Членство в CNR платное (4,95
уроков, прослушанных на моем компьютере, диктор стал доллара в месяц или 49,95 год), однако «прикоснуться к
«заикаться», а потом и вовсе умолк. Пришлось лечить сис- прекрасному» можно и даром. Достаточно ввести номер
тему с помощью Quick Restart, по-простому – перезагрузки кредитной карточки, и в течение 15 дней вы можете пре-
X-сервера. кратить подписку, не заплатив ни цента за загруженный
софт. Переведя эти деньги в отечественную валюту, полу-
чим 120-150 рублей в месяц, то есть намного меньше, чем
большая часть жителей нашей страны тратит на сотовый
телефон. Важным ограничивающим фактором является ши-
рина канала: скачать большую часть интересных приложе-
ний по модему практически нереально, а оплата трафика
при использовании выделенной линии может влететь в ко-
пеечку.
Таким образом, целевая аудитория CNR Warehouse у
нас в России, по сути, ограничена пользователями unlimited-
тарифов. Большая часть репозитария CNR бесплатна для
подписчиков, исключения составляют коммерческие при-
ложения, на которые предоставляются ощутимые скидки.
Единожды загрузив как ую-либо программу из CNR
Warehouse, вы становитесь ее собственником навеки и смо-
жете вновь получить к ней доступ, когда потребуется. Су-
Ðèñóíîê 2. Linspire 4.5: ðàáî÷èé ñòîë ïî óìîë÷àíèþ ществование этого банка программ создает определенную
Как и многие современные дистрибутивы, Linspire не- специфику Linspire. В состав системы включен самый ми-
мыслим без Интернета. По утверждению разработчиков, нимум приложений (нет ни офисного пакета, ни графичес-
кабельное подключение система распознает и конфигу- кого редактора, ни проигрывателя видеофильмов). Все ос-
рирует в полуавтоматическом режиме (пользователю мо- тальное предлагается загружать из CNR. Каждый пункт
жет потребоваться ввести IP-адрес и т. п.). Для «счастли- меню «Launch» (аналог кнопки «Пуск» Windows) включает
вых» владельцев модемов на рабочий стол вынесена спе- обязательную ссылку на Warehouse, поэтому логотип дан-
циальная пиктограмма – Internet Connection Tools. Созда- ной технологии – бегущий человек в зеленом круге – вы
тели Linspire позаботились о клиентах крупнейших интер- будете видеть довольно часто.
нет-провайдеров США (AOL, Juno, Earthlink и т. д.) – им Постоянное желание «выклянчить пару баксов» являет-
достаточно просто щелкнуть по иконке с нужным именем. ся несомненным минусом Linspire. Впрочем, выход, как все-
Остальным предлагается настроить KPPP (а именно эта гда, есть. Дистрибутив основан на Debian и содержит необ-
утилита используется для доступа в Интернет) вручную – ходимый для опытного пользователя инструментарий: dpkg
подробное руководство прилагается. Сверх указанных ав- и apt-get, с помощью которого можно устанавливать пакеты
торами мер мне пришлось лишь указать устройство, к ко- в формате deb. Редакция Developers Edition, помимо этого,
торому подсоединен мой модем, в настройках этой заме- включает в себя полный комплект средств разработки (в
чательной утилиты. том числе среду KDevelop), что позволяет собирать пакеты
Теперь, когда вы подключены к Всемирной паутине, на- из исходных текстов. Может быть, это и неэстетично, но по
стало время познакомиться с «жемчужиной» Linspire – CNR крайней мере дешево. Таким образом я скомпилировал «про-
Warehouse. грамму в правом нижнем углу» – системный монитор gkrellm
(http://web.wt.net/~billw/gkrellm/gkrellm.html).
Делай три: Кладовая «Раз – и готово» В меню утилита не появилась, но зато работала как
Не пугайтесь непривычных слов: примерно так переводится часы. Другое дело, захочет ли Пользователь с большой
на русский язык словосочетание «Click-N-Run Warehouse», буквы связываться с инструментами командной строки?
обозначающее технологию, разработанную в Linspire с це- Можно сказать, что CNR Warehouse отражает идеологию
лью упрощения установки нового ПО и обновления систе- Open Source: брать деньги не за ПО, а за услуги, то есть за
мы. Зависимости всегда были бичом Linux, и любой созда- желание клиента не делать чего-то самостоятельно.
тель дистрибутива, претендующий на место в сердцах сред- Однако, несмотря на все многообразие приложений для
нестатистических пользователей, должен позаботиться о Linux, пользователь может захотеть запустить и какую-то
скруглении «острых углов». В настоящий момент с помо- программу для Win32, например, игру. Что же предостав-
щью CNR Warehouse можно установить более 1900 про- ляет Linspire для этой категории граждан? Исходной целью

6
администрирование
разработчиков Lindows была практически стопроцентная и создания HTML-документов используется интернет-пакет
совместимость с Windows-приложениями (отчасти поэтому Mozilla.org. Не так давно компания MozDev Group (http://
ей и было присвоено столь «неудачное» имя). Стремясь до- www.mozdevgroup.com) по заказу создателей дистрибути-
стичь ее, компания не жалела денег на инвестиции, в пер- ва расширила его возможности интегрированным поиском
вую очередь, в проект Wine (http://www.winehq.com). Одна- (по любому слову на странице, в теле письма и т. д.) и про-
ко, спустя некоторое время г-н Робертсон изменил курс. веркой правописания. Функция имеет название Hot Words
Сославшись на дороговизну продуктов для Windows, он (http://info.linspire.com/suite.html) и доступна, как и все в мире
предложил сконцентрировать все усилия на написании их Linspire, через CNR Warehouse. В состав Linspire 4.5 вклю-
полноценных аналогов (чем компания сейчас и занимает- чены также интернет-пейджер GAIM (gaim.sourceforge.net)
ся, достаточно вспомнить тот же Nvu). Было ли это реаль- и IP-телефон SIPphone (www.sipphone.com).
ной причиной или же стопроцентная эмуляция Win32 API Поинтересуйтесь у начинающего линуксоида, что ему
оказалась чересчур трудоемкой задачей, науке доподлин- кажется самым непонятным в этой системе. Уверен, в «го-
но неизвестно, но факт остается фактом: в смысле двоич- рячую десятку» непременно попадет процедура подключе-
ной совместимости с Windows у пользователей Linspire нет ния (mount) разделов, особенно остро встающая для съем-
особых преимуществ перед «простыми смертными». Через ных носителей: дискет, компакт-дисков, USB Flash и т. д.
CNR Warehouse доступны все те же Wine, NeTraverse Здесь Linspire оказался на высоте. Вставленный в USB-
Win4Lin (около 70 долларов с учетом «клубной скидки») и разъем «брелок» система опознала сразу, о чем уведоми-
WineX (приблизительно 15 долларов). Весьма популярный ла меня, разместив пиктограмму «Flash Disk» на рабочем
пакет CrossOver Office, базирующийся на Wine, и входящий столе. Вставленный в привод DVD-ROM оптический диск
в комплект поставки конкурентов Linspire (Lycoris Desktop/ был также легко опознан и смонтирован, а вот с его отклю-
LX и Xandros), в CNR Warehouse отсутствует. чением возникли небольшие проблемы. В случае, если он
Как вы уже, наверное, обратили внимание, названия ин- оказывался занят (в понимании Linux – например, было от-
терфейсных элементов в данной статье приводятся на анг- крыто окно с деревом расположенных на нем каталогов),
лийском языке. Это происходит вовсе не из-за прозапад- система игнорировала нажатие на кнопку Eject на передней
ной ориентации автора – английский является языком панели. Такое поведение родного компьютера может сму-
Linspire по умолчанию, а помимо него, система официаль- тить и испугать новичка. Было бы лучше, если бы Linspire
но поддерживает лишь испанский. В отличие от Linare (см. выдавала диалог с сообщением о невозможности извлече-
статью «Заметки о Linare», журнал «Системный админист- ния диска и списком потенциальных причин (или даже на-
ратор», №11, ноябрь 2004 г.), где поддержка кириллицы званием приложения, использующего CD/DVD-ROM в дан-
выдрана с корнем, научить Linspire хоть как-то говорить по- ный момент).
русски возможно. Для этого потребуется установить стан- Вот и подошел к концу этот небольшой обзор. Что мож-
дартный пакет локализации KDE и шрифты все из того же но сказать в заключение? По-моему, Linspire – это непло-
CNR Warehouse. хой дистрибутив, страдающий излишним интересом к день-
Среди заслуживающих внимания приложений, входящих гам своего владельца и отсутствием полноценной русифи-
в состав «Кладовой», следует назвать авторские разработ- кации, но, несмотря на это, предоставляющий достаточный
ки Linspire: аудиоплейер в стиле «все в одном2 Lsongs (http:/ комфорт для домашнего и офисного применения. Если у
/info.linspire.com/lsongs), аналогичный iTunes и фотоальбом вас есть широкий канал в Интернет – загрузите LinspireLive.
Lphoto (http://info.linspire.com/lphoto), заменяющий iPhoto. Возможно, он вам понравится. Если что-то не получилось,
Обе программы бесплатны для подписчиков CNR и стоят не расстраивайтесь – Linspire не единственный в своем
около 20 долларов для остальных. роде. В январском номере журнала мы рассмотрим Lycoris
Desktop/LX, загадочный дистрибутив от компании, ранее
Делай четыре: приступаем к работе известной как Redmond Linux.
Итак, все подготовительные операции завершены, допол-
нительное ПО установлено, и мы можем наконец-то при-
ступить к тому, ради чего все и затевалось, – работе. Вне-
шний вид Linspire 4.5 представлен на рис. 2. В качестве ра-
бочего стола используется KDE. Содержимое меню
«Launch» (зеленая буква «L» в левом нижнем углу) стара-
тельно повторяет привычное пользователям Windows (кро-
ме тех, кто успел основательно обжиться в XP): те же
Programs, Settings, Search и Run Command. В устоявшийся
порядок вещей добавлен всего один штрих – опция
«Terminate Program» («Снять программу»). При ее выборе
(равно как и при нажатии магической комбинации <Ctrl-Alt-
Del>) на экране появляется дерево запущенных процессов.
Во время своего старта система автоматически загружает
апплет, извещающий пользователя о наличии новых сооб-
щений в почтовом ящике (конверт в правом нижнем углу) –
мелочь, а удобно. Для чтения писем, а также просмотра Web Ðèñóíîê 3. Ïîíàäîáèëñÿ îôèñ? Äîáðî ïîæàëîâàòü â CNR Warehouse!

№12(25), декабрь 2004 7


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

ИДЕАЛЬНЫЙ КАРМАННЫЙ КОМПЬЮТЕР


ДЛЯ СИСТЕМНОГО АДМИНИСТРАТОРА
ЧАСТЬ 2

АНДРЕЙ МАРКЕЛОВ
Обновляем системное программное ! включены версии баузеров Opera 7.25 и NetFront 3.1;
обеспечение КПК ! улучшена поддержка USB-устройств через CF USB Host;
За время, прошедшее с выхода первой части статьи1, ком- ! добавлена поддержка эмуляторов SNES и Scumvm.
пания Sharp успела выпустить преемника рассматриваемой ! поддержка файловых систем ext3 (позволяет создавать
модели карманного компьютера, в основном отличающе- отказоустойчивые ext3 разделы на больших внешних кар-
гося наличием четырехгигабайтного жесткого диска. Однако тах памяти) и squashfs (предоставляет очень хорошую
пока еще эта модель под названием SL-C3000 заговорит степень сжатия данных при невысоком использовании
хотя бы по-английски, а не по-японски, и доберется до на- системных ресурсов), fuse (FileSystem in User Space);
шего рынка, пройдет очень много времени. А пока идеаль- ! обновлены драйвера bluetooth и WiFi (используются
ным КПК для системного администратора как был, так и драйвера HostAp, поддерживаются Wireless Extentions
остается Sharp Zaurus SL-C860. Кстати, с появлением трех- версии 15, WPA);
тысячной модели, цена на восемьсот шестидесятую долж- ! добавлен модуль брандмауэра iptables;
на упасть, что сделает Zaurus более доступными. Продол- ! bash «дорос» до версии 3.0;
жим же наш разговор об этом карманном компьютере, ра- ! в прошивку включен Midnight Commander;
ботающем под управлением ОС Linux. ! включены в прошивку unrar, diff, smbmount и другие кон-
В первой части статьи я уже рассказывал о существую- сольные утилиты, которые иначе пришлось бы доуста-
щем многообразии «прошивок» ROM для Zaurus. Две ос- навливать вручную;
новных из них – это pdaXrom (http://www.pdaxrom.org) и ! созданы новые версии многих консольных утилит (wget,
Cacko ROM (http://cacko.biz/cacko). Первая в качестве гра- fdisk, OpenSSL/OpenSSH);
фической среды использует X11, а вторая, как и родная ! обновлена программа эмулятора терминала;
шарповская – Qtopia. Доставшийся мне «карманник» шел ! добавлена поддержка целого ряда новых bluetooth и WiFi
с довольно устаревшей русифицированной для «МакЦент- CF-карт.
ра» версией Cacko ROM. Поэтому я хочу начать вторую
часть с описания процесса перепрошивки ROM, который Как видите, список изменений весьма внушителен, для
весьма не тривиален. После окончания операции по срав- того чтобы приступить к обновлению прошивки. Нужно ска-
нению с макцентровской версией, помимо исправлений зать, что к этому процессу стоит отнестись со всей ответ-
ошибок, мы должны дополнительно получить огромное чис- ственностью, так как можно легко привести КПК в нерабо-
ло бонусов: тоспособное состояние. Снимки с экрана Zaurus во время
Наиболее заметные изменения: выполнения этого увлекательного процесса вы можете най-
! переделаны все значки и обои; ти по адресу www.markelov.net/z860upd.html, а далее я по-
! значительно обновлена программа kino2 – оболочка для стараюсь подробно описать само действо.
mplayer; Начнем с того, что на всякий случай сохраним копию те-
! включена поддержка NLS для всех языков в ядре; кущей прошивки. Для этого нам необходимо попасть в так
! модернизирована программа переключения клавиатур- называемое «диагностическое меню» карманного компью-
ных раскладок; тера – аналог BIOS настольных ПК. Для того чтобы зайти в

1
Маркелов А. Идеальный карманный компьютер для системного администратора. Часть 1. – Журнал «Системный администратор», №10,
октябрь, 2004 г.

8
администрирование
него, необходимо на некоторое время вынуть батарею, либо ставить о нем представление тем, кто только собрался об-
просто отодвинуть на некоторое время защелку батареи. завестись карманной Linux-системой, но окажутся полез-
После чего возвращаем все в исходное состояние, и при ными и обладателям Zaurus. На возникшие вопросы автор
включении «завра» держим нажатыми клавиши <D+M>. Пе- с удовольствием ответит по электронной почте, либо на фо-
ред вами меню на английском языке. Я настоятельно реко- руме журнала.
мендую не экспериментировать с его пунктами, так как мож- Хочу поблагодарить Антона Масловского, предоставив-
но легко «убить» ваш КПК. Теперь перемещаемся на третью шего мне предварительную версию Cacko ROM 1.22, кото-
страницу меню. Там выбираем пункт «NAND Flash Back Up». рая к моменту публикации статьи наверняка уже выйдет в
Перед этим необходимо убедиться, что в КПК вставлена от- свет.
форматированная в файловой системе FAT карточка. Места
же должно хватить для 135 Мб файла с полной копией ваше-
го текущего содержимого NAND ROM. По окончании про-
цесса на флэшке будет лежать файл systc860.dbk. Обратно
в диагностическое меню можно будет вернуться по клавише
«Cancel», а из самого диагностического меню выход осуще-
ствляется выбором подпункта «Reset» пункта «Extra menu».
При необходимости вернуться к сохраненной прошивке мож-
но выполнить обратную операцию по восстановлению через
пункт «NAND Flash Restore».
Теперь приступим непосредственно к замене нашей ус-
таревшей версии на новую прошивку. Это делается из спе-
циального меню на японском языке. Не забудьте, что Sharp
официально не продает Zaurus за пределами Японии! По-
лучить доступ в это меню можно, если после «горячего»
рестарта включать КПК кнопкой «Power» с одновременно
нажатой клавишей «Ок». В меню выбираем четвертый, ниж- Ðèñóíîê 1. Çàãðóæàåòñÿ îáíîâëåííàÿ âåðñèÿ Cacko ROM
ний пункт. После КПК спросит, с какого носителя мы будем
обновлять прошивку. Три файла из архива – initrd.bin,
tools.tar и updater.sh должны лежать в корне либо CF – либо
SD-карты. Кроме того, убедитесь, что подключили блок
питания, иначе процесс не начнется. До этого момента он
не должен был быть подключенным. Итак, выбираем вто-
рой или третий пункт, и спустя некоторое время попадаем
в загрузочное меню установщика.
Далее, для корректной работы новой прошивки нам не-
обходимо переразбить внутреннюю flash-память КПК, вы-
делив под root-раздел 28 Мб. Выбираем пятый пункт «Flash
repartition», и в ответ на вопрос вводим 28. По окончании
переразбивки КПК предложит перезагрузиться. Заново вхо-
дим в японское меню, и повторяем все действия вплоть до
попадания в загрузочное меню установщика прошивки. На-
конец, выбираем «Install new ROM» и ожидаем окончания
Ðèñóíîê 2. Îáíîâëåííûé èíòåðôåéñ
процесса.
После обновления ROM, вам, возможно, захочется по-
пробовать собрать какую-нибудь программу на Zaurus из
исходников. К сожалению, из-за относительно небольшого
объема запоминающего устройства на КПК по умолчанию
не стоят средства разработки. Тем более что все в основ-
ном собирается кросс-компилятором на «большом» линук-
се. Однако все-таки возможность разработки непосред-
ственно на КПК есть. Для этого необходимо скачать и уста-
новить «Developer image» – образ сжатой файловой систе-
мы, который занимает порядка 35 Мб. В нем содержится
компилятор gcc, заголовочные файлы, утилиты и библио-
теки для сборки утилит командной строки и Qtopia. Ска-
чать его можно с http://www.zaurususergroup.com. Там же
находятся и RPM-пакеты для кросс-компилятора.
Надеюсь, статьи, посвященные замечательному карман-
ному компьютеру от фирмы Sharp, не только помогли со- Ðèñóíîê 3. Ñèñòåìíàÿ èíôîðìàöèÿ

№12(25), декабрь 2004 9


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

ДИСТРИБУТИВ ДЛЯ ВСЕХ


СЕРГЕЙ ЯРЕМЧУК
Какие бы доводы ни приводились в вечных спорах Windows ключить его. При появлении приглашения boot: возможно
vs Linux, но изучать компьютерные технологии, мне кажет- выбрать несколько вариантов загрузки. При нажатии на Enter
ся, лучше все-таки на UNIX-системах. Открытость, возмож- (или ввести linux) загружается обычное ядро, если набрать
ность разобраться во внутреннем строении, наличие огром- lids, загрузится ядро с поддержкой этого режима, возможны
ного числа удобных и свободных инструментов – все это еще варианты: 11 (переход сразу к 11 пункту см. ниже), 4 (к
позволяет при желании в совершенстве освоить любую про- 4 пункту), s4 (4 пункт с поддержкой LIDS), lock (пункт lock).
фессию, связанную с компьютерами. Но не всегда имеется Далее перед пользователем появляется меню:
возможность установить еще одну операционную систему.
1) Run Linux from CD-ROM with /var in RAM only
Сегодня пойдет речь об интересном дистрибутиве, который 2) Run Linux from CD-ROM with /var on FAT/EXT2 disk
позволяет изучить возможности GNU/Linux и, думаю, при- 3) Run Linux from FAT/EXT2 disk (incorporates Option 2)
4) Run Linux from CD-ROM with /var on USB storage
дется по вкусу некоторым администраторам и пользовате- 5) Install ADIOS repartition disk and create EXT3 filesystem
лям. 9) Create Swap file on FAT/EXT2 disk
Цель австралийского LiveCD дистрибутива ADIOS – Auto- x) Remove hardware and X windows configuration information
r) Change run-level (default 5 for X windows)
mated Download and Installation of Operating Systems (http:// i) Display Copyright, License and System Information
dc.qut.edu.au/adios) – дать возможность быстро и легко заг- h) Display Help
g) Display the 'guru' menu options
рузить и использовать операционную систему для лабора-
торных исследований. Первоначально образ ADIOS через Как видите, выбор большой. Возможно запустить ADIOS
веб-сервер использовался для установки операционной си- только с CD-ROM, примонтировать раздел /var с других ис-
стемы на жесткие диски компьютеров, дополнительно воз- точников либо установить его на жесткий диск и запускать
можно было сохранять копии образов OС на запасные дис- в дальнейшем оттуда, изменить уровень запуска системы
ковые разделы, и только относительно недавно появилась (по умолчанию 5). Но это еще не все пункты, если выбрать
возможность запускать с CD-ROM. Базируется дистрибу- «g» – guru, то их количество удвоится (появятся и опции 11
тив на Fedora 1.0. Поэтому ADIOS присущи поддержка боль- и lock). Отсюда при необходимости можно прямо из меню
шого количества оборудования и его автоматическое оп- создать/удалить swap-раздел или swap-файл (только на FAT
ределение, реализуемое при помощи kudzu, а также все те или ext2/3). Установку на жесткий диск система может вы-
понятные и удобные инструменты для настройки системы. полнить автоматически, в том числе и переразбить разде-
Система включает популярные графические среды – KDE, лы (как FAT, так и NTFS). Эта несколько рискованная опе-
GNOME и IceWM, так что первое знакомство с Linux прой- рация может быть выполнена и вручную при помощи ути-
дет в благоприятной обстановке. Ядро 2.4.24 собрано с под- литы ntfsresize. За подробностями работы которой обращай-
держкой loopback squashfs (http://squashfs.sourceforge.net), тесь к документации дистрибутива или к моей статье «Linux
файловой системы, использующей zlib для уменьшения раз- и NTFS» (журнал «Системный администратор», №8, август
мера, в результате в дистрибутив поместилось больше чем 2004 г.). В системе заведены четыре пользователя: root,
2 Гб приложений. В составе имеются ядра, поддерживают- super (Alternate Administrator), cso (Chief Security Officer) и
ся защищенные режимы – LIDS (Linux Intrusion Detection adios. Первые два представляют собой администраторов,
System), SELinux (NSA Security Enhanced Linux), в будущем причем в графическом режиме root система не позволит
планируется добавить Grsecurity или RSBAC. И кроме того зарегистрироваться, только super, cso необходим для ра-
поддерживается UML (User Mode Linux), при помощи кото- боты с SELinux и adios предназначен для повседневной ра-
рого возможно разбить одиночную систему на несколько боты. Пароль у всех этих пользователей один – 12qwaszx
независимых виртуальных машин, общающихся между со- (легко запомнить по две клавиши слева в каждом ряду),
бой через виртуальные Ethernet-интерфейсы. Поэтому поль- поэтому рекомендуется сразу же его сменить. Все найден-
зователи, желающие изучить на досуге эти технологии, ные разделы система монтирует в режиме «только чтение»,
получают готовый и уже настроенный инструмент. Систем- при необходимости записи перемонтируйте их с опцией –o
ные требования невысоки, поддерживаются все процессо- remount,rw. Дистрибутивы, основанные на RedHat, всегда
ры от 486 до Pentium 4 и минимально рекомендуемый объем отличались большим списком поддерживаемого оборудо-
ОЗУ – 64 Мб. вания, поэтому в большинстве для выхода в сеть остается
выставить только нужные параметры. Те, кто не знаком с
Работа с дистрибутивом работой консольных утилит вроде /sbin/ifconfig, найдут боль-
ADIOS в первую очередь LiveCD, и для удобства пользова- шое количество графических front-end для настройки сети,
телей в дистрибутиве заложены широкие возможности по например internet-druid (рис. 1).
сохранению части данных на разделах жесткого диска (DOS Программное обеспечение на диске содержит коллекцию
FAT или Linux EXT2/3), флоппи-диске или USB-устройствах. утилит управления и сетевого администрирования. Здесь
При каждом запуске система сканирует разделы жесткого все: веб-сервер Apache; прокси-сервер Squid; FreeS/WAN
диска и, если находит готовый swap-раздел, предлагает под- IPSec для создания VPN; маршрутизатор zebra; пакет Samba,

10
администрирование
который позволит работать в сетях Windows; сервер аутен- analysis tools (http://www.sleuthkit.org/sleuthkit). О возможно-
тификации openldap; сетевая система обнаружения атак стях утилит, входящих в его комплект, уже писалось на стра-
Snort c ACID; сканеры Nessus и Nmap; снифферы tcpdump ницах журнала. Для наглядности работы этих утилит раз-
и ethereal позволят проанализировать сетевые пакеты; фай- работчиками также установлен Autopsy Forensic Browser
рвол iptables с графическим интерфейсом firestarter; (http://www.sleuthkit.org/autopsy), позволяющий использовать
traceroute и графический xtraceroute позволят выяснить путь для вывода результатов веб-интерфейс. Для этого доста-
к интересующему узлу, и еще много сетевых утилит, тра- точно набрать в консоли autopsy & и вставить появившую-
диционно входящих в состав любой UNIX-системы. Имеют- ся строку в браузер.
ся утилиты для работы в беспроводных сетях. Далее Squirrelmail Webmail также дает возможность ис-
пользовать браузер для работы, в данном случае это по-
чта. Для его использования достаточно разрешить запуск
сервиса IMAP в /etc/xinetd.d/imap (disable = no) и запустить
xinetd, который по умолчанию не работает.

# /sbin/service xinetd start

И затем sendmail.

# /sbin/service sendmail start

Проверяем, работает ли веб-сервер /sbin/service httpd


status (для проверки всех запущеных /sbin/service --status-all).
Если все работает, набираем http://localhost/webmail.
Ðèñóíîê 1 В комплект программ также включен Swish-e (http://
Если набрать в строке веб-браузера IP-адрес своего ком- swish-e.org), позволяющий легко создать небольшой, но эф-
пьютера, то обнаружится еще одна положительная сторо- фективный поиск по сайту. При этом поиск по документам,
на ADIOS – ARK (Administrators Resource Kit) (рис .2), со- имеющимся на ADIOS CD, уже настроен. В любом другом
держащий большое количество различной документации случае это просто организовать самому. Настраиваем пара-
и коллекцию ссылок по Linux/UNIX вообще, настройке от- метры поиска в /etc/swish.conf, затем индексируем файлы.
дельных сервисов, защите, языкам программирования, ко-
торые придутся по душе новичкам. Отсюда же можно полу- #cd /var/www/swish
#swish-e -c /etc/swish.conf -f index.swish
чить доступ к man-страницам дистрибутива.
И в html-код страницы вставляем что-то вроде:

<form action=”/cgi-bin/search.cgi” target=”main”>

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


Также в дистрибутиве имеются сервер переадресации
rinetd и утилита контроля Nagios. Плюс принятые в боль-
шинстве UNIX утилиты для программирования в bash, nasm,
C, C++, Perl, Python, PHP и Ruby со средствами отладки. А
еще офисные программы, утилиты для работы с мультиме-
диа, графикой, игры. Так что комплект на все случаи жиз-
ни. Работа с поддержкой SELinux возможна только после
установки ADIOS на жесткий диск.
Для тех, кто хочет создать свой собственный LiveCD,
проект представляет набор скриптов ADIOS development kit
Ðèñóíîê 2 (ADK), работа с которыми хорошо описана в документации.
Для удобства администрирования системы в комплект Изучение UNIX-систем никогда не было легким, требу-
входит webmin, для его запуска достаточно ввести /sbin/ ется затратить некоторые усилия и проявить терпение,
service webmin start и затем набрать в строке браузера http:// прежде чем появится первый результат. ADIOS представ-
localhost:10000, после чего использовать для входа пользо- ляет собой хороший инструмент, который поможет сделать
вателя root. Этот сервис может оказаться полезным еще и эти первые шаги. Кроме того, это неплохой инструмент для
потому, что дистрибутив практически не содержит данных, демонстрации возможностей GNU/Linux, при организации
необходимых для локализаций, отличных от английской, и всевозможных курсов, особенно когда используется обо-
только webmin можно заставить общаться на русском. рудование, задействованное в других задачах. И, конечно
Для работы с данными, содержащимися на жестких дис- же, его можно использовать при решении задач админист-
ках, в том числе для их восстановления и исследований по- рирования, когда нет под рукой других инструментов, по-
следствий взлома в комплекте имеется Sleuthkit file system зволяющих решить вдруг возникшие проблемы.

№12(25), декабрь 2004 11


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

КОПИРОВАНИЕ ФАЙЛОВ
В АВТОМАТИЧЕСКОМ РЕЖИМЕ
С МНОЖЕСТВА КОМПЬЮТЕРОВ
ЧЕРЕЗ SSH

РАШИД АЧИЛОВ
Постановка задачи Настройка SSH
Предположим, имеется некоторое количество компьютеров SSH – это протокол связи двух компьютеров через TCP/IP
под управлением операционной системы UNIX (Windows) с c шифрованием передаваемых данных. Этот протокол обес-
запущенным SSH-сервером, на которых автоматически по печивает надежный и безопасный доступ к удаленному ком-
расписанию в некоторое время стартует программа, созда- пьютеру, расположенному... да неважно где, лишь бы у него
ющая резервные копии некоторых каталогов (например, был выход в Интернет. С точки зрения рядового системно-
/etc, /usr/local/etc) и складывающая их в определенное мес- го администратора SSH обычно рассматривается как бе-
то. Пример такого скрипта, адаптированного под систему зопасное средство удаленного управления сервером, для
periodic во FreeBSD, можно скачать с http://www.granch.ru/ чего ранее использовалась программа telnet. Конечно, есть
~shelton/fileZ/130.backup-dirs. Все используемые парамет- и другие средства шифровки трафика, но их мы рассмат-
ры описаны в начале скрипта. Для обеспечения сохраннос- ривать не будем.
ти данных архивов было бы неплохо копировать их все в Разумеется, шифрование сессии во время работы по
одну точку, откуда их можно было бы перенести на съем- SSH выполняется, но возможности SSH не исчерпываются
ный носитель, например. Копирование должно проводить- только этим. Я не буду приводить здесь описание всех воз-
ся в автоматическим режиме, все имена каталогов – быть можностей SSH, это тема для отдельной статьи, всех инте-
уникальными, требовать минимум настроек и обеспечивать ресующихся отсылаю к документации на SSH2 (http://
максимум безопасности при передаче данных по сети (если, www.ssh.fi/support/documentation/online/ssh/adminguide/32).
например, архив /etc попадет в чужие руки, можно полу- Одной из возможностей SSH является то, что он может
чить столько проблем, что мало не покажется). С этой це- выполнять авторизацию пользователей и организовывать
лью был разработан скрипт копирования файлов через удаленное выполнение команд в SSH-сессии без ввода па-
SCP2 (программу безопасного копирования, входящую в роля, с помощью так называемого публичного ключа. Эта
комплект SSH2) без ввода паролей, используя авториза- возможность основана на стандартном методе авториза-
цию с помощью публичных ключей. Скрипт выполняет ко- ции с помощью асимметричных ключей – приватного и пуб-
пирование файлов, размещенных в некотором, заранее личного.
обусловленном каталоге, отмечает каждое действие в соб- Приватный ключ доступен только пользователю и тща-
ственном файле журнала. В статье скрипт будет приводить- тельно им оберегается от хищения, публичный же ключ, на-
ся по частям (которые, будучи объединены вместе, тем не оборот, размещается во всех местах, где только можно его
менее дадут полноценный скрипт), полный текст скрипта разместить. На мой взгляд, наиболее удачное описание
можно загрузить с http://www.granch.ru/~shelton/fileZ/safecopy. того, как работает SSH и как его использовать (не считая,
Для разработки скрипта, отладки и применения исполь- конечно, man ssh2, man ssh.conf и прочих манов) – это кни-
зовался компьютер с операционной системой FreeBSD 4.10- га «SSH, the Secure Shell: Definitive Guide» [1].
STABLE и SSH2 от SSH Communications Inc., установлен- После того как принято решение о включении данного
ный из портов (/usr/ports/security/ssh2). Скрипт имеет неко- компьютера в автоматическое копирование файлов, но пе-
торые адаптационные возможности для работы с OpenSSH, ред тем как начинать собственно копирование, необходи-
но работоспособность этих возможностей не проверялась мо выполнить следующие шаги по настройке SSH:
и может содержать ошибки. Для работы скрипта использо- 1. Создаем пользователя, от имени которого будет вы-
валось имя пользователя rmbackup. полняться копирование файлов. Пользователь может не

12
администрирование
иметь пароля («*» в поле пароля в /etc/master.passwd), но тивном режиме. Это необходимо для создания хост-клю-
должен иметь действительный shell, поскольку он (shell) чей в подкаталоге hostkeys каталога .ssh2. Хост-ключи иден-
будет выполнять некоторые команды. Пользователь должен тифицируют SSH-сервер в целом. При отсутствии хост-клю-
быть создан на всех компьютерах, с которых будут копиро- ча в подкаталоге hostkeys перед началом сессии мастер и
ваться файлы, и на всех компьютерах иметь одинаковые удаленный компьютер обмениваются хост-ключами, и хост-
настройки и имя. Это не обязательно с точки зрения SSH, ключ удаленного компьютера помещается в подкаталог
но необходимо для скрипта, поскольку тот использует одно hostkeys для пользователя rmbackup. При этом на консоли
фиксированное имя пользователя. Интерактивной работы появляется следующий запрос:
на компьютерах, с которых будут копироваться данные,
>ssh mybox
никогда не будет, поэтому /bin/sh будет вполне достаточно. Host key not found from database.
На компьютере, на котором будет выполняться скрипт (на- Key fingerprint:
xocob-bicub-vatun-mofos-nutym-parok-sahet-hefer-papuh-kepyz-rexox
зовем его «мастер») установите любой привычный shell. You can get a public key's fingerprint by running
2. Создаем ключевую пару для данного пользователя % ssh-keygen -F publickey.pub
on the keyfile.
на данном компьютере. Для этого используется программа Are you sure you want to continue connecting (yes/no)? yes
ssh-keygen2. Порядок создания ключей не важен, следует Host key saved to /usr/home/rmbackup/.ssh2/hostkeys/key_22_mybox.pub
host key for mybox, accepted by rmbackup Wed Nov 03 2004 23:44:10 +0600
только помнить, что мастер-компьютер обращается ко всем
компьютерам, с которых копируются данные, а к самому Проверка того, что авторизация настроена правильно,
мастер-компьютеру не обращается никто. Поскольку пред- очень проста – набираете команду ssh remote на мастер-
полагается автоматическая работа, то создается ключевая компьютере, где remote – имя или адрес удаленного компь-
пара, не защищенная паролем. Пример создания ключе- ютера. Удаленная SSH-сессия должна начаться сразу же,
вой пары приведен ниже: без дополнительных запросов пароля. Если появится зап-
рос пароля на разблокировку ключа:
>ssh-keygen2 -P
>ssh mybox
Passphrase for key "/usr/home/rmbackup/.ssh2/id_dsa_2048_a"
Опускать -P здесь нельзя – опция указывает на необхо- with comment "2048-bit dsa, rmbackup@mybox.com,
Fri Jul 23 2004 12:50:25 +0700":
димость создания ключа, не защищенного паролем. После
создания ключевой пары появляются файлы id_dsa_2048_a значит ключ был сгенерирован с паролем. Такой ключ сле-
(приватный ключ) и id_dsa_2048_a.pub (публичный ключ). дует удалить и создать заново, но без пароля (см. пример
Подробную информацию о создании ключевой пары см. man выше).
ssh-keygen2. Публичный ключ мастер-компьютера, пере- Если же появляется стандартный запрос пароля:
именованный, например, в rmbackup_master.pub, нужно по-
местить в подкаталог .ssh2 домашнего каталога пользова- >ssh mybox
rmbackup's password:
теля rmbackup на всех компьютерах, с которых будут копи-
роваться файлы. значит, существуют проблемы в настройке авторизации. В
3. Настраиваем конфигурационные файлы идентифи- разделе «Возможные ошибки и изменения скрипта» при-
кации и авторизации. Эти файлы определяют имя файла ведены примеры того, что может пойти не так во время на-
(файлов – в SSH2 их может быть несколько) приватного стройки, и некоторые советы по исправлению создавшего-
ключа (ключей) и имена файлов, задающие ключи, автори- ся положения.
зация с которыми разрешена на данном компьютере для
данного пользователя. По умолчанию имена этих файлов Дополнительные вопросы безопасности
identification и authorization. На мастер-компьютере файл Поскольку созданный нами публичный ключ не имеет па-
authorization можно не создавать – на него никто не будет рольной защиты, то всегда существует ненулевая вероят-
заходить данным пользователем. На компьютерах, с кото- ность, что данный ключ может быть похищен и использо-
рых будут копироваться данные, файл authorization обяза- ваться не по назначению. Для того чтобы сделать такую
тельно должен содержать имя файла ключа мастер-компь- возможность как можно менее привлекательной, пользо-
ютера. Примеры файлов: вателя, от имени которого выполняется копирование, по-
местим в chroot-окружение.
identification: Что это такое? Это отдельная настройка SSH-сервера,
IdKey id_dsa_2048_a
authorization: при которой он передает клиенту информацию о том, что
Key rmbackup_master.pub домашний каталог пользователя – это корень файловой
системы. Естественно, выше корня двигаться невозможно.
Следует иметь в виду, что если планируется заходить с Технология изоляции критичных системных сервисов в «пе-
нескольких компьютеров, ключ каждого компьютера дол- сочницы» (sandboxes) применяется уже достаточно давно
жен быть помещен в подкаталог .ssh2 данного компьютера и успешно. Правда тут есть одно «но» – нам понадобится
и описан в файле authorization. Более подробная информа- обеспечить работоспособность сервера в данном окруже-
ция о настройке авторизации по публичному ключу приве- нии. Поскольку абсолютно все, что находилось выше до-
дена в man ssh.conf и man sshd.conf. машнего каталога в режиме chroot, недоступно, следует со-
4. В первый раз заходим с мастер-компьютера на ком- здать собственную иерархию каталогов со всем необходи-
пьютер, с которого будут копироваться файлы в интерак- мым. Правда, этого необходимого крайне мало. В домаш-

№12(25), декабрь 2004 13


администрирование
нем каталоге пользователя rmbackup на удаленном компь- connection from "192.168.1.1"
ютере следует создать каталоги /bin и /etc. В каталог /bin Public key /usr/local/share/rmbackup/.ssh2/rmbackup_mybox.pub used.
Public key authentication for user rmbackup accepted.
поместить файлы (переписать из стандартного /bin) ls, sh и User rmbackup, coming from mybox, authenticated.
(ВНИМАНИЕ!) исполняемый файл sftp-server, собранный User 'rmbackup' will be chrooted to directory '/usr/local/share/rmbackup'.
таким образом, что у него отсутствуют динамические ссыл- Now running on rmbackup's privileges.

ки на библиотеки. Такой режим обычно применяется для Предварительная подготовка завершена. Мы настрои-
программ, используемых в процессе восстановления сис- ли компьютеры, с которых (и на которые) будут копировать-
темы. Исполняемый файл sftp-сервера должен быть обяза- ся данные таким образом, что можно выполнять команду
тельно собран с отключением динамических библиотек, на удаленном компьютере через SSH2 без ввода паролей с
иначе придется дублировать всю структуру динамической помощью авторизации по публичному ключу.
загрузки – /usr/libexec/ld-elf.so, /var/run/ld-so.hints и все ос-
тальное. Исполняемый файл такого типа можно получить, Настройка скрипта
дописав в каталоге, где лежат исходные тексты ssh, в под- Настройка скрипта выполняется через задание перемен-
каталоге apps/ssh в файл Makefile в строчку 273 (или около ных в конфигурационном файле /etc/periodic.conf. Эти пе-
того) LDADD=<флаги> флаг -static и пересобрать SSH. Как ременные используются скриптом резервного копирования,
проверить, является ли полученный исполняемый файл ста- упомянутым в начале статьи, и скриптом, описываемым в
тически или динамически собранным? данной статье.
Скрипт использует следующие переменные:
> ldd sftp-server2
Ldd: sftp-server2: not a dynamic executable
daily_backup_owner="rmbackup" # Owner of backup files
daily_backup_group=”wheel” # Group of backup files
Приведенный выше ответ является правильным, если daily_backup_mode="0600" # Mode of backup files
вместо него появляется что-то типа: daily_backup_dirmode="0700" # Mode of intermediate dirs

> ldd sftp-server2: Это соответственно переменные, задающие пользова-


libm.so.2 => /usr/lib/libm.so.2 (0x280bb000)
libcrypt.so.2 => /usr/lib/libcrypt.so.2 (0x280d7000) теля, группу, режим доступа к файлам и каталогам, созда-
libutil.so.3 => /usr/lib/libutil.so.3 (0x280f0000) ваемым скриптами. Скрипт не устанавливает значения пе-
libncurses.so.5 => /usr/lib/libncurses.so.5 (0x280f9000)
libc.so.4 => /usr/lib/libc.so.4 (0x2813b000)
ременных по умолчанию, поэтому все переменные должны
быть заданы в /etc/periodic.conf или /etc/defaults/periodic.conf.
значит, это динамически собранный исполняемый файл, и
он не годится. На самом деле его тоже можно использо- Заголовок и вспомогательные функции
вать. Но для этого придется создать /usr/libexec в домаш-
нем каталоге пользователя rmbackup, перенести туда ls- #!/bin/sh
# Safe updating, so – copying current daily backup directory
elf.so, создать /usr/lib и поместить туда все библиотеки, пе- # from remote server to local. Used SSH2 publickey auth
речисленные в выводе ldd, создать /var/run/ld-so.hints ко- # method, so you need a working installation before starting.
# This is an open-source software, licenced by BSD license.
мандой ldconfig. С моей точки зрения, пересобрать програм- # Written by CityCat 23.07.2004
му значительно проще. # $Id: safecopy,v 1.5 2004/08/10 04:26:40 shelton Exp $
В каталог /etc помещаются файлы group и master.passwd. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin: ↵
Из файла group удаляются все реальные пользовательс- /usr/local/sbin
кие группы, важно, чтобы там присутствовала группа, про-
писанная как ChrootGroup в конфигурационном файле SSH- В приведенном выше заголовке нет ничего необычно-
сервера. Из файла master.passwd удаляются все пользова- го. Переустановка переменной PATH нужна для того, что-
тели с паролями, пароль root заменяется на «*». После чего бы находить программу SSH2, даже если пользователь ее
создаются файлы passwd, pwd.db и spwd.db командой: изменил.

>pwd_mkdb -p -d . master.passwd # Logging function


# Logged string in variable logline!
safe_logger()
Теперь файл master.passwd можно стереть. Кроме того, {
logdate=`date +"%d/%m/%Y %T"`
в конфигурационном файле SSH-сервера указывается груп- echo "$logdate [$$] safering: $logline" >> $logfile
па, к членам которой будет применяться chroot (по умолча- }
нию это группа sftp):
Функция записи информации в регистрационный жур-
ChRootGroups sftp,guest нал, который ведется программой, имитирует работу про-
граммы logger и формирует в журнале записи такого фор-
Кроме того, проследите, чтобы параметр AllowedAuthen- мата:
tications содержал publickey, а RequiredAuthentications не
содержал password. Еще лучше, чтобы он был удален или 07/08/2004 05:00:02 [70241] safering: File _etc.tar.bz2 from host mybox
was succesfully transferred
закомментирован. Как убедиться в том, что сессия идет в
chroot? В файле регистрационного журнала SSH-сервера при этом выводимая в журнал строка передается в пере-
об этом делается специальная отметка: менной logline.

14
администрирование
# Go down function ! Переменные hostlist и logfile задают соответственно име-
# Set variable godown to downing directory name на файлов списка компьютеров и регистрационного
go_down() журнала.
{ ! Переменные wsyear, wsmon и wsday хранят текущие год,
if [ ! -e $godown ]; then
mkdir $godown месяц, день.
chown $daily_backup_owner:$daily_backup_group $godown ! Переменная openssh указывает на то, что SSH, обнару-
chmod $daily_backup_dirmode $godown
fi женный скриптом, является OpenSSH (используется для
cd $godown
адаптации путей и работы с конфигурационными фай-
} лами).
! Переменная sshconf указывает на расположение конфи-
Функция перехода в подкаталог, задаваемый перемен- гурационного файла SSH по умолчанию.
ной godown. Если каталог отсутствует, он будет создан, и ! Переменная sshome указывает на пользовательский ка-
ему будут установлены права доступа, заданные в конфи- талог с настройками, ключами и т. д. для SSH (имена
гурационном файле. каталогов отличаются в SSH2 и OpenSSH).
! Переменная scpname задает имя программы безопас-
# If there is a global system configuration file, suck it in. ного копирования SCP (в SSH2 и OpenSSH они отлича-
#
if [ -r /etc/defaults/periodic.conf ]; then ются).
. /etc/defaults/periodic.conf
source_periodic_confs
fi Проверка командной строки
и обнаружение SSH
Загрузка значению по умолчанию для скрипта, если они
заданы (обычно вписываются в /etc/defaults/periodic.conf). # Check commandline
if [ $# -ne 0 ]; then
if [ $1 = "-h" ]; then
Переменные echo "Safering updater. Copying current daily ↵
backup dir from remote server."
Единственная переменная, которую имеет смысл настра- echo " Usage: safecopy [hostlist-location-and-name]."
ивать в скрипте, вынесена перед строкой предупрежде- exit
else
ния. Разумеется, все остальные переменные тоже можно hostlist=$1
менять – это же скрипт. Но все же делать это не рекомен- fi
fi
дуется без понимания механизма его работы.
# Check on presence SSH in system and detect their version
# Variables wssh=`which ssh2'`
# There is only maintained variables! if [ -z $wssh ]; then
# This is a root folder for all subordinated folders wssh=`which ssh'`
sysdir="/usr/local/share/rmbackup"
if [ -z $wssh ]; then
# NO CHANGES BEHIND THIS LINE!! YOU HAVE BEEN WARNED!! logline="No any SSH program was detected, ↵
backupdir="backup"
ringdir="$sysdir/backup" install it first"; safe_logger
exit
maintdir="$ringdir/maint" else
hostlist="$maintdir/cphosts"
logfile="$maintdir/saferlog" wsver=`$wssh | awk '{printf "%s %s %s",$1,$2,$3}'`
sshome="$HOME/.ssh"
wsyear=`date +"%Y"` scpname=scp
wsmon=`date +"%m"` wsx=`$wssh | awk '{print $3}'`
wsday=`date +"%d"`
# We assumed SSH2 by SSH Com. presence and locating config if [ $wsx = "SSH" ]; then
openssh=1
# in /usr/local/etc/ssh2 sshconf="/etc/ssh/ssh_config"
openssh=0
sshconf="/usr/local/etc/ssh2/ssh2_config" else
logline="Broken SSH1 from SSH ↵
sshome="$HOME/.ssh2" Communicationc Inc. probably detected"
scpname=scp2
safe_logger
exit
fi
Итак: fi
! Переменная sysdir указывает корневой каталог систе- else
wsver=`$wssh -V 2>&1 | awk '{printf "%s %s ↵
мы кольцевого копирования. Обычно это домашний ка- %s %s",$2,$3,$4,$5}'`
талог пользователя rmbackup, хотя можно указать лю- fi
бой другой. В этом каталоге будут располагаться все # Log detected version
остальные каталоги. logline="Detected version: $wsver"; safe_logger
! Переменная backupdir указывает на каталог с резерв-
ными копиями на удаленном компьютере. Допустимыми параметрами командной строки являют-
! Переменная ringdir указывает на каталог с резервными ся -h или имя файла со списком компьютеров, с которых
копиями на мастер-компьютере. производится копирование. Если имя файла не задано,
! Переменная maintdir указывает на каталог с регистра- будет использоваться файл cphosts в каталоге $maintdir.
ционным журналом, списком компьютеров, с которых Первым делом ищется программа ssh2 (which ssh2).
будут копироваться данные, и собственно скриптом. Если она найдена, то выбирается информация о версии (пе-

№12(25), декабрь 2004 15


администрирование
ременная wsver будет содержать «SSH Secure Shell x.x.x.x», Разбор строки и получение списка
где x.x.x.x – номер версии SSH), и полученная информация файлов для копирования
выводится в регистрационный журнал. Если же она не най-
дена, производится попытка обнаружить программу ssh # Parse host line
hostname=`echo $host | awk '{print $1}'`
(which ssh), и если она найдена, проверяется, что за про- hostadr=`echo $host | awk '{print $2}'`
грамма обнаружена. Если это OpenSSH (определяется по
fullpath=$backupdir/$wsyear/$wsmon-$wsyear/ ↵
характерному признаку – третье слово при запуске без па- $wsday-$wsmon-$wsyear
раметров содержит «SSH»), то переменные sshome, scpname,
# Take list of files to backup
sshconf и openssh устанавливаются в соответствующие зна- wls=`$wssh -o "BatchMode yes" -q $hostadr ↵
чения. Иначе скрипт завершает работу, поскольку работа с "cd $fullpath 2> null && /bin/ls -1"`
SSH1 от SSH Communications не поддерживается (по при-
чине его небезопасности). Один из двух наиболее важных моментов. Скрипт копи-
рования файлов создает каталоги вида YYYY/MM-YYYY/DD-
Проверка наличия MM-YYYY, где YYYY – текущий год, MM – текущий месяц,
файла идентификации DD – текущий день. Можно было бы, конечно, создавать
и разбор списка компьютеров папки типа YYYY/MM/DD, но мне удобнее просматривать
Как уже говорилось выше, файл идентификации обязатель- список в mc, когда видна полная дата. В переменной wls
но должен быть создан, если предполагается использовать после выполнения команды будет результат команды «пе-
авторизацию по публичному ключу. Поэтому отсутствие рейти в заданный каталог и получить список файлов в нем».
данного файла обозначает ситуацию, когда авторизация по Если предполагается копировать нечто другое, следует за-
публичному ключу еще не была настроена. дать соответствующий путь в переменной fullpath.
Если команда завершилась аварийно, то список будет
# Taking identity file name, drop down comment field пуст, и скрипт перейдет к другому узлу из списка или завер-
identity=`grep IdentityFile $sshconf`
idfirst=`echo $identity | awk '{print $1}'` шит работу, если этот список уже кончился. Результат вы-
полнения последней команды хранится в переменной status.
if [ $idfirst = "#" ]; then
idfile=`echo $identity | awk '{print $3}'` Если команда выполнена успешно, то выполняется после-
else довательный переход в каталоги: имя удаленного компью-
idfile=`echo $identity | awk '{print $2}'`
fi тера, YYYY, MM-YYYY, DD-MM-YYYY, например: cd myhost;
cd 2004; cd 12-2004; cd 15-12-2004. Если такой каталог от-
# For OpenSSH drop down path from pathname
if [ $openssh -eq 1 ]; then сутствует, он создается с правами, заданными параметра-
idname=${idfile##*/} ми. Мы говорили об этом в разделе «Настройка скрипта».
else
idname=$idfile
fi # When list is empty, do nothing
# (and don't create directories)
# Check on existance identification file. When doesn't – status=$?
# SSH dodn't setup to work with publickey auth method
if [ ! -e $sshome/$idname ]; then if [ $status -ne 0 ]; then
logline="Publickey auth method did not configured ↵ continue
yet"; safe_logger else
exit # Go down the ladder
fi godown=$hostname; go_down
godown=$wsyear; go_down
godown=$wsmon-$wsyear; go_down
Скрипт проверяет наличие параметра IdentityFile в кон- godown=$wsday-$wsmon-$wsyear; go_down
фигурационном файле сервера (даже если он отмечен зна- fi
ком комментария). Для OpenSSH дополнительно отбрасы-
вается путь к IdentityFile, если он там указан. Потом прове-
ряется существование файла, описанного как IdentityFile. Пофайловое копирование
Если он не существует, скрипт прекращает работу.
Разбор списка компьютеров осуществляется установ- for file in $wls
do
кой переменной IFS в значение «\n». Для этого не нужно $scpname -q -Q $hostadr:$fullpath/$file . 2> null
писать «IFS=”\n”» – shell не интерпретирует метасимволы. status=$?
Следует написать «IFS=”», нажать «перевод строки» и зак- # Check on operation return code
рыть кавычку – внутри кавычек окажется символ перевода if [ $status -ne 0 ]; then
logline="Transfer of file $file unsuccesful, ↵
строки. После считывания файла организовывается стан- return code is $status"; safe_logger
дартный цикл по списку переменных-строк: else
logline="File $file from host $hostname ↵
was succesfully transferred"; safe_logger
# Taking hosts list chown $daily_backup_owner:$daily_backup_group $file
IFS=" chmod $daily_backup_mode $file
" fi
hosts=`cat $hostlist`
cd $ringdir done
# Doing safering update # Return to top
for host in $hosts cd $ringdir
do done

16
администрирование
Последнее и самое важное действие скрипта – пооче- компьютере на предмет сообщений об ошибках и устра-
редное копирование файлов из списка, полученного на пре- нить их.
дыдущем шаге. Выполняется команда scp, и результат ее Если предыдущая команда завершена успешно, следу-
работы заносится в переменную status. В зависимости от ет проверить работу команды scp следующим образом (за-
значения переменной status выдается сообщение либо об менить 192.168.1.1 на IP-адрес или имя компьютера, с ко-
успешном завершении копирования (при этом устанавли- торого должны быть получены файлы. Файл .profile должен
ваются права и режим доступа, соответствующие парамет- существовать на удаленном компьютере):
рам, перечисленным в пункте «Настройка скрипта»), либо
об аварийном завершении (и тогда в журнал заносится код scp2 192.168.1.1:.profile ./profile-tmp
ошибки, расшифровку которого можно посмотреть в man
ssh2). (Внимание! Точка – элемент команды!)
Если в текущем каталоге появился файл .profile-tmp,
Возможные ошибки следует уточнить код ошибки по руководству к ssh2 (man
и изменения скрипта ssh2) и устранить ошибки. Если же нет – проверить файл
Если скрипт работает не так, как ожидается, то, скорее все- журнала, в который выводятся сообщения от SSH-сервера
го, имеет место ошибка в настройке SSH (по крайней мере, на удаленном компьютере на предмет сообщений об ошиб-
почти все ошибки, с которыми я сталкивался после завер- ках, и устранить их. Здесь наиболее частой ошибкой мо-
шения его разработки, были такого плана). Это очень про- жет быть неверный sftp-server2, который не собран в соот-
сто проверить – достаточно с консоли мастер-компьютера ветствии с рекомендациями раздела «Дополнительные воп-
набрать ssh remotebox, где remotebox – имя любого компь- росы безопасности», а просто переписан и для работы тре-
ютера, с которого должны копироваться данные. Если сра- бует наличия динамического загрузчика, libc и пр.
зу же открывается терминал удаленного компьютера – все Как можно изменить место, откуда берутся копируемые
нормально (при этом motd показываться не должно). Если файлы на удаленном компьютере? Для этого достаточно
же появляется запрос пароля на разблокирование ключа, изменить формирование переменной fullpath, описанной в
запрос пароля на регистрацию на удаленном компьютере разделе «Разбор строки и получение файлов для копиро-
или какие-либо сообщения об ошибках – следует устранить вания».
ошибки и повторить. Как можно изменить место и организацию каталогов, в
Единственной ошибкой, которую можно совершить при которые раскладываются файлы на мастер-компьютере? Для
генерации ключа, является запуск ssh-keygen2 без ключа этого в функцию go_down передается значение переменной
-P. При этом при генерации ключа будет запрошен пароль. godown – каталог будет создан по ее содержимому. Можно
Если при генерации ключа появился запрос пароля, лучше вообще все складывать в один каталог – для этого нужно
генерацию прервать и запустить ssh-keygen2 заново с клю- закомментировать строки с «godown=...; go_down».
чом -P.
Самой распространенной ошибкой авторизации явля- Заключение
ется то, что ключ мастер-компьютера не помещен в ката- Данный скрипт – инструмент системного администратора
лог .ssh2 пользователя rmbackup удаленного компьютера, из разряда «настроил и забыл». После его настройки он не
не описан в файле authorization, или в имени ключа допу- требует какого-либо сопровождения, кроме, пожалуй, ре-
щена банальная опечатка. Если ключ для пользователя гулярного резервного копирования каталога с файлами,
rmbackup создавался через su rmbackup от пользователя скопированными с удаленных компьютеров. Ну и, конечно,
root, возможно, установлены неверные права на файлы обеспечения необходимых мер безопасности по отношению
identification и authorization (при создании файлов владель- к каталогу, в котором хранятся резервные копии. Разуме-
цем становится создатель). Второй распространенной ется, он разрабатывался для решения определенной част-
ошибкой является задание параметра RequiredAuthentication ной задачи, но его нетрудно адаптировать для копирова-
password в конфигурационном файле sshd.conf на удален- ния чего угодно откуда угодно. Ошибки в самом скрипте
ном компьютере, требующего обязательной аутентифика- исключены ввиду его достаточной простоты, как правило,
ции по паролю. все ошибки связаны с ошибками самого SSH.
Если терминальная сессия на удаленном компьютере
открывается нормально, то следует попробовать вручную Дополнительная информация:
ввести команду (вместо 192.168.1.1 подставить IP или имя 1. Daniel J. Barrett, Richard Silverman. SSH, the Secure Shell:
компьютера, с которого должны быть получены файлы): Definitive Guide. O’Reilly & Associates, 2001, 558 pages.
ISBN: 0-596-00011-1.
>su rmbackup 2. http://www.ssh.fi/support/documentation/online/ssh/
>ssh2 -o "BatchMode yes" -q 192.168.1.1 "cd /etc && ↵
/bin/ls -1" adminguide/32 – SSH Secure Shell for Servers Version 3.2
Administrator’s Guide.
Если в результате выполнения этой команды получа- 3. http://www.opennet.ru/docs/RUS/ssh_faq – Faq по SSH в
ется оглавление каталога /etc (в chroot это файлы group, русской редакции. Русская редакция: Андрей Лаврен-
passwd, pwd.db и spwd.db) – значит, следует проверить ра- тьев (lavr@unix1.jinr.ru).
боту scp. Иначе следует проверить файл журнала, в кото- 4. man ssh2, man sshd2, man ssh.conf, man sshd.conf, man
рый выводятся сообщения от SSH-сервера на удаленном ssh-keygen2.

№12(25), декабрь 2004 17


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

ЕДИНАЯ УЧЕТНАЯ ЗАПИСЬ


ДЛЯ WINDOWS И UNIX
В ACTIVE DIRECTORY

ИГОРЬ ПОЛЯНСКИЙ
В данной статье речь пойдет о том, как управлять единой А за тем, что очень многие организации изначально ориен-
учетной записью пользователя посредством MS Active тированы на платформу Windows и в качестве каталога при-
Directory вне зависимости от того, на какой платформе он меняют Active Directory, а когда в сети начинает появляться
работает, будь то Windows или UNIX-подобные системы. За- UNIX, то встает вопрос об интеграции, и не всегда хорошие
бегая вперед, скажу, что если с Windows-клиентами все ясно, коммерческие решения подходят, либо из-за стоимости, либо
то интеграция с каталогом от Microsoft тем способом, кото- в силу других причин. Я изначально рассматривал вариант с
рый будет здесь описан, подходит не для всех UNIX-подоб- ведением второго каталога для UNIX-клиентов на базе
ных операционных систем. Так уж сложилось – все они раз- OpenLdap, но хотелось все-таки управлять учетными запи-
ные, да и Active Directory вовсе не идеальная среда для ин- сями из единой точки, а именно из Active Directory, потому
теграции разнородных систем. Тогда зачем я все это пишу? что этот каталог широко используется у нас в сети.

18
администрирование
Вариант Samba + winbind меня не устраивал, поскольку
по роду задач samba вообще не нужна, к тому же это лиш-
ние службы на каждой машине, использование которых все-
таки не решает проблем с централизованным управлени-
ем пользовательскими данными, поэтому это решение мне
показалось неразумным и неизящным.
Более всего привлекал вариант с использованием сер-
вера NIS, который входит в продукт, известный как Services
For Unix от компании Microsoft и синхронизация записей
Active Directory to NIS. Зайдя на microsoft.com в надежде
скачать SFU3.5, которая в отличие от предыдущей версии
SFU3.0 бесплатна, я набрел на ряд интересных статей, про-
читав которые, пошел по другому пути.
Как уже говорилось в начале, не все UNIX-подобные си-
стемы могут проходить аутентификацию и запрашивать
данные о пользователе в Active Directory описанным здесь
способом, а только те, которые умеют работать с PAM и
pam-модулями. Как вы, наверное, догадались, я буду опи-
сывать способ взаимодействия с ldap-сервером, входящим
в Active Directory через модули pam_ldap и nss_ldap.
Итак, начнем. В качестве подопытных будут выступать
MS Windows 2000 Server Standart с установленной Active
Directory (в дальнейшем AD), Linux Manrdake 10.0, Solaris 9
x86, FreeBSD 4.10. Над Windows 2000/XP опыты ставить бес- Как видите, теперь у каждого пользователя есть атрибу-
смысленно – все и так работает. Как минимум понадобит- ты, применяемые в UNIX-системах. Первое поле «NIS
ся DNS-сервер, который может быть установлен на том же Domain» будет содержать краткую форму имени нашего до-
Windows 2000 Server. Свежеустановленная AD не имеет тра- мена. Этот параметр нужен для службы NIS, и хотя в нашем
диционной ldap-схемы для UNIX: userid, grouid, login shell, случае она не применяется, без нее не активируются другие
home directory. Нам нужно её расширить, и для этого я вос- поля. С остальными полями, я думаю, затруднений не воз-
пользуюсь SFU3.5. Вообще-то существует несколько спо- никнет, может быть, за исключением GID. Прежде чем выб-
собов это сделать: вручную создав ldif-файл с нужной схе- рать из этого поля группу, её надо создать или в свойствах
мой и импортировав его при помощи каких-либо программ уже имеющейся задать UNIX-атрибуты. Проблема с группа-
сторонних разработчиков, например такой, как AD4Unix ми заключается в том, что нельзя задать одно и то же имя
(www.padl.com/download/MKSADPlugins.msi), или с помощью для пользователя и группы, а в мире UNIX такой подход весь-
SFU от Microsoft. Первый способ я оставляю гуру, вышеоз- ма распространен. В таком случае можно использовать толь-
наченную программу MKSADPlugins.msi вам установить ко численное представление, правда, я сомневаюсь, что это
вряд ли удастся, если Windows 2000 Server работает с аль- хороший выход из создавшейся ситуации. Ещё потребуется
тернативной локалью, отличной от US, что для России уме- создать учетную запись, которая будет применяться для вза-
стно. В пользу же SFU, на мой взгляд, говорит то, что она имодействия UNIX-машин с ldap-сервером. Это своего рода
сделана в том же КБ, где Windows и AD, плюс в своем со- дыра в безопасности, поэтому сей аккаунт не должен при-
ставе имеет много утилит от UNIX. надлежать кому-либо и доступ к важным ресурсам ему дол-
Пройдя добровольно-принудительную процедуру полу- жен быть запрещен. Тем не менее он должен иметь право на
чения .NET Passport, вы сможете бесплатно скачать и ис- поиск объектов в каталоге. На этом этапе вы готовы управ-
пользовать SFU3.5 (www.microsoft.com/windows/sfu). Размер лять единой учетной записью при помощи Active Directory.
программы примерно 230 Мб. Прежде чем устанавливать Переходим к настройке клиентских машин. Я использо-
SFU, нужно инсталлировать Active Directory Schema MMC вал Linux Mandrake 10.0 Official и всё необходимое ПО ус-
snap-in следующей командой: танавливал из rpm-пакетов, входивших в состав дистрибу-
тива. Понадобится установить pam_ldap и nss_ldap. После
regsvr32 ñ:\WINNT\system32\schmmgmt.dll установки этих пакетов нужно отредактировать несколько
конфигурационных файлов. Pam_ldap и nss_ldap для на-
Для расширения схемы AD достаточно установить толь- строек используют один и тот же файл ldap.conf. Также нуж-
ко NIS-сервер из состава SFU. Для успешного завершения но будет отредактировать nsswitch.conf и как минимум один
установки необходимо быть либо членом групп Domain файл, находящийся в /etc/pam.d, а именно system-auth. Не
Admins и Schema Admins, либо работать с правами Адми- забудьте сделать копии оригинальных файлов. Итак, файл
нистратора. После установки будет предложено перегру- ldap.conf должен содержать следующее:
зить машину. NIS-сервер как таковой не понадобится и его
можно остановить и благополучно забыть о нём. В свой- # Áàçîâûå íàñòðîéêè, íåîáõîäèìûå äëÿ ïîäêëþ÷åíèÿ ê AD.
# domain, loc è server.domain.loc âû äîëæíû èçìåíèòü
ствах пользователя, группы, компьютера в Active Directory # â ñîîòâåòñòâèè ñî ñâîèìè íàñòðîéêàìè
Users and Computers добавится вкладка UNIX Attributes. base dc=domain,dc=loc

№12(25), декабрь 2004 19


администрирование
scope sub правила для локального пользователя, если такой учетной
uri ldap://server.domain.loc записи нет, то информация берется из AD. Но есть одна ма-
port 389
ldap_version 3 ленькая проблема, которая может стать большой. Дело в том,
# Òîò ñàìûé àêêàóíò, êàê âèäèòå, îí áûë ñîçäàí â êîíòåéíåðå
что домашний каталог автоматически не создается и по умол-
# Users ñ èìåíåì ldap è ïàðîëåì qwerty чанию таковым считается /. Вам придется создавать домаш-
binddn cn=ldap,cn=Users,dc=domain,dc=loc ние каталоги руками на каждой машине, что не очень удоб-
bindpw qwerty
но. Для этого можно использовать модуль pam_mkhomedir.
# Êîãäà âû áóäåòå ââîäèòü èìÿ ïîëüçîâàòåëÿ è ïàðîëü, áóäóò При регистрации в данной системе модуль смотрит, есть ли
# ïðèìåíÿòüñÿ ñëåäóþùèå îáúåêòû è àòðèáóòû èç AD:
pam_filter objectclass=User домашний каталог, если нет, то он его создает и копирует
pam_login_attribute sAMAccountName туда файлы из /etc/skel. Вы можете в соответствии со свои-
pam_password ad
ми требованиями менять и порядок модулей, и их опции для
# Ýòè çàïèñè íóæíû äëÿ óñêîðåíèÿ ïîèñêà. Ìîæåòå èõ âîîáùå разных служб. В таких перестановках надо быть осторож-
# íå âñòàâëÿòü. Îáðàòèòå âíèìàíèå, âñå ïîëüçîâàòåëè â ýòîì
# ïðèìåðå õðàíÿòñÿ â «Organization Unit → firma» ным, потому как можно прийти к неожиданным результатам
nss_base_passwd ou=firma,dc=domain,dc=loc?sub вплоть до невозможности регистрироваться в системе даже
nss_base_shadow ou=firma,dc=domain,dc=loc?sub
nss_base_group ou=firma,dc=domain,dc=loc?sub под учетной записью root. Для начала логично почитать что-
# Ýòè çàïèñè îòíîñÿòñÿ ê ìîäóëþ nss_ldap, ïðåîáðàæàþò
нибудь о PAM. После этих манипуляций можно попробовать
# îáúåêòû è àòðèáóòû AD ê âèäó, ïðèíÿòîìó â LDAP зарегистрироваться на Linux-машине пользователем, кото-
nss_map_objectclass posixAccount User рый не упоминается в файлах passwd, shadow, group, но его
nss_map_objectclass shadowAccount User
nss_map_attribute uid sAMAccountName UNIX-атрибуты присутствуют в AD.
nss_map_attribute uidNumber msSFU30UidNumber Если всё прошло отлично, то при первом входе среди
nss_map_attribute gidNumber msSFU30GidNumber
nss_map_attribute cn sAMAccountName прочих надписей увидим следующее:
nss_map_attribute uniqueMember member
nss_map_attribute homeDirectory msSFU30HomeDirectory Creating directory '/home/test'.
nss_map_attribute loginShell msSFU30LoginShell Creating directory '/home/test/tmp'.
nss_map_attribute gecos name Посмотрим, кем нас считает система:
nss_map_objectclass posixGroup Group
[test@linux-pc test]$ id
Далее на очереди файл nsswitch.conf, тут всё просто – uid=10000(test) gid=10000(testgroup) groups=10000(testgroup)
находите строчки: Настраиваем Solaris 9 x86. В Solaris есть свои модули
pam_ldap и nss_ldap, только вот незадача – они не совсем
passwd: files nisplus nis совместимы с Active Directory, поэтому Microsoft рекомен-
shadow: files nisplus nis
group: files nisplus nis дует использовать модули от PADL (www.padl.com), те же,
что применяются в Linux. Чтобы скомпилировать эти моду-
и меняете их на: ли, потребуется установить ряд GNU-утилит, получить их
можно на www.sunfreeware.com. Оглашаю весь список:
passwd:
shadow:
files ldap
files ldap
! autoconf-2.57-sol9-intel-local.gz
group: files ldap ! automake-1.7.2-sol9-intel-local.gz
! gcc-3.2.1-sol9-intel-local.gz
Редактируем файл /etc/pam.d/system-auth: ! m4-1.4-sol9-intel-local.gz
! make-3.80-sol9-intel-local.gz
#%PAM-1.0
auth required pam_env.so
auth sufficient pam_unix.so likeauth nullok Плюс к этому берем с сайта www.blastwave.org пакет
auth sufficient /lib/security/pam_ldap.so ↵ berkeleydb3-3.11-i386-CSW.pkg.gz.
use_first_pass
auth required pam_deny.so Перед тем как собирать pam_ldap и nss_ldap, создадим
символическую ссылку в /usr/local/bin на perl:
account required pam_unix.so
account [default=bad success=ok user_unknown=ignore ↵
service_err=ignore system_err=ignore] ↵ ln -s /usr/bin/perl /usr/local/bin/perl
lib/security/pam_ldap.so
password required pam_cracklib.so retry=3 ↵ На файлы из каталогов /opt/csw/bin, /opt/csw/lib, /opt/csw/
minlen=2 dcredit=0 ucredit=0 ucredit=0
password sufficient pam_unix.so nullok ↵ include, созданные в процессе инсталляции berkeleydb3-
use_authtok md5 shadow 3.11-i386-CSW.pkg.gz, сделаем символические ссылки в
password sufficient /lib/security/pam_ldap.so ↵
use_authtok аналогичные каталоги, расположенные в /usr. Сделаем ре-
password required pam_deny.so зервную копию оригинальных модулей pam_ldap и nss_ldap:
session required pam_limits.so
session required pam_unix.so cp /usr/lib/security/pam_ldap.so.1 ↵
session required /lib/security/pam_mkhomedir.so ↵ /usr/lib/security/pam_ldap.so.1.bak;
skel=/etc/skel umask=0022 cp /usr/lib/nss_ldap.so.1 /usr/lib/nss_ldap.so.1.bak
session optional /lib/security/pam_ldap.so
Объявим переменные среды:
В этом примере строчки, содержащие модуль pam_
ldap.so, были добавлены в соответствии с рекомендациями PATH=/usr/local/bin:$PATH
LD_LIBRARY_PATH=/usr/local/lib
Microsoft. Суть их такова, что сначала система применяет export LD_LIBRARY_PATH

20
администрирование
Это сработает для оболочек, совместимых по синтак- ! Скачал исходный код: http://keutel.de/pam_mkhomedir/
сису с sh, например, bash, ksh. Если вы пользуетесь другим pam_mkhomedir.c тоже в /tmp и скомпилировал следую-
интерпретатором, посмотрите документацию к нему. щей командой (в одну строчку), находясь в /tmp:
Соберем модули от PADL, перейдя в соответствующие
директории, созданные в процессе разархивации файлов, /usr/local/bin/gcc -D_REENTRANT -g -O2 -Wall -fPIC ↵
-c -ILinux-PAM-0.77/libpam/include ↵
полученных с www.padl.com/download: -ILinux-PAM-0.77/libpamc/include ↵
-ILinux-PAM-0.77/modules/pammodutil/include ↵
cd pam_ldap-176 -DPAM_DYNAMIC pam_mkhomedir.c -o pam_mkhomedir.o
./configure
make ! Получил готовый модуль следующей командой:
make install
/usr/ccs/bin/ld -o pam_mkhomedir.so -B dynamic -G ↵
cd nss_ldap-226 -lc pam_mkhomedir.o
./configure --enable-schema-mapping
make
make install К сожалению, FreeBSD 4.x не умеет работать с nss_ldap
и значит запрашивать данные о пользователе в AD, плюс
Если все прошло удачно, редактируем ldap.conf и не может менять пароль стандартными средствами с помо-
nsswitch.conf аналогично Linux, за исключением строчки: щью pam_ldap. Но всё же доступ к машине, как с консоли,
так и к службам ssh, ftp и т. д. можно получить, пройдя аутен-
uri ldap://server.domain.loc тификацию в Active Directory. Для этого установите pam_
ldap, отредактируйте два файла – ldap.conf и pam.conf. В
которую заменим на: ldap.conf достаточно внести следующий фрагмент:

host server.domain.loc base dc=domain,dc=loc


scope sub
uri ldap://server.domain.loc
Linux воспринимает оба формата, Solaris почему-то толь- port 389
ldap_version 3
ко host. Настройки PAM в Solaris хранятся в файле /etc/ binddn cn=ldap,cn=Users,dc=domain,dc=loc
pam.conf. На этом этапе, следуя советам Microsoft, я полу- bindpw qwerty
pam_filter objectclass=User
чил неработоспособную систему, поэтому кое-что поменял pam_login_attribute sAMAccountName
и добавил (представлены фрагменты с внесенными изме- pam_password ad
нениями):
В этом случае пароль из AD будет запрашиваться при
# login service (explicit because of pam_dial_auth) входе с консоли, ftp и ssh, если пароль отвергнут, поиск
login auth requisite pam_authtok_get.so.1
login auth required pam_dhkeys.so.1 будет продолжен в локальных файлах.
login auth sufficient pam_unix_auth.so.1
login auth required pam_dial_auth.so.1 login auth sufficient /usr/local/lib/pam_ldap.so
login auth sufficient pam_ldap.so.1 use_first_pass login auth sufficient pam_skey.so
# Default definitions for Authentication management login auth sufficient pam_opie.so no_fake_prompts
#login auth requisite pam_opieaccess.so
# Used when service name is not explicitly mentioned login auth requisite pam_cleartext_pass_ok.so
# for authenctication
other auth requisite pam_authtok_get.so.1 #login auth sufficient pam_kerberosIV.so try_first_pass
#login auth sufficient pam_krb5.so try_first_pass
other auth required pam_dhkeys.so.1 login auth required pam_unix.so try_first_pass
other auth sufficient pam_unix_auth.so.1
other auth sufficien pam_ldap.so.1 use_first_pass login account required pam_unix.so
login password required pam_permit.so
# Default definition for Session management login session required pam_permit.so
# Used when service name is not explicitly mentioned # Same requirement for ftpd as login
# for session management ftpd auth sufficient /usr/local/lib/pam_ldap.so
other session required pam_unix_session.so.1
other session sufficient ↵ ftpd auth sufficient pam_skey.so
ftpd auth sufficient pam_opie.so no_fake_prompts
pam_mkhomedir.so skel=/etc/skel/ umask=0022 #ftpd auth requisite pam_opieaccess.so
# Default definition for Password management ftpd auth requisite pam_cleartext_pass_ok.so
#ftpd auth sufficient pam_kerberosIV.so try_first_pass
# Used when service name is not explicitly mentioned #ftpd auth sufficient pam_krb5.so try_first_pass
# for password management
other password required pam_dhkeys.so.1 ftpd auth required pam_unix.so try_first_pass
other password requisite pam_authtok_get.so.1 # OpenSSH with PAM support requires similar modules.
other password requisite pam_authtok_check.so.1
other password required pam_authtok_store.so.1 # The session one is a bit strange, though...
sshd auth sufficient /usr/local/lib/pam_ldap.so
other password sufficient pam_ldap.so.1 use_authtok sshd auth sufficient pam_skey.so
sshd auth sufficient pam_opie.so no_fake_prompts
Здесь смысл примерно такой же, как и в случае с Linux. #sshd auth requisite pam_opieaccess.so
#sshd auth sufficient pam_kerberosIV.so try_first_pass
Pam_mkhomedir для Solaris не существует, но его можно #sshd auth sufficient pam_krb5.so try_first_pass
собрать самостоятельно. Я следовал инструкциям на http:/ sshd auth required pam_unix.so try_first_pass
sshd account required pam_unix.so
/keutel.de/pam_mkhomedir и получил работоспособный мо- sshd password required pam_permit.so
дуль, проделав следующие шаги на машине с Solaris: sshd session required pam_permit.so
! Скачал и распаковал исходный код Linux-PAM: http://
www.kernel.org/pub/linux/libs/pam/pre/library/Linux-PAM- Локально пароль можно вообще не хранить. Для этого
0.77.tar.gz, допустим, в /tmp. при помощи команды vipw отредактируйте файл паролей.

№12(25), декабрь 2004 21


администрирование
Сотрите зашифрованный пароль во втором поле и поставь- setgid = stunnel
те там * (звёздочка). # Some debugging stuff
По сведениям, взятым на http://www.padl.com/OSS/nss_ debug = 7
ldap.html, FreeBSD 5.1 и выше уже работает с nss_ldap, но output = /var/log/stunnel.log
проверить это лично не удалось по причине отсутствия ди- # Use it for client mode
стрибутива. client = yes
Осталось прикрутить SSL. Хотя это вовсе не обязатель- # Service-level configuration
но, наверняка вы захотите использовать шифрование по [ldap]
accept = 127.0.0.1:389
двум причинам. Первая – безопасность, ведь запросы к ldap, connect = server.domain.loc:636
в том числе пароли, передаются в открытом виде, вторая –
возможность пользователю самому менять пароль в AD Из данного примера мы видим – stunnel работает в кли-
посредством стандартной команды passwd. Необходимо ентском режиме, слушает запросы на 127.0.0.1 порт 389 и
проделать некоторые операции, как на Windows-сервере, пересылает их на Windows-сервер порт 636 уже в зашиф-
так и на клиентских машинах. рованном виде. В зависимости от операционной системы
На сервере: вам придется вручную создать пользователя stunnel и ка-
! Убедиться, что поддерживается шифрование 128 bit, ина- талог /var/tmp/stunnel с возможностью записи для этого
че вы не сможете удаленно поменять пароль. Windows пользователя. В файле ldap.conf просто поменяем строчку:
2000 sp2 и выше это умеет, в противном случае устано-
вите Encryption pack. ri ldap://server.domain.loc
! Установить сервис сертификатов, входящий в дистри-
бутив. Без этого сервер не будет принимать соедине- на
ния по протоколу ldaps. В процессе инсталляции серви-
са сертификатов будет предложено создать корневой host 127.0.0.1
сертификат. Заполнив поля (можно не все), вы получи-
те файл сертификата, лежащий в директории с:\. Де- Перегружаем машину, регистрируемся, пробуем менять
лать с ним ничего не придется. В журнале событий (event пароль. Параллельно tcpdump на другом терминале можно
viewer) должна появиться запись о возможности приня- наблюдать наши SSL-соединения.
тия соединений LDAPS (прим.: у меня это сообщение В результате мы имеем централизованную систему уп-
появилось на следующий день, может, потому, что я не равления пользователями средствами Active Directory, что
перегружал машину, а до этого все попытки коннекта значительно облегчает работу администратора. Интегра-
на ldaps:636 терпели неудачу). Проверить, что сервер ция таким способом позволяет внедрить UNIX-системы в
работает корректно, можно простым способом. С лю- существующую структуру Windows-сетей и при этом отка-
бой Windows-машины в домене или на самом сервере заться от ведения дополнительных каталогов или хране-
выполните «Start → Search → For People». ния пользовательских данных на каждой машине.

В свойствах укажите адрес сервера, порт 636, контей-


нер для поиска.
В данном примере мы ищем объекты в контейнере Users.
Если поиск завершился успехом, значит ваш сервер настро-
ен на прием запросов по протоколу LDAPS порт 636.
На клиенте:
Самым простым решением для меня оказалось исполь-
зование программы stunnel. После установки stunnel нуж-
но поправить два файла stunnel.conf и ldap.conf. Stunnel.conf
может выглядеть так:

chroot = /var/tmp/stunnel
pid = /stunnel.pid
setuid = stunnel

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

FreeBSD TIPS:
НАСТРОЙКА VLAN

СЕРГЕЙ СУПРУНОВ
Представьте себе ситуацию: узел СПД в составе маршру- ! подсеть реальных адресов для работы в Интернете
тизатора CISCO и коммутатора Catalyst находится на пер- (111.222.0.0/28);
вом этаже, а ваш FreeBSD-сервер – на четвертом. И при ! корпоративная частная подсеть для доступа к вышесто-
этом требуется вывести во внешний мир несколько подсе- ящим узлам компании (10.0.123.0/24);
тей, которые проходят через сервер FreeBSD на Catalyst. ! и еще одна сеть для управления оборудованием СПД
Можно, конечно, подключить к серверу несколько сетевых (10.254.0.0/24).
адаптеров, занять для внутреннего использования несколь-
ко портов на Catalyst и пробросить между этажами кило- Прежде всего нужно проверить, поддерживает ли ваша
метр кабеля 5-й категории. На кабеле можно даже сэконо- сетевая карта работу по VLAN. Некоторые карты обеспе-
мить, пропустив по одному кабелю сразу два соединения и чивают поддержку данной технологии на аппаратном уров-
задействовав тем самым все имеющиеся пары. Однако все не, однако драйвер также должен поддерживать VLAN.
равно и затрат, и дополнительных работ по прокладке ка- Страница справочного руководства (см. man vlan) для
белей получается слишком много. А раз возникает слож- FreeBSD 5.2 сообщает, что аппаратное мультиплексирова-
ность, то наверняка кто-то уже нашел способ ее устранить. ние поддерживается для драйверов bge, em, gx, nge, ti и
И в нашем случае панацеей будет технология VLAN – вир- txp. (Во FreeBSD 5.3 к этому списку добавился еще и драй-
туальные локальные сети. вер re, обеспечивающий работу сетевых адаптеров на чип-
Данная технология позволяет логически разделять не- сетах RealTek 8139C+/8169/8169S/8110S). Узнать подроб-
сколько подсетей на одном устройстве (например, комму- ную информацию по каждому из драйверов, в том числе
таторе) таким образом, что машины, объединенные в одну список поддерживаемых драйвером моделей сетевых карт,
VLAN, ничего не знают о существовании компьютеров, вхо- можно на страницах man (например, man 4 em сообщает,
дящих в другую. И с точки зрения топологии сети мы полу- что драйвером em поддерживается Intel PRO/1000 Gigabit
чаем отдельные коммутаторы для каждой подсети. Ethernet adapter). Если ваш адаптер не входит в этот спи-
На уровне протоколов это достигается добавлением не- сок, то наверняка он сможет работать с использованием
скольких полей в заголовок пакета сетевого уровня. Одно программной эмуляции мультиплексирования. По крайней
из добавленных полей содержит идентификатор (номер) мере, для большинства современных карт это утвержде-
сети VLAN, на основе которого и происходит разделение ние справедливо. Нужно заметить, что тот же man vlan гла-
Ethernet-кадров по виртуальным сетям. Кадры, имеющие сит, что сетевой адаптер для полноценной эмуляции дол-
одинаковый номер VLAN, рассматриваются как принадле- жен поддерживать «длинные» кадры (oversized frames). В
жащие одной подсети. Регламентируется это стандартом противном случае из-за необходимости размещения допол-
IEEE 802.1Q. нительных полей заголовка, содержащих информацию о
Развитие технологии VLAN привело к тому, что стало VLAN, которой принадлежит пакет, приходится снижать мак-
возможным не только назначать отдельные подсети отдель- симальный размер передаваемого пакета (MTU) на соот-
ным портам, но и через один порт пропускать несколько ветствующем интерфейсе.
VLAN (так называемый multiVLAN). То же относится и к се- Драйвера сетевых адаптеров, поддерживающих длин-
тевым адаптерам, чем мы и воспользуемся. ные кадры, перечислены в man vlan, однако данный список
Рассмотрим настройку VLAN для FreeBSD на следую- нельзя считать исчерпывающим, поскольку с 2002 года (ког-
щем примере: пусть имеется один отрезок кабеля между да писались страницы руководства) ситуация изменилась
Catalyst и FreeBSD. На Catalyst свободен один порт, на в лучшую сторону и перечень совместимых сетевых карт
FreeBSD – одна сетевая карта, обслуживающая внешние значительно расширился. По крайней мере, D-Link DFE-
соединения. Нужно через это соединение организовать 538TX, работающий на драйвере rl, отсутствующем в спис-
передачу следующих подсетей: ке, никаких нареканий с моей стороны не вызвал. (Замеча-

24
администрирование
ние: во FreeBSD 5.3 поддержка vlan значительно расшире- Если со стороны CISCO все настроено должным обра-
на, и теперь поддержка длинных кадров драйвером rl офор- зом (собственно говоря, основное требование – номер VLAN
млена официально.) должен совпадать с тем, который назначен интерфейсу со
Пожалуй, хватит теории. Перейдем к практике. стороны FreeBSD), то после этой команды все должно ра-
Для работы VLAN в системе должны быть соответствую- ботать. Например, конфигурация интерфейса для подсети
щие псевдоустройства. В случае с FreeBSD 5.2 (думаю, это реальных адресов на CISCO у меня выглядит следующим
справедливо и для всей 5-й ветки) устройства vlan создают- образом:
ся динамически. За это отвечает модуль ядра if_vlan.ko. Если
вы предпочитаете иметь монолитное ядро, то потребуется interface FastEthernet0/0.111
encapsulation dot1Q 111
пересобрать его со следующей опцией: ip vrf forwarding Inet
ip address 111.222.0.1 255.255.255.240
device vlan no ip route-cache

Аналогично описываются остальные интерфейсы. Иден-


Для 3-й и 4-й веток FreeBSD может потребоваться пе- тификатор VLAN задается в параметре encapsulation dot1Q,
ресобрать ядро с такой строчкой: в данном случае он равен 111.
На Catalyst соответствующий порт нужно перевести в
pseudo-device vlan N trunk-режим и при желании можно указать список разре-
шенных номеров VLAN:
Вместо N нужно подставить количество устройств, ко-
торое вам понадобится. После сборки и установки нового interface FastEthernet0/24
switchport trunk allowed vlan 100,111,999
ядра в системе должны появиться соответствующие интер- switchport mode trunk
фейсы vlan0, vlan1 и т. д., просмотреть которые можно ко- no ip address
мандой:
С точки зрения остальных служб операционной систе-
ifconfig -a мы, например ipfw или natd, полученный интерфейс ничем
не отличается от физических и может использоваться как
Для FreeBSD 5.2 (в недавно вышедшей 5.3 все настра- обычно. Например, можно подсчитать трафик, проходящий
ивается точно так же) для создания vlan-интерфейсов ис- через vlan0:
пользуется «клонирование» (cloning) на этапе загрузки (об
этом – чуть ниже) либо программа ifconfig с опцией create. # ipfw add 1234 count ip from any to any via vlan0
Второй вариант выглядит следующим образом:
Остался последний штрих – настройка конфигурации
# ifconfig vlan0 для автоматического создания нужного интерфейса при пе-
ifconfig: interface vlan0 does not exist резагрузке. Для этого в файл /etc/rc.conf добавим следую-
щие строчки:
# ifconfig vlan0 create 111.222.0.5 ↵
netmask 255.255.255.240 vlan 111 vlandev rl0
# ifconfig vlan0 # Ñîçäàåì íóæíûå èíòåðôåéñû, èñïîëüçóÿ ìåõàíèçì
# êëîíèðîâàíèÿ:
vlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 cloned_interfaces="vlan0 vlan1 vlan2"
inet 111.222.0.5 netmask 0xfffffff0 broadcast 111.222.0.15
inet6 fe70::204:5cff:fedf:f81f%vlan0 prefixlen 64 scopeid 0xd # È îïèñûâàåì ñîîòâåòñòâóþùèå èíòåðôåéñû VLAN:
ether 00:05:5d:cf:f9:1e ifconfig_vlan0="inet 111.222.0.5 ↵
media: Ethernet autoselect (100baseTX <full-duplex>) netmask 255.255.255.240 vlan 111 vlandev rl0"
status: active ifconfig_vlan1="inet 10.254.0.5 ↵
vlan: 111 parent interface: rl0 netmask 255.255.255.0 vlan 100 vlandev rl0"
ifconfig_vlan2="inet 10.0.0.3 ↵
netmask 255.255.255.0 vlan 999 vlandev rl0"
Опция vlan задает номер VLAN, присвоенный этой сети.
Параметр vlandev указывает физический интерфейс, исполь- Если «пропадание» сервера на пару минут не критич-
зуемый для организации VLAN. Заметьте, что этот интерфейс но, то рекомендуется его перезагрузить, чтобы лишний раз
(в нашем случае rl0) должен иметь собственный IP-адрес, убедиться в правильности всех настроек. Бежать среди ночи
даже если реально он нигде использоваться не будет: к неудачно загрузившемуся из-за пропущенного пробела
серверу – не самое приятное занятие.
# ifconfig rl0 Нужно заметить, что технология VLAN позволяет шиф-
rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500 ровать трафик (например, ряд сетевых карт поддерживают
options=8<VLAN_MTU> аппаратное шифрование), однако во FreeBSD это не реа-
inet 10.10.10.10 netmask 0xffffff00 broadcast 10.10.10.255
inet6 fe70::204:5cff:fedf:f81f%rl0 prefixlen 64 scopeid 0x1 лизовано и поддерживается только разделение пакетов на
ether 00:05:5d:cf:f9:1e основе идентификаторов VLAN. Хотя можно ожидать, что
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
поддержка карт с аппаратным шифрованием появится в бу-
дущем. Тем не менее имеющихся в данный момент возмож-
Обратите внимание, что интерфейсы vlan наследуют ностей вполне достаточно, чтобы без особых усилий повы-
MAC-адрес «родительского» интерфейса, но поскольку сети сить эффективность использования имеющегося оборудо-
у нас разные, то ни к каким конфликтам это не приведет. вания.

№12(25), декабрь 2004 25


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

БИЛЛИНГ ДЛЯ АТС НА БАЗЕ PostgreSQL

ГЕОРГИЙ ТОЛОКОННИКОВ
В статье рассматривается содержащая около 90 строк кода ся в базу данных телефонных переговоров, поддерживае-
биллинговая система для небольших АТС, которая легко мую СУБД PostgreSQL. На основе базы данных ведется под-
может быть расширена на АТС большой номерной емкос- счет трафика, расчет оплаты и выполняются практически
ти. В качестве примера рассматривается NEAX2000 IPS. любые запросы, интересующие пользователей.
Стандартный выход АТС соединяется с портом компью- Обычный веб-интерфейс позволяет выводить на экра-
тера, приходящая от АТС информация захватывается скрип- ны (удаленных) компьютеров результаты запросов в режи-
том биллинговой системы, обрабатывается, и направляет- ме реального времени.

26
администрирование
Введение дится к тому, что обозначение внутренних номеров начина-
Биллинговая система – это комплекс программ, работаю- ется со знака *, например, *029. Такая нумерация обычно
щий на компьютере, сопряженном с АТС и позволяющий используется, чтобы можно было звонить «в город» без на-
тарифицировать телефонный трафик, выставлять счета бора «9».
абонентам, получать практически любую информацию по Соединим кабелем COM-порт компьютера с RS232
звонкам. разъемом АТС, находящимся на процессорной плате. Для
Такие системы обычно дороги. Многие пользуются Win определенности используем нулевой порт – как правило, в
Tarif (как правило, взломанной версией…). Можно также по- компьютере два COM-порта: нулевой и первый.
смотреть сайт www.billonline.ru со всеобъемлющим серти- Обычно тарификация проводится для исходящих вызо-
фицированным Министерством связи решением проблем вов, поэтому здесь мы не будем рассматривать другие звон-
(за деньги) учета телефонных переговоров. ки.
Наш подход, однако, – демонстрация философии UNIX Введем следующую команду для прослушивания пор-
в действии – позволяет обеспечить простое, бесплатное, та, на который поступает информация от АТС (для Linux
открытое решение. Состоит оно из нескольких десятков порт будет называться не dev/cuaa0, а, cкорее всего, /dev/
строк кода и опирается на типовые утилиты UNIX. Слож- ttyS0):
ность кода минимальная, достаточно, например, владения
азами SQL и Perl. Обычно оператор связи, предоставив- # cat /dev/cuaa0 >> file
ший телефоны, выставляет счет раз в месяц, а тарифика-
цию по внутренним номерам офисной АТС либо вообще от- получим при каждом исходящем вызове добавку к содер-
казывается делать, либо требует дополнительной оплаты. жимому файла file:
Платное программное обеспечение имеет закрытый код и
^B0!KA050077001*029 08110737260811073756
не ясно, что и как оно считает, заменить в нем что-нибудь
000050050100 0000 04040
на более подходящий вариант невозможно. Таким образом,
наличие подобного предлагаемого в статье простого реше- (с учетом пробелов для каждой записи получаем 128 бай-
ния полезно для работы организации. тов, по байту на каждый символ).
В настоящее время в небольших фирмах – операторах Приведенный пример содержит информацию о том, что
связи или в офисах крупных (и не очень) компаний наряду с номера *029, 11 августа с 7 час. 37 мин. 26 сек до 37 мин.
в ЛВС имеется АТС, часто попадающая на обслуживание 56 сек. абонент звонил на номер 100 (служба «время» в
системному администратору. Так что затронутые в статье МГТС).
вопросы многим окажутся интересны. При разборке файла с помощью Perl в качестве при-
План действий по автоматизации тарификации АТС сле- знака конца записи для отдельных вызовов можно принять
дующий: восклицательный знак «!».
! смотрим, что и в каком формате выводит АТС на порт, Воспользовавшись вызовом sysread(fd, $v, length), где
сопрягаемый с компьютером (часто это com-порт); fd – дескриптор файла $v – переменная, в которую пишет-
! пишем скрипт, разбирающий должным образом полу- ся информация, length – количество считывающихся бай-
чаемый поток байтов с АТС; тов за один вызов, можно установить, что АТС выдает всю
! заводим в СУБД (PostgreSQL) необходимые таблицы; запись по вызову отдельными порциями наборов символов,
! добавляем к скрипту блоки захвата вывода с АТС и заг- указанных в примере, разделенными пробелами. В АТС
рузки обработанных скриптом записей в СУБД; имеется буфер (довольно приличный по размеру), в кото-
! формируем скрипт сопряжения базы данных с веб-сер- ром хранятся данные по вызовам, так что при соединении
вером для возможности просмотра данных и запросов с компьютером все предыдущие вызовы «скачиваются» в
абонентами и руководством. компьютер.
Код будущей программы состоит из двух блоков:
Собственно и все. За пару дней это можно сделать и ! блок считывания и обработки (считывает из порта ин-
запустить в эксплуатацию. Например, на следующем комп- формацию, поступающую из АТС);
лексе: Pentium-200 MMX, 256 Мб ОЗУ, FreeBSD версии 4.5 ! блок загрузки записей в базу данных.
и выше с Perl5, PostgreSQL 7 довольно быстро обрабаты-
вается до 100 тыс. записей звонков. Это около 100-150 но- Перед рассмотрением приведенного ниже кода скрип-
меров абонентов, звонящих с интенсивностью выше сред- та подчеркнем следующее.
ней в течение месяца. На Pentium 4 можно легко обрабаты- Наша цель – показать, что создать собственную систе-
вать уже миллионы записей. му биллинга совсем несложно. У каждого системного ад-
Все вышеприведенное будет легко работать и под лю- министратора есть свои излюбленные приемы в Perl, кото-
бым другим UNIX. рые он при необходимости использует, приспособив под-
ходящим образом приведенный скрипт или написав свой
Тестирование формата вывода АТС собственный. Поэтому мы для краткости оставили лишь ти-
и алгоритм программы повую обработку ошибок, не стремимся усложнять код для
Сначала надо изучить выходные сигналы АТС. Мы рассмат- обеспечения его безопасности, оптимальности или кратко-
риваем NEAX2000 IPS с настройками, практически не от- сти. Отметим только, что приведенный код неплохо рабо-
личающимися от стандартных. В нашем случае отличие сво- тал у нас на стареньком отдельно стоящем компьютере:

№12(25), декабрь 2004 27


администрирование
процессы внутри АТС относительно медленные и Perl успе- sub duration {
вает делать все вовремя и без ухищрений. my $a=substr($ccc, 6, 10);
my $b=substr($ccc, 16, 10);
Отлаженный вариант биллинговой системы с учетом my @aa=split //, $a;
кода для вывода данных с помощью PHP на Apache-сервер my @bb=split //, $b;
достаточно длинный для размещения в тексте, поэтому пре- my $aaa=(($aa[2]*10)+$aa[3])*24*60*60+($aa[4]*10+ ↵
доставлен автором всем желающим (www.samag.ru/source). $aa[5])*60*60+($aa[6]*10+$aa[7])*60+$aa[8]*10+$aa[9];
my $bbb=(($bb[2]*10)+$bb[3])*24*60*60+($bb[4]*10+ ↵
$bb[5])*60*60+($bb[6]*10+$bb[7])*60+$bb[8]*10+$bb[9];
Реализация программы my $r=$bbb-$aaa;
my $cc1=$r%60;
Для реализации программы с помощью системы портов my $cc11=($r-$cc1)/60;
FreeBSD помимо PostgreSQL необходимо для работы ин- my $cc2=$cc11%60;
my $cc21=($cc11-$cc2)/60;
терфейса Perl к PostgreSQL установить модули Perl – DBI, my $cc3=$cc21%24;
DBD-Pg. my $z=" h$cc3 m$cc2 s$cc1 ";
}
Запустив PostgreSQL, создадим таблицу atstarif базы
данных ats: foreach $ss (@s)
{
$ss =~ s/.*\*/\*/g;
# create table atstarif (nums varchar(15), mydate date, ↵ $ss =~ s/\b0000 .*//g;
mytime time, min int, numd bigint); $ss =~ s/\b0000600606//g;
$ss =~ s/\b000050050//g;
Таким образом, строки в ней будут содержать поля: $ccc=$ss;
my $z=substr($ss, 16, 10);
! Номер, инициировавший соединение.
! Дата и время начала разговора. # òåïåðü ïðèìåíèì ïîäïðîãðàììó ïîäñ÷åòà âðåìåíè
# ê ïåðåìåííîé $ccc;
! Длительность звонка в минутах разговора.
! Номер, на который шел вызов. my $res=&duration;
$ss=~ s/$z/$res/g;
$ss=~ s/h//g;
Программа биллинга на Perl может иметь следующий $ss=~ s/m//g;
$ss=~ s/s//g;
вид (некоторые комментарии даны в самом коде).
my @f= split (/\s+/, $ss);
if ($f[4]) {
#!/usr/bin/perl $f[4] = 1;
use POSIX qw(:errno_h); }
use DBI; my $z = $f[2]*60 + $f[3] + $f[4];
use strict; my @g = split (//, $f[1]);
my $user="pgsql"; if ($g[4]==0) {
my $dbname="ats"; $g[4]="";
my $dsh; }
my $dbh; my @gg = ($g[2].$g[3], '.', $g[0].$g[1], '.', ↵
my $p; '04', " ", $g[4].$g[5], ':', $g[6].$g[7]);
my $pid; $f[1]= join ("", @gg);
$SIG{ALRM}= 'proga'; my @ff = ($f[0], $f[1], $z, $f[5]);
$ss = join (" ", @ff);
sub proga { if ($ss=~ /\*\d\d\d \d\d\.\d\d\.\d\d \d+:\d+ \d+ \d+/) {
kill 9 => $pid;
kill 9 => $p; # ñòðîêà ñôîðìèðîâàíà äëÿ çàïèñè â áàçó äàííûõ
}
$g= $ss;
# ïðîãðàììà ðàáîòàåò â áåñêîíå÷íîì öèêëå, ïåðèîäè÷åñêè
# (ðàç â äâå ìèíóòû) ïîäêëþ÷àÿñü ê ïîðòó, íà êîòîðûé # òåïåðü ñòðîêó $g ïðèâåäåì ê íåîáõîäèìîìó ôîðìàòó
# ÀÒÑ ïîñûëàåò äàííûå î çâîíêàõ # è çàãðóçèì â áàçó äàííûõ
while(1) chomp($g);
{ my @gg=split / /, $g;
$dsh="dbi:Pg:dbname=$dbname;port=5432"; my @ggg=split /\./, $gg[1];
$dbh=DBI->connect("$dsh", "$user") or die ↵ $gg[1]=join "-", "20$ggg[2]", $ggg[1], $ggg[0];
"can't connect: $!\n"; my @dt;
$pid=open (ATS, "cu -l/dev/cuaa1 -s9600|"); $dt[0]=$dbh->quote("$gg[0]");
$p=($pid)+1; $dt[1]=$dbh->quote("$gg[1]");
$dt[2]=$dbh->quote("$gg[2]");
# ïðîãðàììà ïîäêëþ÷èëàñü ê áàçå äàííûõ è íà÷àëà ñ÷èòûâàòü $dt[3]=$dbh->quote("$gg[3]");
# äàííûå îò ÀÒÑ $dt[4]=$dbh->quote("$gg[4]");
my $tbl="atstarif ";
eval { alarm(60); }; $dbh->do("insert into $tbl (nums, mydate, mytime, min, numd)
my @str = <ATS>; values ($dt[0], $dt[1], $dt[2], $dt[3], $dt[4])");
my $sstr; }
my $ccc; }
my $ss; }
my $g; }
$dbh->disconnect();
# â ýòîì öèêëå íà÷èíàåòñÿ îáðàáîòêà ïîñòóïàþùèõ ñòðîê îò ÀÒÑ close ATS;
sleep(60);
foreach $sstr (@str) { }
if ($sstr=~ /!/)
{
my @s= split /!/, $sstr; Программу можно запустить в фоновом режиме, обыч-
ным образом обеспечить ее запуск при перезагрузке ком-
# ïîäñ÷åò âðåìåíè çâîíêà óäîáíî âûäåëèòü â îòäåëüíóþ
# ïîäïðîãðàììó пьютера, организовать ее использование по усмотрению
системного администратора.

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

ПАКЕТНЫЙ ФИЛЬТР OpenBSD


ЧАСТЬ 2

ДЕНИС НАЗАРОВ
Вот и вышел очередной новогодний выпуск этого замеча- ные транзакции. Пограничным хостом (firewall) была дав-
тельного журнала из печати, на улице холодно, а мы будем ненько установленная нами, в то время еще OpenBSD 3.1-
сидеть в тепле, пить горячий кофе и с удовольствием по- stable, с PF в качестве пакетного фильтра. При осмотре
знавать то, что несет нам этот номер. Linux-сервера сразу стало понятно, что его атаковали, и не
В прошлой статье1 я рассказал об основных возможно- раз, я нашел огромное количество различных exploits на
стях пакетного фильтра операционной системы OpenBSD сервере и несколько скриптов, которые в тот момент дер-
и почему так важно использование фильтров. Недавно нам жали открытыми порты с shell, запущенными от прав www-
поступило тревожное сообщение от одной из организаций сервера. После проверки сервера различными методами я
о том, что их сервер «барахлит», мне пришлось ехать и про- пришел к выводу, что злоумышленникам так и не удалось
верять, но я и не подозревал, насколько всё серьёзно! Сеть ни похитить данные, ни проникнуть на сервер. Мне стало
организации была спроектирована довольно хорошо, од- интересно, как же данные со взломанного сервера (сервер
нако единственным слабым местом был Linux-сервер, на действительно считался взломанным по нашим критериям)
котором крутились Java-сервлеты и обслуживали денеж- так и не ушли в чужие руки.

1
Назаров Д. Пакетный фильтр OpenBSD. – Журнал «Системный администратор», №11, ноябрь 2004 г.

30
администрирование
Так как сервер останавливать было нельзя, пришлось Пакеты в очереди с наибольшим приоритетом будут об-
вживую искать все ниточки. Все свелось к одному – на сер- работаны первыми.
вере с OpenBSD, посмотрев лог-файлы пакетного фильт- ! HFSC (Hierarchical Fair Service Curve) – описание очень
ра, сразу стало ясно, что любые попытки добраться к тем схоже с CBQ за исключением некоторых дополнений.
shell на Linux-сервере оканчивались провалом, ибо фильт- HFSC есть не что иное как «исправленный» механизм,
рация была настолько четкой, что помимо входящих соеди- базирующийся на модели QoS. Его уникальность состо-
нений контролировались и все исходящие. Дальнейшее ис- ит в возможности разъединять связь между задержкой
следование показало все места, откуда были произведены пакета и очередью. То есть HFSC обрабатывает очере-
атаки, и подтвердило их безуспешность. Сейчас в той орга- ди и пакеты отдельно друг от друга, однако после про-
низации стоит новый мощный сервер под управлением Sun цесса обработки пакет и очередь опять логически свя-
Solaris 10 и теперь уже OpenBSD 3.6-stable. К чему вся эта зываются. В некоторых ситуациях это позволяет добить-
история? Показать на конкретном примере, как важно ис- ся максимальной производительности от трафик-шей-
пользование пакетных фильтров и как они могут защитить пера. Очень часто это используется для сервисов, ра-
заведомо опасные приложения. ботающих в режиме реального времени.
Итак, приступим к продолжению нашей статьи, я рас-
скажу вам о следующих вещах: Активизировать возможность распределения по очере-
! Распределение по очередям (Queuing). дям нужно в конфигурационном файле вашего фильтра (по
! Роутинг (маршрутизация). умолчанию /etc/pf.conf) при помощи директивы «altq on»,
которая имеет свои дополнительные параметры:
Распределение по очередям (Queuing) ! <interface> – имя интерфейса, для которого мы включа-
Любые пакеты могут быть разделены по очередям для кон- ем данную возможность, если не определено, то очере-
троля полосы пропускания. Зачем это надо? Распределять ди будут активированы для всех интерфейсов.
нагрузку на канал равномерно для всей сети, например, или ! <scheduler> – планировщик, в данный момент PF под-
же, наоборот, урезать трафик для определенного сервиса держивает cbq, priq, hfsc.
или IP-адреса. Для определения «очереди» (queue) нужны ! bandwidth <value> – максимальный битрейт для всех оче-
всего лишь две декларации, и в дальнейшем все пакеты редей на данном интерфейсе. Значение может быть оп-
можно будет распределять по очередям, используя «имя ределено как процент от общей пропускной способнос-
очереди». Согласно компоненту фильтрации пакетного ти интерфейса, так и числовой величиной. Для этого
фильтра (PF), для правила pass данный пакет будет поме- могут использоваться слова b, Kb, Mb, Gb. Что соответ-
щен в очередь, на которую ссылалось последнее(!) прави- ственно – биты, килобиты, мегабиты, гигабиты. Если
ло. Немножко запутанно? значение bandwidth не задано, то будет использована
Поясню на примере: максимальная скорость.
! qlimit <value> – количество пакетов, которое может об-
pass in on $ext_if inet proto tcp from any to ↵ служивать очередь, по умолчанию 50, это значение от-
any port 80 keep state queue www-1
pass in on $ext_if inet proto tcp from any to ↵ лично подходит для 100-мегабтиных сетей.
any port 80 keep state queue www-2 ! queue <list> – определяет список очередей, которые бу-
дут созданы для данного интерфейса.
Здесь будет применено последнее правило, т.е пакет бу-
дет присвоен очереди с именем «www-2». В этом примере интерфейс dc0 будет распределять в
Очередями управляют «планировщики». На данный мо- очереди 5Mbit/s, используя CBQ.
мент PF поддерживает 3 типа «планировщиков»:
! CBQ (Class Based Queueing) – очереди, прикрепленные altq on dc0 cbq bandwidth 5Mb queue { std, http, mail, ssh }
к интерфейсу, создают «дерево», в котором каждая из
этих очередей может иметь своих «потомков». Очере- После включения altq мы можем создавать очереди-по-
ди имеют приоритет и полосу пропускания. Приоритет томки. Для них используются те же дополнительные пара-
определяет, через какую очередь пакет пройдет первым, метры, что и для директивы altq, за исключением <scheduler>
а полоса пропускания уже непосредственно влияет на и queue, т.к они уже определены. Имя родительской очере-
скорость прохождения. CBQ выполняет двухсторонее ди должно совпадать с определением в altq.
разделение полосы пропускания вашего канала, исполь- Например:
зуя иерархически-структурированные классы. Каждый
класс имеет свою собственную «очередь» и присвоен- queue std bandwidth 10% cbq(default)
ную ей способность пропускания. Класс-потомок может
заимствовать у родительского класса только(!) ту про- Для <scheduler> есть список параметров, которые по-
пускную способность, которая в данный момент доступ- могают контролировать работу очереди.
на для него. ! default – попадая в эту очередь, пакет не проверяется
! PRIQ (Priority Queueing) – очереди просто присоедине- дальше, а тут же обрабатывается.
ны к интерфейсу и не могут иметь очередей-потомков. ! red – Random Early Detection – RED отбрасывает паке-
Каждая такая очередь имеет свой уникальный «приори- ты, которые, предположительно могут перегрузить оче-
тет», который может принимать значения от 0 до 15. редь.

№12(25), декабрь 2004 31


администрирование
! ecn – Explicit Congestion Notification – практически то же any port 22 keep state queue(ssh_bulk, ssh_interactive)
самое, что и RED. Отличается лишь алгоритмом обра- pass out on dc0 inet proto tcp from any to ↵
any port 25 keep state queue mail
ботки очередей, в итоге результат тот же, что и при ис-
пользовании RED. RED использует более оптимизиро- Итак, очередь std будет забирать 10% от нашего 5Mbit/s
ванный алгоритм, и за его счет обработка очередей про- канала.
исходит гораздо быстрее. Очередь http будет забирать 60% и иметь двух потом-
ков employees и developers с механизмом определения
Для CBQ предусмотрены дополнительные параметры. преждевременной нагрузки RED и возможностью «заим-
! borrow – очередь-потомок может «заимствовать» сво- ствования» полосы пропускания у родителя. У очереди http
бодную пропускную способность у родительской очере- приоритет равен 2, что в данной конфигурации является
ди в случае необходимости. наивысшим приоритетом (т.к значения больше, чем «2» не
определены). Значит, данная очередь будет обрабатывать
Теперь параметры для HFSC. пакеты первой. Для очередей-потомков установлены ско-
! realtime <sc> – минимальная доступная пропускная спо- рости в процентном отношении соответственно 75% и 15%.
собность для очереди. Важно понимать, что вычисляться эти проценты будут из
! upperlimit <sc> – максимальная доступная очереди про- того куска общей пропускной способности канала, который
пускная способность. отдан родительской очереди.
! <sc> – список так называемых service curve (для realtime Очередь mail определена как 10% от общей полосы про-
задач), которые имеют формат (m1, d, m2), работают пускания и имеет низший приоритет (0), чем другие.
они по принципу «для первых d мили-секунд выдавать Очередь ssh делится на ssh_interactive и ssh_bulk, име-
пропускную способность m1, после этого m2». ющие приоритеты 7 и 0. Как только появляется пакет с пор-
том назначения 22 и его помещают в очередь ssh_bulk. Пос-
Синтаксис определения очередей CBQ и HFSC одина- ле того как соединение считается установленным, пакет пе-
ков, разница лишь в дополнительных параметрах (см. вы- реходит в очередь ssh_interactive и имеет наивысший
ше). Однако стоит помнить, что скорость пропускания для приоритет для родительской очереди. А зачем так сложно?
очередей-потомков не может быть больше той, что опреде- Стоит помнить, что «контроль состояний» (stateful in-
лена для родительской очереди. spection) применяется не только для фильтрации, но и для
Дополнительный параметр для определения очередей – контроля полосы пропускания, а это означает, что даже при
priority <level> – указывает приоритет очереди. Для CBQ и огромных правилах фильтров и различных ограничений ско-
HFSC значения могут быть от 0 до 7, для PRIQ – от 0 до 15. рости ваш сервер не будет иметь проблем с загрузкой про-
Значение по умолчанию для всех очередей 1. цессора.
Присвоение пакетов очередям происходит при помощи
ключевого слова queue в правилах фильтрации(!). В нор- Роутинг (маршрутизация)
мальном режиме указать можно только одну очередь, од- Тут все просто и мощно. Управлять пакетом нам позволяют
нако, если же указана вторая, то пакеты будут обрабаты- те же правила фильтрации, однако с добавлением одной
ваться на основе TOS (Type Of Service). из нижеперечисленных опций. Помните – когда создается
Что ж, теперь давайте посмотрим, как все это выглядит «состояние» (state), все пакеты для данного правила филь-
на практике, ибо в теории мало что понятно. трации и роутинга попадают под него.
Включаем очереди: ! fastroute – обычный режим, система обрабатывает па-
кет обычным образом.
altq on dc0 cbq bandwidth 5Mb queue { std, http, mail, ssh } ! route-to – система направляет пакет на нужный интер-
фейс с возможностью указания IP для «следующего
Определяем родительские очереди и очереди-потом- хоста». Надо помнить, что помимо route-to нужно создать
ки. правила, позволяющие направлять пакет с одного ин-
терфейса на другой в правилах фильтрации, иначе все
queue std bandwidth 10% cbq(default) ваши пакеты будут зарезаны фильтром.
queue http bandwidth 60% priority 2 cbq(borrow red) ↵
{ employees, developers } ! reply-to – на сей раз система отвечает пакетом с ука-
queue developers bandwidth 75% cbq(borrow) занным IP-адресом и интерфейсом.
queue employees bandwidth 15%
queue mail bandwidth 10% priority 0 cbq(borrow ecn) ! dup-to – создает дубликат пакета и отправляет его с по-
queue ssh bandwidth 20% cbq(borrow) ↵ мощью route-to. Настоящий пакет обрабатывается обыч-
{ ssh_interactive, ssh_bulk }
queue ssh_interactive priority 7 ным способом. Dup-to полезно использовать для обна-
queue ssh_bulk priority 0 ружения конфликтов в сети, когда рабочий сервер тро-
гать нельзя, а трафик, проходящий через него, нужно
И назначаем правила: анализировать.

block return out on dc0 inet all queue std Комбинируя правила фильтрации и опции роутинга,
pass out on dc0 inet proto tcp from $developerhosts to ↵
any port 80 keep state queue developers можно добиться очень сложных схем маршрутизации, но
pass out on dc0 inet proto tcp from $employeehosts to ↵ для таких целей придумали Cisco routers. А это уже совсем
any port 80 keep state queue employees
pass out on dc0 inet proto tcp from any to ↵ другая история.

32
bugtraq

Повышение привилегий Переполнение буфера


в Symantec Windows LiveUpdate в Microsoft Windows NT DHCP
Программа: Norton AntiVirus 2001, Norton AntiVirus 2002, Программа: Microsoft Windows NT.
Norton Internet Security 2001, Norton Internet Security 2002, Опасность: Средняя.
Norton Internet Security 2003, Norton Internet Security 2003 Описание: Обнаружено несколько уязвимостей в DHCP-
Professional, Norton Internet Security 2004, Norton Internet службе в Microsoft Windows NT. Удаленный атакующий мо-
Security 2004 Professional, Norton SystemWorks 2001, Norton жет вызвать отказ в обслуживании и скомпрометировать
SystemWorks 2002, Norton SystemWorks 2003, Norton уязвимую систему.
SystemWorks 2004, Symantec AntiVirus for Handhelds 3.x, 1. Уязвимость существует из-за некорректной проверки
Symantec Norton AntiVirus 2003, Symantec Norton AntiVirus длины буфера при логировании некоторых значений оп-
2004, Symantec Windows LiveUpdate 1.x, Symantec Windows ределенных пакетов. Удаленный атакующий может спе-
LiveUpdate 2.x. циальным образом сформировать DHCP-пакет и выз-
Опасность: Средняя. вать отказ в обслуживании.
Описание: Обнаружена уязвимость в Symantec Windows 2. Уязвимость существует из-за некорректной проверки бу-
LiveUpdate. Локальный атакующий может повысить свои фера при обработке DHCP-сообщений. Удаленный ата-
привилегии на системе. кующий может послать специально сформированное
Уязвимость существует из-за того, что Symantec Automatic DHCP-сообщение, вызвать переполнение буфера и вы-
LiveUpdate позволяет управлять некоторыми интернет-оп- полнить произвольный код на уязвимой системе.
циями с системными привилегиями. Локальный атакующий URL производителя: www.microsoft.com.
может использовать эту уязвимость во время сессии Решение: Установите обновления:
LiveUpdate посредством графического интерфейса при за- 1. Microsoft Windows NT Server 4.0 (requires Service Pack
пущенной задаче «NetDetect». 6a): http://www.microsoft.com/downloa...F82D-F2A2-49AA-
URL производителя: www.symantec.com. BF33-897498898EAD.
Решение: Установите обновления с сайта производителя. 2. Microsoft Windows NT Server 4.0 Terminal Server Edition
(requires Service Pack 6): http://www.microsoft.com/
Переполнение буфера в WINS downloa...259F-3004-462C-B2A8-37F65EB78A2D.
Программа: Microsoft Windows 2000 Advanced Server,
Microsoft Windows 2000 Datacenter Server, Microsoft Windows Выполнение произвольных FTP-команд
2000 Server, Microsoft Windows NT 4.0 Server, Microsoft в Microsoft Internet Explorer
Windows NT 4.0 Server, Terminal Server Edition, Microsoft Программа: Microsoft Internet Explorer 6.
Windows Server 2003 Datacenter Edition, Microsoft Windows Опасность: Низкая.
Server 2003 Enterprise Edition, Microsoft Windows Server 2003 Описание: Обнаружена уязвимость в Microsoft Internet
Standard Edition, Microsoft Windows Server 2003 Web Edition. Explorer при обработке FTP-ссылок. Удаленный атакующий
Опасность: Высокая. может выполнить произвольную FTP-команду на уязвимой
Описание: Обнаружено переполнение буфера в службе системе.
WINS. Удаленный атакующий может выполнить произволь- Удаленный атакующий может создать специально сфор-
ный код на уязвимой системе. мированный FTP URL, который выполнит произвольную
Уязвимость существует из-за некорректной проверки дли- FTP-команду на определенном FTP-сервере. Команда
ны буфера при обработке параметра Name в определенных вставляется в URL и разделяется символами «%0a». При-
пакетах. Удаленный атакующий может с помощью специ- мер:
ально сформированного пакета вызвать переполнение бу-
фера и выполнить произвольный код на уязвимой системе. ftp://ftpuser:ftppass@server/directory%0asomecommand%0a
URL производителя: www.microsoft.com. URL производителя: www.microsoft.com.
Решение: Установите обновления с сайта производителя. Решение: Решения не существует на данный момент.

Выполнение произвольного кода Повышение привилегий в ядре Linux


в Cyrus IMAP Server Программа: Linux kernel версии до 2.4.23.
Программа: Cyrus IMAP Server 2.2.9 и более ранние версии. Опасность: Низкая.
Опасность: Средняя. Описание: Уязвимость обнаружена в ядре Linux на плат-
Описание: Обнаружена уязвимость в Cyrus IMAP Server. формах AMD64 и Intel EM64T. Локальный атакующий мо-
Удаленный атакующий может выполнить произвольный код жет повысить свои привилегии на системе.
на уязвимой системе. Уязвимость обнаружена в функции Уязвимость существует при установке TSS-лимитов. Ло-
mysasl_canon_user(). Удаленный атакующий может вызвать кальный атакующий может вызвать отказ в обслуживании
переполнение буфера и выполнит произвольный код на или выполнить произвольный код на уязвимой системе.
системе с привилегиями IMAP-процесса. URL производителя: www.kernel.org.
URL производителя: asg.web.cmu.edu/cyrus. Решение: Установите обновление от производителя.
Решение: Установите обновление: ftp://ftp.andrew.cmu.edu/
pub/cyrus-mail. Составил Александр Антипов

№12(25), декабрь 2004 33


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

НАСТОЯЩИЙ UNIX
В НАШИ ДНИ
АЛЕКСАНДР БАЙРАК
В этой статье я рассмотрю один из вариантов запуска на- Если процесс компиляции прошел гладко, приступаем
стоящего UNIX на современных компьютерах. непосредственно к запуску:
Я думаю, любой юниксоид хотя бы один раз читал исто-
рию возникновения UNIX, как он развивался и какие мета- # BIN/pdp11
морфозы пережил, чтобы дойти до нас в виде множества
своих «детей». Глядя на генеалогическое древо UNIX, диву На экране появится приглашение программы.
даешься, какое большое количество ответвлений и версий
системы было выпущено в прошлом. Некоторые уже давно // Óêàçûâàåì, êàêîé òèï ïðîöåññîðà ìû áóäåì ýìóëèðîâàòü:
sim> set cpu 18
умерли, иные просто в спячке, но большинство из них вы- // u18 ñîîòâåòñòâóåò ïðîöåññîðó, óñòàíîâëåííîìó
росли и дожили до наших дней. Ну как тут не загореться // íà êëàññè÷åñêîé pdp 11/45.
// Óêàçûâàåì, ÷òî áóäåì èñïîëüçîâàòü êîíñîëüíûé òåðìèíàë
желанием посмотреть на тот самый настоящий, легендар- // DL11. Âûâîä èíôîðìàöèè áóäåò ïðîèçâîäèòüñÿ â ðåæèìå
ный AT&T UNIX, с которого все и началось? Конечно, в наши // 7 áèò íà ñèìâîë.
sim> set tto 7b
дни достаточно затруднительно найти PDP11 и родной ди- // Óêàçûâàåì, ÷òî ââîä áóäåò òàêæå èñêëþ÷èòåëüíî 7-áèòíûé.
стрибутив. Так что единственной возможностью погрузиться sim> set tti 7b
// Ïðèñîåäèíÿåì äàìï äèñêà ñ UNIX ê rl.  êà÷åñòâå rl
во времена использования настоящего UNIX на PDP11 нам // âûñòóïàåò êîíòðîëëåð äèñêà RLV12/RL01.
помогут эмуляторы. Точнее, один из них – simh (Simulator sim> attach rl unix_v7_rl.dsk
// Óêàçûâàåì, îòêóäà ïðîèçâîäèòü çàãðóçêó:
History). Начало данному проекту было положено в 1993 sim> boot rl
году. Главный разработчик проекта – Robert M Supnik. В
настоящее время simh можно запустить почти на всех со- Начинается загрузка:
временных ОС, а именно:
! OpenVMS/VAX ! Tru64 @boot
New Boot, known devices are hp ht rk rl rp tm vt
! OpenVMS/Alpha ! Solaris
! Windows 9x/2k/XP ! HP-UX Указываем, что именно запускать:
! MacOS X ! *BSD
! Linux ! OS/2 : rl(0,0)rl2unix

Классический pdp 11/45 был выпущен в 1970 году. Из Более подробно обо всех опциях, использованных выше,
pdp-серии это был единственный 16-битный компьютер. можно прочитать в документации, поставляемой вместе с
Хотя были и 24- и 18-битные машины. При рекордно низкой программой.
цене (~ 10800$) pdp 11 получил широчайшее распростра- Далее нам показывают объем доступной памяти, он
нение. Всего было продано около 600000 (!) экземпляров. равен целым 177 856 байтам! После чего мы попадаем в
Некоторые из них работают и по сей день. shell. В принципе можно начинать работу с настоящим UNIX
Все свои эксперименты я проводил на P3-550 МГц/ 7-ой версии. По умолчанию мы попадаем в систему с пра-
320 Мб RAM под управлением FreeBSD 5.3. вами root. В документации к эмулятору в качестве примера
Для начала нашего путешествия во времени нам нужен работы были приведены следующие действия:
дистрибутив, который можно взять с http://simh.trailing-
edge.com/sources/simhv33-0.zip. // Ñîçäàäèì êàòàëîã dmr
# mkdir /usr/dmr
Также понадобится дамп диска с установленным UNIX. // Ñäåëàåì âëàäåëüöåì êàòàëîãà dmr ïîëüçîâàòåëÿ dmr
Его мы берем с http://simh.trailing-edge.com/kits/uv7swve.zip. # chown dmr /usr/dmr
// Èçìåíèì ãðóïïó âëàäåíèÿ êàòàëîãà íà òðåòüþ
Распакуем и установим программу: # chgrp 3 /usr/dmr
// Ñîçäàäèì êàòàëîã äëÿ âðåìåííûõ ôàéëîâ
# mkdir unixemul # mkdir /tmp
# cd unixemul // Ïîñòàâèì äëÿ íåãî ïîëíûé äîñòóï äëÿ âñåõ
# chmod 777 /tmp
# unzip ../simhv33-0.zip // Íàæèìàåì <Ctrl+D>
# unzip ../uv7swve.zip
# mkdir BIN # ^D
# gmake
После чего на экране появляется приглашение к вводу
Симулятор помещает все свои исполняемые файлы в логина.
каталог BIN. Но так как по умолчанию он не существует,
создаем его: Restricted rights: Use, duplication, or disclosure is subject to restrictions
stated in your contract with Western Electric Company, Inc.
Thu Sep 22 05:51:05 EDT 1988
# mkdir BIN
# gmake
Идем дальше.

34
администрирование
// Ââîäèì ëîãèí dmr: на указанном порту, мы можем с помощью команд netstat -
login: dmr na или sockstat -4.
// Ñ ïîìîùüþ ðåäàêòîðà ed íà÷èíàåì ðåäàêòèðîâàòü ôàéë hello.c:
$ ed hello.c Работать по сети мы сможем после ввода на локальной
?hello.c
машине параметров, указывающих, откуда нам запускать
a ОС. В нашем случае это boot rl. После вывода которой мы
main() видим на экране:
{
printf(«Hello World!\n»);
} Waiting for console Telnet connection.
.
w После чего мы можем получить доступ к эмулятору че-
40 рез telnet. Пример сессии:
q
// Ñêîìïèëèðóåì íàïèñàííûé íàìè ôàéë: [01mer@darkthrone]:~> telnet marduk 12345
$ cc hello.c Trying 192.168.1.22
// Çàïóñòèì: Connected to marduk
$ a.out Escape charset is ‘^]’
Connected to PDP11 simulator
Видим результат: @

Hello World!
Я не буду описывать здесь все свои эксперименты ко-
Кстати, вы еще не догадались, кому принадлежит имя торые проводил в UNIX, чтобы не лишать читателя удоволь-
пользователя dmr? Человеку – живой легенде современ- ствия самому заняться исследованием этой ОС. А море
ности – Деннису Ритчи, отцу и основоположнику Юникса! различных открытий и удивительных находок я вам обещаю.
Согласитесь, что очень неудобно при каждом запуске Для корректного завершения работы с UNIX надо два
ОС каждый раз вводить все команды инициализации. Тут раза произвести синхронизацию диска с помощью коман-
нам на помощь приходят команды save и restore. Для «со- ды sync. После чего нажать <Ctrl+E>, и вы снова попадете
хранения» ввода команд, необходимых для запуска ОС, нам в оболочку эмулятора. Выход из которой осуществляется с
нужно набрать команду: помощью команд exit, quit, bye, на выбор.
В конце хотел бы добавить, что рассмотренный эмуля-
sim> save filename тор кроме PDP11 поддерживает еще достаточно большое
количество различных компьютеров:
В качестве filename введите имя файла, в который вы ! Data General Nova, Eclipse
хотите сохранить текущий образ эмулятора. ! Digital Equipment Corporation PDP-1, PDP-4, PDP-7, PDP-8,
Для «восстановления» состояния набираем: PDP-9, PDP-10, PDP-11, PDP-15, VAX
! GRI Corporation GRI-909
sim> restore filename ! IBM 1401, 1620, 1130, System 3
! Interdata (Perkin-Elmer) 16b and 32b systems
После чего будут актуальны ранее введенные и сохра- ! Hewlett-Packard 2116, 2100, 21MX
ненные настройки. ! Honeywell H316/H516
Также следует отметить одну очень досадную недора- ! MITS Altair 8800, with both 8080 and Z80
ботку по части удобства использования. В оболочке эмуля- ! Royal-Mcbee LGP-30, LGP-21
тора нет возможности редактировать вводимые команды. ! Scientific Data Systems SDS 940
Про возможность автодополнения команд я вообще
молчу. Хотя должен заметить, можно использовать зара- Соответственно, если мы найдем ОС для данных компь-
нее определенные алиасы. Например, для команды attach ютеров и приложим немного смекалки и настойчивости, по-
синонимом будет команда at. Более подробно про алиасы лучим в собственное распоряжение целый полигон для изу-
можно прочитать в документации. чения истории компьютеров и ОС. Особый интерес (по край-
Simh поддерживает работу через сеть. Например, у вас ней мере для меня) представляет эмуляция VAX. Особенно
нет возможности работать с ОС, запущенной через эмуля- при учете того, что на VAX можно запустить OpenBSD,
тор, находясь непосредственно перед монитором компью- NetBSD, и другие менее известные в настоящее время ОС.
тера, на котором включен simh. Или вы хотите дать воз- Но этому вопросу я намерен посвятить отдельную статью.
можность своим знакомым или друзьям поэксперименти- Я был бы очень рад всем вашим отзывам c описанием
ровать на запущенной через эмулятор ОС. экспериментов, поставленных с помощью этого эмулятора.
Воспользуемся опцией, определяющей консоль:
Ссылки:
sim> set console telnet=12345 1. http://simh.trailing-edge.com/software.html – небольшая
коллекция программ и ОС, подходящих для использо-
Назначаем доступ к консоли через порт 12345. вания под эмулятором simh.
На что эмулятор ответит: 2. http://simh.trailing-edge.com/photos.html – фотогалерея
различных старых компьютеров.
Listening on port 12345.
3. http://www.cs.bell-labs.com/who/dmr – домашняя странич-
Проверить, действительно ли нас ожидает соединение ка Денниса Ритчи.

№12(25), декабрь 2004 35


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

АВТОМАТИЗИРУЕМ FTP С ПОМОЩЬЮ PYTHON

СЕРГЕЙ СУПРУНОВ
Любой системный администратор, если он в меру ленив, абонентов). Все задачи условно разделим на пользователь-
рано или поздно берется за автоматизацию своей работы. ские (например, инициирование отправки) и администра-
Сначала вместо длинных команд со множеством ключей по- торские (например, первичная настройка). Первые из них
являются псевдонимы (aliases), потом группы команд объе- требуется разработать максимально удобно, предоставив
диняются в пакетные файлы командной оболочки, затем простейший интерфейс и лишив пользователя возможнос-
на арену выходят сценарии на более функциональных язы- ти ошибаться. Задачи второй категории по традиции ре-
ках типа Perl… И все для того, чтобы сократить количество шим достаточно упрощенно – главное, чтобы все работало
«кликов» и по возможности переложить часть работы на при минимуме телодвижений.
пользователей, которые эти операции и должны бы делать Первым делом скачаем с http://python.org дистрибутив
«по идее», но «по факту» научить их находить нужный файл Python для Windows. Его инсталляция никаких вопросов
в дереве каталогов, упаковывать его и отправлять по на- вызвать не должна. На момент написания статьи у меня
значению оказывается на порядок сложнее, чем делать это была установлена версия Python 2.3.4. Входящая в состав
самому. пакета среда разработки IDLE (рис. 1) предоставляет неко-
Об использовании Python для выполнения тех или иных торые удобства, но для меня как-то уже устоялся стиль раз-
операций на UNIX-серверах написано достаточно много. В работки, когда код вбивается в обычный текстовый файл,
данной же статье я хочу показать применение этого языка и затем исполняется командой типа:
для решения «бытовых» задач в среде Windows. В качестве
примера (которым возможности Python никоим образом не C:\myworks\python\test>python test.py
ограничиваются) разработаем приложение, автоматизирую-
щее отправку данных и получение обновлений по FTP, ис- Можно, конечно, в командной строке набрать просто
пользуя заранее настроенные пути и имена файлов. test.py – в процессе инсталляции в Windows расширение
Попытаемся сделать наше приложение максимально «.py» ассоциируется с интерпретатором python.exe, и по-
универсальным, однако будем иметь в виду конкретную добная команда тоже выполнит код. Однако на стадии от-
цель – нужно организовать обмен данными с удаленной кас- ладки это не совсем удобно – для потоков stdout и stderr в
сой (ежедневно сбрасывать на сервер файлы реестров и этом случае создается новое консольное окно, которое зак-
время от времени получать с сервера обновленную базу рывается сразу же после завершения (в том числе и ава-

36
администрирование
рийного) работы сценария, не позволяя ознакомиться с со- ступом. Отступ может быть выполнен любым количеством
общениями об ошибке. символов «пробел», но все операторы блока должны иметь
одинаковый отступ. Первая же строка, выполненная без
отступа, рассматривается как окончание блока операторов.
Здесь хочется сделать отступление и немного пофило-
софствовать о стиле программирования. Тот же Perl позво-
ляет кодировать как угодно – хоть в одну строку. С одной
стороны, каждый программист со временем вырабатывает
тот стиль, который ему более удобен. При переходе на Perl
с других языков можно перенести и устоявшийся стиль на-
писания кода. Но с другой стороны тут есть и вероятность,
что кто-то другой будет очень долго воспроизводить «не-
Ðèñóíîê 1 ASCII»-звуки, пытаясь разобраться в исходниках програм-
мы, написанной как-нибудь экзотически. Язык Python в этом
Знакомство с Python смысле более требователен к разработчику, унифицируя
Подробно останавливаться на основах языка я не буду. Дан- тем самым стиль кодирования и упрощая работу тем, кому
ный раздел имеет целью коротко пояснить, что и как, для придется работать с этим кодом в будущем. Однако про-
тех, кто ранее с Python не сталкивался, но статью прочи- должим…
тать непременно хочет. И сразу, как говорится, – с места в (4, 5) – оператор «print» выводит на экран значение стро-
карьер: ковой переменной или непосредственно строку, заключен-
ную в кавычки или апострофы. Вставка в строку перемен-
(0) # -*- coding: cp866 -*- ных выполняется в стиле оператора printf языка Си, за тем
(1) #----------------------------- first.py
(2) import os исключением, что список интегрируемых переменных за-
(3) def hello(message): дается после символа «%» как кортеж (то есть через запя-
(4) print message
(5) print 'Âû íàõîäèòåñü â %s.' % os.getcwd() тую и в круглых скобках). Если переменная одна, как в на-
(6) шем случае, скобки можно опустить.
(7) if __name__ == '__main__':
(8) hello('Hello from Python.') (6) – пустые строки, естественно, допускаются.
(9) raw_input('Íàæìèòå Enter...') (7, a) – оператор ветвления пояснять, думаю, не нужно.
(a) else: pass
(b) #----------------------------end of first.py Как и обычно, задаются условие и блок операторов (выде-
ляется отступом), которые будут выполнены, если условие
Результат работы этого сценария будет следующим: истинно. В противном случае, если задан далее оператор
«else», будет выполнен его блок операторов. Если команда
C:\myworks\python\test>python test.py
Hello from Python. в блоке одна, допускается указывать ее непосредственно
Вы находитесь в C:\myworks\python\test. после двоеточия в этой же строке (хотя это и противоречит
Нажмите Enter...
официальному стилю программирования). Оператор «pass»
(0) – первая строка указывает интерпретатору, в какой ничего не делает, и строго говоря, строка «a» в нашем слу-
кодировке следует рассматривать приведенный ниже текст. чае совершенно не нужна.
Для ASCII-текста она не требуется, но поскольку мы исполь- Чуть подробнее следует остановиться на самом усло-
зуем кириллицу, то без нее интерпретатор будет каждый вии, указанном в строке (7): __name__ == ‘__main__’. Встро-
раз выдавать предупреждение «DeprecationWarining: Non- енная переменная __name__ возвращает имя программы,
ASCII character…». если вызывается как модуль из другого сценария (об этом
(1, b) – комментарии, как и принято в UNIX, предваря- – чуть ниже) либо строку «__main__», если файл запуска-
ются символом «#». Для многострочных комментариев ча- ется непосредственно. То есть код строк «8-9» будет вы-
сто используют обрамление текста с помощью утроенных полнен только тогда, когда файл first.py запускается из ко-
кавычек: «’’’ multiline comment ’’’». Этот же прием можно ис- мандной строки. Зачем это сделано, будет объяснено да-
пользовать для временного исключения участков кода на лее.
стадии отладки. (8) – здесь мы просто вызываем описанную ранее фун-
(2) – третья строка импортирует модуль, в данном слу- кцию «hello», передав ей текстовую строку в качестве аргу-
чае «os», который является стандартным для Python и со- мента.
держит функции для работы с конкретной операционной (9) – функция raw_input считывает со стандартного по-
системой. В нашем примере из этого модуля мы использу- тока ввода stdin строку, завершающуюся символом пере-
ем функцию getcwd(), возвращающую текущий каталог. вода строки. В данном случае этот оператор используется
(3) – с этой строки начинается определение функции исключительно для задержки вывода, чтобы консольное
«hello». В скобках указывается список параметров, причем окно не закрывалось сразу.
даже если параметров нет, скобки обязательно должны Теперь рассмотрим еще одну конце