Что такое ИБП (он же UPS), и зачем этот прибор нужен? Как следует из названия устройств этого класса, «источники бесперебойного питания», ИБП защищают вверенное им оборудование от перебоев в электропитании. Толковый словарь Ожегова справедливо указывает, что под «перебоями» следует понимать «неровности в биении, нарушения ритма». Нормальное, выдержанное в должном ритме течение тока (смайл) описано в священных цифрах 220 В ± 10%, 50 ± 1 Гц.

Бесперебойники стремятся обеспечить БП приборов качественным электропитанием, но используют для этого разные средства. Есть только один видотипичный орган, который должен быть у всякого уважающего себя UPS. -это аккумулятор. Существует три основных принципа организации защиты от проблем в электросети и, соответственно, три типа девайсов - резервные (Off-Line). линейно-интерактивные (Line-Interactive) и с двойным преобразованием (On-Line).

Как работают бесперебойники типа Off-Line?

Резервные ИБП - самые простые ИБП в мире. И самые дешевые, соответственно. Пока электрические параметры тока в сети в норме, блок питания подотчетного девайса (давайте уже считать, что это ПК, с оглядкой на специфику журнала) получает электричество из розетки практически напрямую. Как правило, в этом «прямом» включении все же присутствует схема, аналогичная сетевому фильтру. - она защищает БП и комплектующие от повышенного напряжения и его скачков. Когда напряжение падает ниже заданного минимально допустимого уровня, девайс переключается на питание от аккумулятора.
Бесперебойники резервного типа довольно широко распространены в наших краях, хотя в условиях постоянных проблем с качеством электроэнергии это не самое лучшее решение. Одно дело, когда напряжение в сети стабильно и только раз в год, на Хеллоуин, пропадает или проседает, другое - когда существенные просадки случаются по нескольку раз на дню. UPS вынужден часто переключаться на аккумулятор, заряжается батарея гораздо дольше, чем теряет заряд, и совсем не факт. что. когда свет в доме наконец окончательно погаснет, девайс сумеет прокормить ПК хотя бы на время, достаточное для корректного завершения работы. Плюс к тому не будет забывать, что постоянные частичные разряды-заряды батареи не способствуют ее долгой и счастливой жизни.

Есть у ИБП типа Off-Line и другие общие недостатки, среди которых чаще всего упоминаются ненулевое время переключения на резервное питание и форма напряжения, отличная от синусоидальной (трапециевидная), при питании от аккумулятора. Последний недостаток может быть очень критичным.

Почему бы не подключить пару резервных ИБП, чтобы батарея второго всегда была полностью готова к труду и обороне?

Плохая идея. Как говорилось выше, при питании от батареи основная масса Off-Line UPS выдает аппроксимированную синусоиду; второй бесперебойник, скорее всего, примет трапециевидную форму напряжения за искажения в сети и тоже перейдет на аккумулятор. Так они и будут синхронно сажать батареи. Надежность всей этой системы тоже получится меньше, чем у одного бесперебойника. - выход из строя любого девайса повлечет за собой обесточивание ПК. Ну и по деньгам такой вариант вряд ли окажется привлекательным, разве что у вас есть возможность добывать резервные ИБП бесплатно или с очень существенной скидкой.

Чем выгодно отличаются от резервных линейно-интерактивные UPS?

Линейно-интерактивные бесперебойни-ки по устройству похожи на резервные, но включают в себя стабилизатор напряжения. Он. как правило, реализован на основе трансформатора с автоматически переключаемыми обмотками. Девайсу не требуется при каждом изменении напряжения в сети юзать батарею, так что вероятность того, что в момент волшебного исчезновения напряжения из сети аккумулятор будет не заряжен, значительно меньше. Кроме того, линейно-интерактивные ИБП часто снабжают софтом для мониторинга состояния девайса и его узлов, а некоторые, недешевые, разумеется, модели даже способны выдавать правильную синусоиду.

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

так что хороший линейно-интерактивный бесперебойник - пожалуй, лучший выбор для дома.
Слышал, что существуют онлайновые ИБП. Что это за звери такие?

Онлайновые UPS, они же бесперебойники с двойным преобразованием, сначала трансформируют переменный ток из электросети в постоянный, а затем обратно. Потому и «с двойным преобразованием». А онлайновыми их называют, поскольку батарея постоянно включена в сеть между выпрямителем и инвертором и всегда «на линии». Соответственно, времени переключения на резервную цепь как такового у онлайнового UPS нету.

On-Line-UPS - самые совершенные среди источников бесперебойного питания, они способны «кормить» нагрузку исключительно диетической энергией. Синусоида у них на выходе правильная, частотные искажения они успешно отфильтровывают, разного рода траблы с повышенным напряжением для них тем более не проблема. Девайсы, как правило, снабжаются самым развесистым софтом, а некоторые модели можно включать параллельно для увеличения надежности. Нетрудно догадаться, что стоить хороший ИБП двойного преобразования будет недешево. Если конкретнее, то цена сопоставима с системником, который девайсу предстоит защищать. В лучшем случае… Есть и еще один недостаток, поменьше, - это шум. On-Line-UPS требуют серьезного охлаждения, для которого используют вентиляторы. В общем такие бесперебойники любят обращать на себя внимание.

Как правильно подобрать ИБП под компьютер?

Нужно отталкиваться от необходимой ПК мощности. Производители ИБП указывают максимальную активную мощность, потребляемую нагрузкой, то бишь нашим компом. Активная мощность вычисляется перемножением значений тока, напряжения и косинуса угла сдвига фазы между ними. Для простоты расчетов косинус этого угла считают равным 0,6 и полную мощность ПК просто делят на это значение. За мощность ПК чаще всего принимают мощность БП.

Конечно, блок питания обычно берут с запасом, и реально машина кушает меньше. Можно рассчитать более точное значение полной мощности, отталкиваясь от опубликованных производителем цифр об энергопотреблении комплектующих, можно даже повозиться и сделать самостоятельные замеры, но оно нам надо? Некоторый запас на случай апгрейда ПК и старения аккумулятора все равно пригодится.
Посмотрел ценники на ИБП и огорчился. А нельзя ли взять бесперебойник послабее?

Если реальная активная мощность нагрузки будет выше допустимой для ИБП, бесперебойник просто будет отключать компьютер. Можно попробовать сэкономить немного по-другому. Что такое стоит дома и жрет сотни ватт? Скорее всего, это игровая машина. Если ИБП нам нужен для хранения архива документов и прочих нужных файлов, может, стоит собрать маломощный файл-сервер и подключить его к UPS, а на игровой машине оставить только программы и ОС? Ну, погибнут сейвы, и пес с ними. Программы легко переустановить… Да, такой способ тоже потребует затрат, но старое железо обойдется в копейки.

Какие аккумуляторы ставят в источники бесперебойного питания?

Как правило, кислотно-свинцовые, герметичные и необслуживаемые. Они достаточно дешевы.
Слышал, что у ИБП бывают проблемы с блоками питания ПК, оснащенными схемой PFC (Power Factor Correction). Что это за беда, и как с ней бороться?

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

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

Обслуживаемые аккумуляторы

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

В принципе содержать аккумулятор правильно в домашних условиях реально. Но это, во-первых, напряженно: придется выделить ИБП нежилое хорошо проветриваемое помещение. А во-вторых, вы же знаете, как оно бывало: не напишет производитель на микроволновке, что туда кошку нельзя совать, - засунут. А потом засудят. Даже на кофе в макдачечной пишут, что напиток горячий (неужели у клиентов этого ресторана быстрого питания температурные рецепторы так заплыли жиром?). Представьте себе, сколько бессмысленных, самоубийственных поступков можно совершить, имея простую возможность открыть свинцово-кислотный аккумулятор. На предупредительные надписи площади поверхности корпуса АКБ не хватит.

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

,

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

Основная цель HIPS (Host Intrusion Prevention System, система отражения локальных угроз) — идентифицировать и блокировать вредоносные действия в системе и не допустить ее заражения. Отслеживаются все потенциально опасные операции, такие как работа с реестром (в первую очередь с ветками, отвечающими за автозапуск), файлами и каталогами, запуск/останов программ/служб, манипулирование потоками, контролируются инжекты в другие процессы и целостность системных файлов. Перехват API-функций осуществляется по типовым методикам, применяемым антивирусными мониторами, брандмауэрами, антикейлоггерами и антируткитами. При обнаружении вызова той или иной функции перехватчик передает информацию поведенческому анализатору, который принимает решение о том, допустим ли данный вызов для выполняющего его приложения или нет. Чтобы подстроиться под конкретную рабочую среду, в HIPS есть режим обучения. Он создает после установки слепоксистемы и использует его как точку отсчета. Отклонение в работе программы или появление нового процесса, пытающегося получить доступ к важным системным функциям, воспринимается как попытка проникновения, и действие блокируется. Есть и другие алгоритмы, например, в Prevx (о нем ниже) используется централизованная база, где собраны профили как проверенных (назовем их «заведомо хороших») программ, так и вредоносных. Это позволяет быстро определить характер новой программы или процесса на компьютере.

В виду своей специфики (работа на нижнем уровне, перехват API-функций) HIPS часто «не дружат» с антивирусами и антируткитами. При выборе того или иного решения следует учитывать эту особенность. Здесь можно возразить: мол, зачем нам еще какой-то HIPS, если в том же Каспере уже есть модуль «Проактивная защита», реализующий нужную функциональность? Все дело в том, что движок антивируса изначально заточен под традиционный метод защиты, а HIPS идет как вкусная добавка, обладающая урезанными возможностями и включенная в продукт больше с маркетинговых позиций. В настоящее время доступно множество продуктов, имеющих право называться HIPS. Каждый имеет свои особенности и ориентирован на решение определенных задач. Рассмотрим самые популярные.

Разработчик: SoftSphere Technologies Web: www.softsphere.com/rus Системные требования: Intel Pentium х86 300 МГц, 256 Мб / (х86/х64) 1 ГГц, 512 Мб (для WinXP и Vista соответственно) ОС: Windows NT/2000/XP/2003/Vista

В DefenseWall используется принцип разделения программ/процессов на доверенные и недоверенные. Программы из второй группы удерживаются в песочнице (Sandbox), в отдельном от основных программ пространстве. В список недоверенных программ автоматически попадают все приложения для работы в интернете — веб-браузер, Р2Р, 1М-клиенты и т.д. Все файлы, загруженные или созданные такими приложениями, также становятся недоверенными. По умолчанию к недоверенным относятся и файлы на съемных носителях (для CD/DVD это активируется отдельно). Доверенные программы тоже ограничены в некоторых правах: они не могут модифицировать важные системные файлы, ветки реестра, изменять параметры автозагрузки. Благонадежное приложение может потерять доверие, стоит ему только выполнить действие, считающееся потенциально опасным. Например, запуск доверенной программы из недоверенной автоматически переводит действие в опасное. Статус каждой программы выводится в верхней части окна. В окне настройки есть возможность указать файлы и ресурсы (пароли, игровые аккаунты и т.п.), которые необходимо защищать с особой тщательностью.

Установку рекомендуется производить в «чистой»системе(совет относится и к остальным продуктам этой категории). Программа рассчитана, в первую очередь, на неподготовленного пользователя, поэтому имеет упрощенный интерфейс и минимум настроек. В большинстве случаев решение принимается автоматически. Запрос пользователю выдается лишь при обнаружении кейлоггера, отключении защиты и доступе к защищаемым ресурсам, на которые указал пользователь. Это и есть основной плюс программы перед конкурентами. DefenseWall не нужно обучать, отвечая на многочисленные вопросы. Получить полное представление о происходящем в системе можно в меню «Список событий». Каждое событие содержит следующие поля: Модуль, Время, Путь, Описание и Тип события. При выборе элемента списка в нижнем окне появляется детальная информация по событию. Возможно использование фильтров, ускоряющих поиск, и удаление не представляющих интереса событий.

Также предусмотрено два экстренных режима. При выборе в меню «К банкингу/шопингу» (GoBanking/Shopping) будут остановлены все недоверенные процессы, и запущен браузер в защищенном режиме. Кнопка «Стоп атака» останавливает все недоверенные процессы. Для продвинутого пользователя существует Expert Mode, в котором список недоверенных приложений формируется не программой, а самим пользователем.

Кроме пользовательской, существует версия, созданная специально для защиты серверов (Apache, IIS etc) от взлома с использованием атак, использующих переполнение стека и кучи, от действия червей (CodeRed, Slammer, Sasser, Blaster), вирусов и прочих угроз. В серверной версии используется низкий уровень защиты, и только для приложений, указанных админом, устанавливается максимальная протекция.

Разработчик: S.N.Safe&Software Web: www.safensoft.ru
Системные требования: Intel Pentium х86 300 МГц, 256 Мб — WinXP / (х86/х64) 1 ГГц, 512 Мб —Vista ОС: Windows ХР/Vista

В HIPS Safe’n'Sec, разрабатываемой Российской компанией S.N.Safe&Software, используется собственная технология защиты V.I.P.O. (Valid Inside Permitted Operations). Суть программы проста. Драйвер Safe’n'Sec загружается на раннем этапе и перехватывает вызовы системных функций на уровне нулевого кольца ядра ОС. После установки клиент сканирует систему, создавая профиль приложений и формируя список доверенных программ (для этого используется хеш SHA-256).

При появлении активности, затрагивающей целостность системных файлов, реестра, запуск нового процесса или открытие сетевого соединения, соответствующая операция блокируется, а пользователь получает запрос на ее подтверждение. Для описания поведения используется универсальный язык правил, определяющий, какие действия приложений и пользователей должны блокироваться. Плюс задаются дополнительные условия, вроде частоты проявления определенного действия. База состоит из системных правил, разрабатываемых специалистами, и пользовательских. Последние формируются автоматически на основе ответов на запросы. Для работы Safe’n'Sec не требуется постоянное обновление баз, хотя периодически следует обновлять программные модули. Существует два варианта продукта. Для персонального использования предназначен Safe’n'Sec 2009. В корпоративной версии Safe’n'Sec Enterprise предусмотрено централизованное управление клиентскими модулями. Задействуется два дополнительных компонента:

• Safe’n'Sec Admin Explorer — консоль управления; используется для удаленного администрирования системы;
• Service Center — сервер, непосредственно выдающий команды клиентским модулям; он же производит

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

Если в системе уже есть антивирус, перед установкой Safe’n'Sec следует просмотреть таблицу совместимости с другими продуктами, которая приведена на сайте. Например, напротив Kaspersky Anti-Virus 2009 отмечено «не совместим».

Разработчик: Network Associates Web: www.mcafee.com, www.mcafeesecurity.ru Системные требования: минимальные системные ОС десктоп: Windows ХР/Vista

ОС сервер: Windows 2000/2003/2008 (х86/х64), RHE Linux 4.0 (х86), Solaris 8/9/10
В HIPS от McAfee объединены возможности продуктов Desktop Firewall и HIPS Entercept (до 2003 года разрабатывался одноименной компанией, которая была выкуплена Network Associates). Доступен как самостоятельное решение и как часть комплексного продукта Total Protection for Endpoint.

Поведенческий анализатор отслеживает и блокирует нежелательную активность, используя три уровня защиты: поведенческий анализ, сигнатурный и контроль соединений брандмауэром. В результате обеспечивается защита от известных и еще неизвестных атак, направленных на переполнение буфера, а также защита приложений, — в том числе от попыток обмена данными с другими приложениями. Из дополнительных функций отметим возможность контроля приложений (можно определить список разрешенных и запрещенных) и блокировку USB-носителей. Брандмауэр контролирует исходящий трафик и блокирует несанкционированные внешние подключения. Для мобильных систем можно устанавливать различные уровни безопасности, в зависимости от того, находятся они в защищенной или незащищенной сети, подключены ли через VPN. Предусмотрен карантин для тех систем, которые не выполняют всех требований безопасности. Управление упрощается за счет присутствия стандартных настроек (политик), обеспечивающих защиту после установки. При этом изначально IPS активирован на высоком уровне, приложения и процессы защищены, приложения от McAfee находятся в списке доверенных. В процессе работы вполне естественно, что изначальных настроек будет недостаточно. Поэтому HIPS подстраивается, работая в адаптивном (самостоятельно) или обучаемом режиме (по подсказкам пользователя). Версия Server, кроме указанных выше функций, обеспечивает защиту веб-серверов (Apache 1.3.х/2.х, Sun ONE/Java Web Server) и серверов баз данных (SQL Server 2000) от некоторых типов атак (Directory traversal, DoS, SQL injection и др.).

Эта HIPS может работать только совместно с системой централизованного управления политиками, сбора данных, установки обновлений — ePolicy Orchestrator (ее можно использовать для управления остальными продуктами McAfee). На клиентской системе устанавливается агент, обеспечивающий связь HIPS с сервером еРО.

На сегодня доступны две версии еРО: в 3.6.1 консоль реализована в виде ММС, а в 4.0.0 — в виде веб-сервиса. Использование во втором варианте протокола HTTP/ HTTPS позволяет управлять настройками с любой платформы. 3 тА 2 Для установки еРО-сервера понадобится компьютер под управлением Win2k SP4/2003 SP1/SP2/R2, консоль Win2k/XP/2003/Vista. В качестве SQL-сервера для небольших организаций рекомендован SQL Server 2005 Express Edition; поддерживается SQL Server 2000/2005.

Разработчик: Prevx Limited Web: prevx.com
Системные требования: минимальные системные ОС: Windows 98/NT/2000/XP/2003/Vista/2008/ Se7en
Система Prevx появилась в начале 2004 года и была представлена как первая Community IPS, предназначенная для защиты отдельных узлов. Термин Cloud computing в то время еще не использовался, но все признаки предоставления ПО как услуги (software-as-service, SAAS) и удаленные хранилища данных в Prevx уже имелись. В Prevx для определения угроз используются правила, описывающие поведение и контрольные суммы программ. В список рулесетов попадают как заведомо хорошие программы, так и плохие. Это позволяет быстро определить характер новой программы или процесса на компьютере. Вся информация хранится в единой базе данных (Prevx Cloud Community Database). В качестве сенсоров этой гигантской IPS выступают агенты, установленные на клиентских машинах. Дистрибутив программы очень маленький, — всего 768 Кб. После установки агент сканирует систему на предмет установленных приложений и отправляет запрос на центральный сервер, а на основании полученной информации делает вывод. Все происходит довольно быстро. Так, первое и полное сканирования занимают всего 2-4 минуты. Последующие обычно и того быстрее, менее минуты. Если в центральной базе данных нет сведений о программе, то она помечается как неизвестная, модуль заносит ее в базу, а пользователь предупреждается о возможном риске. Профиль любой программы содержит более сотни параметров. И в большинстве случаев сервер способен определить ее характер самостоятельно, основываясь на поведенческих характеристиках. Уже через 4 года существования база знала о 10 миллиардах событий, что практически сводит на нет вероятность ошибки. Ежедневно в базу заносятся до 250 тысяч событий. В ходе работы агент использует три слоя защиты: эвристический (оценивает поведение), возрастной (время появления) и известность программы. В случае обнаружения вредоносной программы возможна очистка системы. Prevx выдаст подробные инструкции, например, запросит установочный диск Windows; предусмотрен также вариант автоматической закачки целого системного файла с другого компьютера сообщества. Кроме варианта Ноте, ориентированного на персональное использование, имеются Business и Enterprise версии, в которых реализовано централизованное управление агентскими модулями. Для организаций предлагается Free Malware Monitor, распространяющийся бесплатно, но агент, входящий в его состав, имеет лишь функции обнаружения. Бороться с обнаруженными неприятностями придется при помощи других утилит, или купив полную версию.

Prevx может использоваться как автономно, так и быть усилена другими продуктами: межсетевым экраном, антивирусом, антишпионами и пр. Обычно проблем с совместимостью не бывает. Хотя этот продукт имеет единственный, но существенный минус — он привязан к серверу и без него фактически беспомощен.

ЗАКЛЮЧЕНИЕ Еще каких-нибудь пару лет назад о системах отражения локальных угроз практически ничего не было слышно, но сейчас можно утверждать, что произошел прорыв. Существующие варианты HIPS довольно разнообразны. Каждое решение имеет свои особенности и тщательно скрываемые разработчиками алгоритмы.

Сегодня система подключаемых модулей аутентификации РАМ поставляется в комплекте практически с любым UNIX’om. Но немногие знают, что с ее помощью можно получить просто безграничный контроль над юзерами и способами входа в систему. К примеру, организовать аутентификацию по отпечаткам пальцев и USB-ключам, поместить пользователей в chroot-окружение и защитить хост от брутфорс-атак.

Мы уже рассматривали РАМ (Pluggable Authentication Modules) в одном из предыдущих выпусков журнала [речь идет о статье «Система безопасности РАМ изнутри», опубликованной в февральском номере JE за 2006 год, — Прим.ред.) Для тех, кто пропустил, объясню в двух словах. Система подключаемых модулей аутентификации представляет собой специальную модульную библиотеку, возможности которой может использовать любое приложение, осуществляющее аутентификацию и/или авторизацию пользователей. Хороший пример — системная утилита /bin/login, отвечающая за вход пользователя в ОС. До появления РАМ она должна была сама находить пользователя в базе /etc/passwd и сверять хеш введенного им пароля с хранящимся в базе хешем. Сегодня все эти действия осуществляет РАМ. а /bin/login только вызываетее из своего кода и проверяет возвращаемый статус. Но это пустяк, потому что настоящая мощь РАМ заключается в ее модульности, благодаря которой можно легко изменить используемый метод аутентификации (хочешь входить по отпечаткам пальцев — нет ничего проще!) и авторизации пользователь должен уйти в chroot после логина — легко!) путем редактирования всего лишь одного конфигурационного файла. РАМ использует закрепленные за приложениями конфиги для получения информации отом, какие модули следует использовать для аутентификации/авторизации пользователя. Все они располагаются в каталоге/etc/pam.d. Рассмотрим пример одного из них — файл /etc/pam.d/ login, закрепленный за утилитой/bin/login:

#vi/etc/pam.d/login
auth sufficient pam_self .so no_warn
auth include system
account  requisite pam_securetty. so
account  required   pam_nologin.so account  include system session  include system password include system

Формат конфигурационного файла РАМ был подробно описан в вышеназванной статье, поэтому сейчас я скажу только о том, что существует четыре стека РАМ-модулей, модули

• каждого из которых вызываются поочередно. Первый столбец как раз и указывает на используемый стек:
• auth — сюда помещаются модули, проводящие аутентификацию;
• account — модули, определяющие, можно ли пользователю зайти;
• session — выделение ресурсов для пользователей (например, монтирование домашнего катал о га);
• password — модули, обеспечивающие обновление учетной записи пользователя и его пароля (этот стек использует команда /и s г/ bin/passwd).

Второй столбец — это флаг, который определяет, что делать в случае (не)успешной отработки модуля. Третий столбец — имя модуля, четвертый — его аргументы (также модуль может иметь конфигурационный файл, располагающийся в каталоге/etc/security). Обрати внимание на особую директиву include, которая не вписывается в общий синтаксис и позволяет подключать другой конфиг (чтобы не дублировать содержимое). В нашем случае для каждого стека указан включаемый файл system (также расположенный в каталоге/etc/pam). Это специфика FreeBSD; Linux-дистрибутивы Debian и Ubuntu используют для тех же целей файлы common- (common-auth, common-session и т.д.), a Gentoo и Mandriva — system-. В одном из этих файлов ты обязательно найдешь строку с запуском РАМ-модуля, ответственного за поиск пользователя в базе/etc/passwd и сравнение хешей:

auth required pam_unix.so no_warn try_f irst_pass nullok

Уберем ее, и двери захлопнутся, больше в систему не войдешь. А теперь немного магии. Какя уже говорил, изменяя несколько строк в конфигурационных файлах, мы можем сделать с методом аутентификации и авторизации все, что угодно (в рамках возможностей доступных модулей, конечно). Возьмем, к примеру, файл /etc/pam.d/ su, стек модулей auth которого выглядит так:

#vi /etc/ра m. d/su
auth sufficient pam_rootok. so no_warn
auth sufficient pam_self .so no_ warn
auth requisite pam_group.
so no_warn group=wheel root_only
fail_safe
auth include system

Сначала вызывается модуль pam_rootok, который проверяет UID пользователя, запустившего приложение, и успешно завершается, если он равен нулю. Все остальные модули в этом случае пропускаются (флагsufficient). Если первый модуль завершился неудачно (пользователь не root), стартует модуль pam_self, который проверяет, совпадает ли UID вызывающего пользователя с UID'om пользователя, для которого осуществляется авторизация. Если это так, остальные модули не запускаются (поясню на примере: если пользователь vasya делает «suvasya», модуль возвращает «да», и su выполняется успешно, не спрашивая пароля). Далее с помощью модуля pam_group происходит проверка на членство вызывающего пользователя в группе wheel, и, если это не так, пользователя отфутболивают (флаг requisite). В конце выполняются модули, помещенные в стек auth в файле /etc/pam.d/system (вызов pam_unix, сверяющего пароль). Приведу несколько примеров. Хочешь сделать так, чтобы su не смог пользоваться никто? Тогда удали все эти строки и впиши на их место «auth sufficient pam_deny.so». Модуль pam_deny — это аналог команды false. Он всегда выполняется неудачно, поэтому su не сможет воспользоваться ни один пользователь, включая root. Антипод ему — модуль pam_permit, всегда исполняющийся удачно. Запиши в/etc/pam.d/su строку«auth sufficient pam_permit.so», и su смогут использовать все, кому не лень, не вводя пароль.
Но все это игрушки в сравнении стем, что нас ждет дальше.

Стандартная комплектация Linux-PAM и ОрепРАМ уже включает в себя несколько модулей аутентификации, которые следует помещать в стек auth. Это, например, модуль pam_guest, который позволяет использовать для аутентификации специальные гостевые аккаунты, pam_ftpusers, впускающий пользователя только если его имя присутствует вфайле/etc/ftpusers, или pam_securetty, разрешающий суперпользователю логиниться лишь с терминалов, которые помечены как secure в файле/etc/ttys (или просто перечислены в файле/etc/securetty в Linux). Все они задействованы в системах аутентификации различных приложений, но для нас особого интереса не представляют. В большинстве систем среди штатных модулей есть такие, которые позволяют производить аутентификацию с помощью USB-ключей, смарт-карт и даже отпечатков пальцев. Возьмем, к примеру модуль pam_usb. Он считывает ключ с USB-брелка и на его основе делает вывод о правомочности пользователя войти в систему Вставил брелок — вошел, вынул — система заблокирована. Интересно? Тогда вперед.

В портах FreeBSD pam_usb нет, поэтому все описанное ниже пригодится только пользователям Linux (примеры даны для Debian/ Ubuntu). Установим pam_usb и нужные для его настройки утилиты:
# apt-get install libpam-usb pamusb-tools
Подключим USB-брелок и запустим pamusb-conf, чтобы добавить флешку в конфигурационный файл:
# pamusb-conf --add-device любое__имя
Утилита попросит выбрать нужное устройство, раздел, используемый для хранения ключа, и спросит о том, следует ли заносить устройство в конфигурационный файл. Следует ответить «да», то есть «у». Добавим пользователей, которые смогут войти в систему с помощью этого USB-брелка:
# pamusb-conf --add-user root
Выбираем уже добавленный в конфиг брелок, нажимаем «у» и проверяем правильность произведенных настроек:
# pamusb-check root
На этом настройка pam_usb завершена. Осталось добавить pam_usb в стек auth необходимых приложений и насладиться результатом.
Не будем утомлять себя редактированием всех конфигурационных файлов РАМ, закрепленных за каждым приложением, и внесем изменения во включаемый файл/etc/pam.d/common-auth. Для этого откроем его в редакторе и перед строкой, содержащей имя pam_unix.so, добавим строку «auth sufficient pam_usb.so». Теперь любое приложение, конфигурационный файл РАМ которого включает в себя common-auth, будет пытаться аутентифицировать пользователя с помощью ключа, записанного на USB-брелок, и только в случае неудачи запросит пароль. С отпечатками пальцев дело обстоит еще проще. Уже год как существует замечательный проект fprint Iwww.reactivated. net/fprint/wiki/Main Page), смысл которого в разработке унифицированной библиотеки для работы с различными сканерами отпечатков (подключаемых к USB-порту) и набора утилит для работы с ней. Кроме прочего, в комплект утилит входит и нужный нам модуль pam_fprint. Связка libfprint и pam_fprint уже включена по умолчанию в новые релизы Ubuntu и Fedora и доступна через систему портов FreeBSD (/usr/ports/security/pam_fprint). Поэтому вручную устанавливать ничего не потребуется, а для настройки необходимо выполнить всего два шага. Первый — создать слепок пальца с помощью следующей команды:
$ pam_fprint_enroll --enroll-finger 6
Цифра 6 означает большой палец правой руки. Система fprint нумерует пальцы обеих рук слева направо, от одного до десяти, так что 1 — это мизинец левой руки, а 8 — средний палец правой.
Второй шаг. Добавить pam_fprint в стек auth необходимых приложений. Для этого открываем уже знакомый нам /etc/ pam.d/common-auth (или /etc/pam.d/system во FreeBSD) и вставляем в начало строку «auth sufficient pam_fprint. so». При необходимости указываем флаг required вместо sufficient, чтобы без отпечатка вообще нельзя было войти (но не рекомендую этого делать; современные потребительские системы распознавания отпечатков пальцев далеки от совершенства).
ЧЕРНЫЕ СПИСКИ, БЕСПАРОЛЬНЫЕ ПОЛЬЗОВАТЕЛИ И АЛЬТЕРНАТИВНЫЕ БАЗЫ ПАРОЛЕЙ
Процесс помещения пользователей в черные и белые списки до появления РАМ обычно превращался в какое-то шаманство, сопровождаемое многочисленными экспериментами, а конечная цель достигалась за счет использования костылей. Сегодня пользователям и системным администраторам живется намного легче: существует несколько РАМ-модулей, позволяющих реализовать блэклистинг и автоматизацию входа пользователя в систему. Возьмем, к примеру, модуль pam_listfile (доступный только в пакете Linux-PAM). С его помощью легко настроитьсис-тему беспарольного входа пользователей. Просто добавь следующую строку в конфигурационный РАМ-файл нужного приложения и запиши беспарольных пользователей в файл /etc/users.allow:
auth sufficient pam_listfile. so item=user sense=allow file=/etc/users.allow onerr=fail
Немного изменив строку, можно добиться запрещения входа пользователей:
auth sufficient pam_listfile.so item=user sense=deny file=/etc/users.deny onerr=fail
Причем, в качествезначения опции item можно использовать также tty, user, rhost, ruser, group, shell. Это дает возможность запрещать/позволять вход не только на основе имен пользователей, но и имени терминала, с которого происходит вход, имени удаленного хоста/пользователя, группы и т.д.
Другой похожий модуль называется pam_access. Он использует более гибкий и сложный формат конфигурационного файла и предназначен для помещения в стекассс-unt (проверка, может ли пользователь войти, осуществляется уже после того, как он представился, то есть ввел правильные логин и пароль). Модуль удобно использовать в связке с ssh для выставления за дверь неугодных. Для этого надо поместить модуль в стек account: «account required pam_access.so» и создать файл /etc/security/access.conf примерно с таким содержимым:
- : ALL : ALL w ДСП'
Это означает, что получить доступ через ssh могут все из подсети 192.168.1.0 и парень с логином good_guy. Остальные идут лесом. На просторах всемирной паутины можно найти и более простой модуль pam_lockout (ostaticcom/pam-lockout]. Он позволяет перечислить имена неугодных пользователей прямо в конфигурационном файле РАМ: «auth requisite pam_lockout.so user=bad_guy». Для организации беспарольной системы входа пользователей с консоли удобно использовать модуль pam_alredyloggedin (ilya-evseev. narod.ru/posix/pam alreadyloggedin). Он запрашивает пароль только в случае, если пользователь еще не залогинился в другой консоли (идеальное решение, когда используешь сразу несколько консолей, переключаясь между ними с помощью <Alt+Fx>). Для настройки просто помещаем следующие две строки на самый верх стека auth (в начало файла):
auth required    /lib/security/pam_securetty.so
auth sufficient /lib/security/pam_alreadyloggedin.so
no root
Возвращаясь к спискам пользователей, нельзя не упомянуть о довольно интересном модуле pam_pwdfile (cpbotha.net/software/pam pwdfilel. Его задача — предоставить приложениям альтернативную базу пользователей и паролей, которую они смогут использовать вместо системного файла /etc/passwd. Это своего рода плагин для тех приложений и демонов, которые не способны вести подобную базу самостоятельно. Яркий пример: минималистичный FTP-cepBepvsftpd. Запусти его от непривилегированного пользователя, и клиенты не смогут получить доступ к серверу Выход: использовать pam_pwdfile, который будет вести отдельный файл логинов и паролей специально для vsftpd. Для использования достаточно добавить следующие две строки в начало/etc/pam.d/vsftpd:
auth required pam_pwdfile.so pwdfile /usr/local/etc/ vsftpd/vsftpd.users
account required pam_pwdfile.so pwdfile /usr/local/ etc/vsftpd/vsftpd.users
И добавить пользователей в базу с помощью утилиты chpwdfile [eclipse.che.uct.ас.za/chpwdfile) — либо руками заполнив его строками вида: «логин:М05-хеш-пароля».
На закуску я оставил вкуснейший модуль pam_abl [hexten.net/ pam). самостоятельно ведущий и обновляющий черные списки пользователей-брутфорсеров. Это отличная портабельная между UNIX'aMH альтернатива блэклистингу на основе правил брандмауэра. Модуль вычисляеттех, кто слишком настойчиво пытается пройти аутентификацию, и блокирует аккаунт или вызывающий хост на определенное время. Для настройки открываем/etc/pam.d/sshd и добавляем в начало строку «auth required pam_abl.so config=/etc/ security/pam_abl.conf». По умолчанию модуль настроен на блокировку аккаунта. Это правильно, если твой хост подвергся распределенному брутфорсу, но вызовет проблемы для легальных пользователей, которые попытаются войти в систему сразу после проведения безуспешной попытки «взлома». В обычной ситуации для борьбы со скрипт-кидди лучше настроить блокировку на основе имени вызывающего хоста. Поэтому открываем файл /etc/security/pam.conf и пишем в него:
# vi /etc/secur ity/pam_abl.conf
// Черный список host_db=/var/lib/abl/hosts -db // Блокировка сроком на два дня host_purge=2d
// Блокировка любого хоста после 10 неудачных попыток за 1 час
host_rule=*:10/lh пространства имен, автомонтирование, chr00t
Как было сказано выше, стек РАМ-модулей session предназначен для модулей, подготавливающих окружение для только что вошедшего пользователя. Это можетбыть любое действие, связанное с выделением или ограничением доступных пользователям ресурсов. Наиболее показательный пример — модуль pam_limits из пакета Linux-РАМ (но не Open РАМ). Он ограничивает ресурсы приложений вошедшего пользователя на основе конфигурационного файла /etc/ security/Limits, conf.
Если говорить о сторонних разработках, то в первую очередь сле-дуетупомянуть полезнейший модуль pam_chroot (sourceforge.net/ projects/pam-chroot], единственная задача которого — помещать вошедших пользователей в песочницу. Модуль незаменим, когда требуется организация shell-, ftp- или какого-либо другого хостинга и любых конфигураций, предусматривающих вход в систему сомнительных лиц. Модуль очень прост в использовании. Для настройки достаточно выполнить две команды:
# echo ’session required pam_chroot. so ‘ >> /etc/pam.d/ ssh
# echo ‘vasya /usr/chroot’ >> /etc/security/chroot. conf
Все, теперь vasya, вошедший с помощью ssh-клиента, будет помещен в каталог/usr/chroot и не сможет из него выбраться. На втором месте в рейтинге — модуль pam_mkhomedir из пакета Linux-PAM, просто создающий домашний каталог для прошедшего аутентификацию пользователя.
Поначалу полезность модуля может показаться сомнительной, но администраторы гетерогенных сетей, состоящих вперемешку из машин Windows/UNIX, ценят его дороже своих потертых джинсов. Дело втом, что в таких сетях принято использовать Active Directory для хранения учетных данных пользователей, коих может быть не одна сотня. Вместо того чтобы создавать многочисленные каталоги для каждого пользователя, зарегистрированного в AD, они просто выполняют приведенную ниже команду на всех UNIX-машинах и удаляются в серверную порезаться в «контру»:
# echo ’session required pam_mkhomedir. so skel = /etc/ skel/ umask=027′ >> /etc/pam.d/common-session
Модуль обычно используется в связке с модулем pam_winbind, осуществляющим аутентификацию в AD, или с pam_ldap, аутентифи-цирующим пользователей, используя сервер LDAP. Почетное третье место занимает завязанный на возможностях Linux-ядра модуль pam_namespace. Его задача — незаметное создание изолированной копии общедоступного каталога l/tmp, например) для каждого пользователя. Другими словами, вошедший пользователь получает доступ только к своей версии каталога Amp и не видит файлов других пользователей. Нужно это для борьбы с методами взлома, основанными на использовании состояний гонок (race condition), символических ссылок и просто для ограждения возможного нарушителя от любых файлов легальных пользователей. Модуль использует простой конфигурационный файл/etc/security/ namespace.conf для принятия решения отом, какие каталоги должны быть подменены.

Что делать, если хочется всего и сразу, да еще и не напрягаться при этом? Правильно, надо найти того, кто сделает все за тебя.Так и в хакпроме — не хочешь выполнять рутинную работу, используй средства автоматизации. Благо, есть MetaspLoit, голова на плечах и немного фантазии.

Как-то раз у меня возникла идея создать портативную версию метасплойта. Зачем? Ну, представь, что ты порутал какой-нибудь узел в локалке и захотелось тебе окинуть пристальным взглядом всю сеть изнутри. Явно нужна помощь в виде всевозможных x-tool’z, которые надо установить, настроить и т.д. Они начнут следить и всячески гадить в системе. В общем, форменное палево, хотя все зависит от конкретных обстоятельств. Гораздо круче иметь портативные версии, которые можно настроить заранее и тупо скопировать на тачку. Если все правильно сделать, нигде они тебя не выдадут, а по окончании злостных действий их нужно будет просто удалить.

МЕТАСПЛОЙТ —ХР— MS08_067 — DB_UT0PWN

В джентльменском наборе пентестера мета-сплойт занимает отнюдь не последнее место, позволяя быстро проверить машинки и, по возможности, их поломать. Конечно, не 0-day, но тем не менее. В общем-то, если не брать в расчет установку nmap и, соответственно, winpcap, проблем с созданием портативной сборки не было. Но тут я наткнулся на EasyHack otSKVOZ be за май 2009) - про реализацию массрутинга с помощью метасплойта. Тема меня дико заинтересовала, и я решил ее развить.
Честно сказать, с метасплойтом я до этого особенно и не работал. Так, баловался разными сплойтами, не дальше user guide. Но идея массрутинга реально зацепила. Более того, у меня было стойкое ощущение, что после эпидемии conficker найти тачки с юзабельной дыркой проблематично. Напомню, что SKVOZ предлагал использовать связку nmap и метасплойт как раз для массрутинга дыры MS08JD67. Ради интереса я повторил эксперимент в своей локалке и был приятно удивлен. Более четверти машин выбросили рутовые шеллы. Еще больше обрадовал тот факт, что сам эксплойт мог бы быть и другим. Только за 2009 год Microsoft уже опубликовала порядка 20 критических уязвимостей. Одна из них — ms09-001 — также связана с SMB. Эксплойта под нее пока нет, но, возможно, это только вопрос времени.

Однако не все так сладко. Нарисовалось несколько проблем, которые требовали решения. Допустим, у тебя есть шелл. Классика жанра требует создания нового пользователя и добавления его в локальную группу администраторов (или снятия хешей паролей, или просто замены пароля локального админа). В российских реалиях подавляющее большинство машин в локалке(я говорю о клиентских тачках под WinXP) работают под локализованной осью, а, значит, локальная группа носит название «Администраторы». Попробуй вбить в удаленной консоли «Администраторы» и тебя накроет глубочайшее чувство обиды. Да-да. извечная проблема с кодировками. Консоль работает под ср866, Windows — под ср1251, никсы и вовсе под KoiS-гили Unicode. Метасплойтже и нагрузки, типа meterpreter, в принципе не понимают русскую локаль. Отсюда на ровном месте мы получаем нехилую проблему. В сетке эта тема достаточно широко обсуждается. В конечном итоге все ссылаются на один и тот же патч (trac.metasploit.com/ticket/253]. Я накладывал патч, пробовал разные кодировки, но ни черта не получилось. Может, получится у тебя, но меня эта проблема окончательно добила, и я решил искать нормальное решение.

Итак, встала задача добавления пользователя в локальную группу администраторов посредством полученной консоли в условиях невозможности использовать символы кириллицы. План действий таков: пишем скрипт, реализующий необходимый функционал, каким-то образом заливаем его на подопытную тачку и исполняем. Скрипты я предпочитаю писать на AutolT, так что открываем SciTe из поставки AutolT и начинаем ваять. При этом хотелось бы сделать версию скрипта, независящую от локали, — то есть скрипт должен уметь автоматически определять название локальной группы администраторов. Известно, что системные группы в винде имеют предопределенные SID, в частности, SID группы администраторов имеет значение HneS-1-5-32-544. Для получения названия по SID предоставляется API-функция LookupAccountName, экспортируемая библиотекой AdvAPI32.dll. В автоит модуль Security. аиЗ предоставляет соответствующую функцию-обертку _5ecurity_LookupAccountName.
Этой функцией мы и воспользуемся (смотри файл user.au3 на DVD).

Вызов TraySetState с параметром 2 блокирует появление иконки AutolT в трее. Далее определяется имя группы администраторов, создается пользователь и добавляется в эту группу. Последний вызов модифицирует реестр, чтобы пользователь отсутствовал в списке интерактивного входа ХР.

Компилируем скрипт в ехе-файл и проверяем на виртуалке. Если все в порядке, двигаемся дальше. В качестве транспорта поначалу я думал использовать SMB. Мы находимся в той же сетке, что и жертва, — так почему бы не расшарить у себя папку и не подложить туда файлик user, ехе? Не видя никаких проблем, я так и поступил. Но монтирование папки с удаленной системы ни в какую не получалось — видимо, после эксплуатации сервис начинал работать неправильно. Нуда ладно, в винде по умолчанию встроен консольный клиент ftp. Я поднял натачке ftp-сервер (портативный FileZilla), настроил анонимный вход, а на удаленной тачке в папке %temp% строка за строкой прописал ftp-скрипт для подключения к моему серваку и получения файла. Далее в консоли появился вызов ftp.exe с ключом -s, и файл user.exe оказался на предназначенном ему месте. После запуска в системе появился пользователь с нужными правами.

Таким образом, принципиально проблема решается несложно. Впрочем, чем дальше, тем больше хочется. Вбивать каждый раз РТР’шный скрипт, качать и запускать файл — идеологически крайне далеко от поставленной задачи автосплойтинга. Кроме того, доступ из консоли в винде — совсем не так круто как в никсах, большинство утил просто не будут работать без графики. Так что, будем шаманить в попытке открыть доступ к рабочему столу. Вариантов, в принципе, всего два. Это — расшаривание стола (типа Radmin, VNC и т.д.] и использование терминальных служб. Первый для клиентских машин — совсем и не вариант, ибо очень палится. С RDP в ХР вообще тухло: при инициации удаленного подключения локальный пользователь будет выброшен из активной сессии. Но не надо отчаиваться, выход есть.

Чем думают ребята из Redmond’a, я не знаю, но порой их решения поражают воображение. Если в серверных ОС мы имеем человеческий доступ по RDP, то в клиентских — полная лажа. Удаленный доступ в ХР не уживается с локальным, и только один из пользователей может оставаться активным (в Home Edition, кстати, терминальной службы вообще нет). Зачем это сделано — большая загадка, потому что вряд ли кто-то будет только из-за этого покупать серверную ось. а неудобств доставляет немеренно, особенно в нашем случае. В одном из бета-релизов ХР такого ограничения не было, поэтому для его снятия достаточно подменить библиотеку termsrv.dll и перезагрузиться. На словах просто, на деле — нет. В сети различных патчеров, как грязи, но все они работают, прямо скажем, хреново, да и то — только если их запускать из интерактивной сессии и иметь доступ к рабочему столу. Дело в том, что системные dll охраняются системой Windows File Protection.

Если доступен установочный дистрибутив (с CD или по сети), файлы будут автоматически заменены на оригинальные. Если нет, будет выброшено предупреждение о недоступности диска и предложение вставить диск либо принять новый файл. И хотя название файла не пишется, надо быть полным дауном, чтобы ответить «Да», на что я, естественно, полагаться не буду. Один из методов обхода заключается в необходимости загрузки в безопасном режиме, ноудаленно, к сожалению, этого не сделаешь. Поэтому все патчеры идут лесом, и мы будем ваять собственный, который подменял бы библиотеку из неинтерактивной сессии, да и еще как-то справлялся с защитой файлов.

Первая часть тривиальна, а вот со второй сложнее. Надо отследить появление окна и эмулировать нажатия на нужные кнопки. Положим, код для этого мы написали, но, запустив его из консоли metasploit. мы дико обломаемся, так как, не имея доступа к рабочему столу, окно он, естественно, не поймает, и никакие сигналы послать не сможет. На выручку, как обычно, приходит планировщик задач, позволяющий запускать проги в интерактивном режиме. Идея в том, чтобы поставить задачу эмуляции пользовательских действий на выполнение в интерактивном режиме. Далее — дождаться ее запуска и уже потом подменять нужные файлы. Смотри на DVD полный код скрипта под названием final.au3, а я тем временем поясню, что к чему. Я весь функционал засунул в один файл, поэтому сначала проверяю, с какими аргументами запущен бинарник. Если присутствует ключ fsp, значит, будем ждать появления окна и щелкать по кнопкам. Определить идентификационные данные окна и кнопок можно с помощью Au3lnfo из сборки AutolT. После этого я отправляю машину в перезагрузку, дав юзеру 2 минуты на сохранение результатов работы. Если ключ fsp не задан, скрипт выполняет свою основную задачу.

Сначала инициализируются необходимые переменные и осуществляется работа по созданию нового администратора. Затем производятся телодвижения касательно реестра и нетшелла, цель которых — открытие доступа к RDP. Дальше проверяется версия ОС и, если она не ХР, работа скрипта прекращается. Если же на узле установлена ХР, с помощью sc поднимается сервис планировщика, и на выполнение ставится наш же скрипт, но с ключом fsp. Подождав, пока планировщик запустит задачу, скрипт реализует подмену библиотеки. Для этого переименовывается текущая dll (если запущена служба TermService, библиотека будет заблокирована, и удалить ее не получится), а новая dll копируется в %systemroot%\ system32\DLLCache (чтобы невозможно было восстановить исходную версию из кэша), и, наконец, подменяется сама библиотека в %systemroot%\system32. После сборки я упаковал собранный экзешник и библиотеку в самораспаковывающийся архив. Архив настроил на распаковку в %temp%, автоматическую перезапись всех файлов (кстати, не перезаписывает — доказано), и запуск %temp%\final.exe по окончании распаковки. Хочешь протестировать? Бери psexec и запусти архив на удаленной машине. Через примерно три минуты подключайся по RDP. У меня все получилось, так что двигаемся дальше.

При всей своей простоте и удобстве использования SMB — жутко глючная штука. Ктомуже, из всехтехнологий, реализованных Microsoft, это наверное, одна из самых корявых (не считая осла). Тот же метасплойт несет в себе 1А сплойтов для smb; не за горами и новые дырки. Ну а мы пока воспользуемся ms08_067, как наиболее свежей и, пока еще, достаточно пробивной. Проблема кроется в библиотеке netapi32.dll, а точнее, в функции wcscat (по крайней мере, та к ее использовал conficker). Для удаленного доступа используется RPC-Bbi3OBcUUIDAb32Afc8-1670-01d3-1278-5a47bf6ee188, то есть — обращение к интерфейсу srvsvc. Чтобы не мучить пользователей локалки, было решено создать тестовый стенд. Я накатил образ винды на VmWare с обновлениями, вышедшими до октября 2008 года (тогда появился патч), немного его подстроил и клонировал в трех вариантах. Итак, получена локальная минисеть, на которой можно оттачивать мастерство автосплойта. Моим удивлению и досаде не было предела, когда попытка применить метасплойтовский ms08_067 окончилась неудачей! Та же история постигла и милвормовский вариант, причем последний выплюнул ошибку«Маке SMB Connection error:53 (network path was not found)». Я подумал, что виноват файер, отключил его и попробовал заново. Ситуация немного изменилась, но была далека от идеала. Метасплойт неправильно определил сервис пак — «Fingerprint: Windows XP Service Pack 2+

— lang:Russian», хотя у меня был SP3. Чтобы понять, что это значит, я немного пошарил по исходникам.
Как итог, если в sp возвращается строка со знаком «+», значит, сервис пактупо неудалось определить. Что ж, выбираем в качестве цели конкретную версию (Windows XP SP3 Russian (NX)) и пробуем заново. Опять облом — «Exploit failed: The server responded with error: STATUS_ 0BJECT_NAME_NOT_FOUND (Command=162 WordCount=0)». Эта ошибка навевала мысль о невозможности подключения к пайпу. Я включил общий доступ к файлам и в случае автоопределения версии получал следующий результат — «Selected Target: Windows XP SP0/SP1 Universal — Exploit failed: The server responded with error: STATUS_OBJECT_NAME_ NOT_FOUND(Command=162WordCount=0)». Уже другое, но все равно не то. В случае явного указания цели эксплойттакже не работал. Однако если сменить пайп с BROWSER на SRVSVC. можно получить заветный шелл. Конечно, здорово, но для реализации нужно заранее знать версию операционной системы на удаленной машине, что для автосплойта совсем не катит. Но ведь я пробовал сплойт на локалке, и он работал! Оставалась последняя надежда — расшарить какую-нибудь папку. Это ничуть не изменило картину. Я готов уже был рвать на себе волосы и крушить-ломать все подряд. От бессилия я стал гуглить и наткнулся на какой-то баглист, в котором парень писал о жутких терках с фаером. Тогда так. Запускаем и сразу же останавливаем чудо-мегафаер мелкомягких… Эксплойт работает, как миленький! Причем на обоих пайпах одинаково хорошо определяет версии сервис пака и создает любезные глазу сессии. Итак, с тестовой настройкой я определился, расклонировал систему и получил стенд из трех уязвимых машин.

Для реализации автоматической системы эксплуатации необходимо обеспечить транспорт и запуск созданного бинарника на уязвимых системах. Окинув взглядом доступные нагрузки, я радостно потер руки и принялся окучивать нагрузку windows/upexec/ bind_tcp. Ее цель как раз и состоит в загрузке файла на хосте последующим исполнением. Увы, радость быстро улетучилась, когда я обнаружил, что ни хрена она не пашет. Позже я выяснил, что в никсовой версии метасплойта все работает на ура, однако я подразумеваю запуск метасплойта на поломанной виндовской машине, следовательно, нужно искать другие варианты. Выходом стало использование нагрузки windows/download_exec. Для этого необходим доступный Web-сервер, куда надо положить созданный бинарник. Сервак можно поднять на самой машине, например, используя ХАМРР. Я так и поступил. URL бинарника указываем в одноименном параметре нагрузки и запускаем эксплойт. На выходе получаем ошибку — «Exploit failed: No encoders encoded the buffer successfully». Все правильно: download_exec представляет собой цельную нагрузку, которая не умещается в буфер сплойта, поэтому нужно использовать stager, например, download_exec/bind_tcp. Проводим аналогичные настройки и получаем нужный результат. Через пару минут я мог коннектиться по RDP с админскими правами, не выбивая текущего юзера. Мое внимание привлек тот факт, что задание оставалось висеть, а сессия так и не создавалась. Для единичного воздействия это вполне нормально, но при автосплойте сети мы получим большие проблемы.

Во-первых, мoдyльdb_autopwn выполняется многопоточно и имеет ограничение на количество одновременно выполняемых заданий, которое по умолчанию равно 5. Это значит, что при успешной эксплуатации 5 узлов остальные будут бесконечно и бестолково болтаться в очереди. Во-вторых, после прогона db_autopwn неплохо было бы иметь список порутанных узлов, который удобно получать по команде «sessions -I». Конечно, эти ограничения не так уж и существенны, но хочется же все сделать красиво, — поэтому я решил немного подправить код download_exec с тем, чтобы он все-таки приводил к созданию сессии.

Код нагрузки находится по адресу %appdata%\msf32\ modules\payloads\singles\windows\download_exec. rb и предельно прост. Очевидно, что сессия не создается по причине того, что нагрузка просто не предназначена для создания шелла. Это легко поправить! Достаточно добавить параметр session со значением Msf::Sessions::CommandShetl. Исправленный исходник ждет тебя на диске.

, , , , , , , , , , ,

Бурный технологический прогресс приводит к тому, что на рынке регулярно появляются новые системные платы. К сожалению, большинство из них (впрочем, как и все новое) страдает различным количеством «детских болезней», которые впоследствии начинают лечиться обновлением ПО. Что-то лечится окончательно, что-то нет… Если ты не хочешь участвовать в этом эксперименте, то приобретай надежную испытанную платформу, например, системную плату на основе НМС lntelX58.
Системные платы, построенные на основе Х58, оснащены процессорными разъемами LGA1366. В связи стем, что процессоры семейства Intel Nehalem имеют встроенный контроллер памяти DDR3 (трехканальный), в самом чипсете он отсутствует. Шина QPI имеет пропускную способность в 25.6 Гб/с. Южный мост ICH10R поддерживает подключение добустройств РС1ех1 идо 12 портов USB. Интересной особенностью чипсета является официальная поддержка технологии nVidia SLI, что впервые реализовано в НМС Intel. Помимо всего прочего это означает, что в цену каждой коробки с такой системной платой включена некая сумма, которую nVidia требует за использование своей технологии. Если платить не хочется, то можешь приобрести системную плату, на которой SLI заблокирован. В том случае, если графических плат несколько, и ты хочешь подключить их все, то нужно учесть следующую информацию. Северный мостчипсета обеспечивает работу только 36 линий шины PCI-E 2.0, следовательно, при включение режима 3-way SLI две будут работать в режиме PCI-E 8х. Вариантов решения два — либо установить не три, а два графических ускорителя, так, чтобы на каждый приходилось по 16 линий, либо искать системную плату, на которой дополнительно установлен чип nVidia nForce 200, общающийся с северным мостом через 16 линий PC 1-Е. Теоретически, скорость работы в этом случае должна быть выше, чем у платы без дополнительного чипа.

Для исследований мы собрали специальный тестовый стенд, который дал возможность каждой системной плате проявить свои лучшие качества. Это и мощный процессор, и 6 Гб оперативной памяти Kingston, которая удовлетворяет спецификациям JEDEC (напряжение 1.5, частота 1333 МГц, тайминги 9-9-9-24).Для измерения производительности мы использовали следующее программное обеспечение: Lavalys Everest 5 (тестпамяти) и комплексный тестовый пакет Passmark Performance Test 6.1. На тестовом стенде была установлена операционная система Microsoft Windows XPSP3, перед началом исследований BIOS системной платы обновлялся до последней доступной версии. Помимо оценки производительности, мы обращали внимание на функциональность системной платы,удобство и возможности BIOS, а также на состав поставляемого вместе с платой программного обеспечения и различных кабелей, переходников и других компонентов. Также мы оценивали соотношение цены, качества и возможностей тестируемого изделия.
ASRockX58 Deluxe
ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ:
ЧИПСЕТ:северный мост— lntelX58Express, южный мост— IntelICH10R
ПОДДЕРЖИВАЕМАЯ ПАМЯТЬ: DDR3 800/1066/1333/1600/1866/2000 МГцпоп-ЕСС BIOS:AMI BIOS
СЛОТЫ РАСШИРЕНИЯ: PCI (3 шт.), PCI-E х16 (4шт.)
ВНУТРЕННИЕ РАЗЪЕМЫ: 24- и 8-контактный разъемы питания АТХ, 5
разъемов для питания вентиляторов (из них один с поддержкой ШИМ),
IEEE1394a, USB 2.0 (3 шт.), IR, аудио-разъемы для вывода на переднюю
панель корпуса, CD-in. COM, HDMI-S/PDIF
ИНТЕРФЕЙСЫ НАКОПИТЕЛЕЙ: SATA 2.0 (6 шт.), IDE, Floppy
Поддержка RAID: 0/1/5/10, Intel Matrix Storage
РАЗЪЕМЫ НАЗАДНЕЙ ПАНЕЛИ: PS/2, S/PDIF (коаксиальный и оптический), RJ-45. IEEE1394a, USB 2.0 (6 шт.). eSATA, MiniJack3.5 mm (6 шт. АУДИОКОДЕК: Realtek ALC890
СЕТЕВОЙ АДАПТЕР: Realtek RTL8111DL

Системная плата ASRock Х58 Deluxe — самое недорогое устройство в нашем тесте. Следствием этого является наличие в нем только самых необходимых компонентов, для излишеств места не нашлось. На плате можно увидеть четыре разъема PCI-Express2.0 (каждый по 16линий) и три разъема PCI 2.0, шесть разъемов SATA II, по разъему IDE и floppy; на заднюю стенку выведено шесть портов USB и порт USB\eSATA для внешних носителей. В разъемы памяти можно воткнуть планки DDR3 с частотой до 1866 МГц включительно. А если поднять базовую частоту на 10 МГц, то плата не будет возражать и против работы с оверклокерской памятью 2000 Мгц. Стоит отметить, что в имеющиеся разъемы PCI-E и PCI можно вставить 3 графических адаптера на чипах nVidia (SLI-массив из 3 плат) или 4 видеоплаты на основе решений ATI (CrossFire-система из четырех плат).

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

ASUS Р6Т6 WS
Revolution
ТЕХНИЧЕСКИЕХАРАКТЕРИСТИКИ:
ЧИПСЕТ: северный мост— IntelХ58 Express+ NVIDIAnForce200, южный мост-lntellCHIOR
ПОДДЕРЖИВАЕМАЯ ПАМЯТЬ: DDR3 800/1066/1333/1600/1866/2000 МГц
non-ECC
BIOS: AMI BIOS
СЛОТЫ РАСШИРЕНИЯ: PCI-E x16 (Зшт.), PCI-E x8 (2 шт.), PCI-E хД(1 шт.)
ВНУТРЕННИЕ РАЗЪЕМЫ: 24- и 8-контактный разъемы питания АТХ, 5 разъемов для питания вентиляторов (из них один с поддержкой ШИМ), IEEE1394a, USB 2.0 (3 шт.), IR, аудио-разъемы для вывода на переднюю панель корпуса, CD-in
ИНТЕРФЕЙСЫ НАКОПИТЕЛЕЙ: SATA 2.0 (6 шт.), SAS (2 шт.)
ПОДДЕРЖКА RAID: 0/1/5/10
РАЗЪЕМЫ НАЗАДНЕЙ ПАНЕЛИ: PS/2,5/Р01Р(коаксиальный и оптический), RJ-45, IEEE1394a, USB 2.0 (6 шт.), eSATA (2 шт.), MiniJack 3.5 mm (6 шт.
АУДИОКОДЕК: Realtek ALC890
СЕТЕВОЙ АДАПТЕР: Realtek RTL8111 DL

Слово «Revolution» в названии этой платы символизирует полный отказ от старых решений! Здесь нет не только таких портов, как1_РТи СОМ, но и достаточно востребованных сегодня PCI и IDE. В качестве памятника старины найдешь только один PS/2. Их заменяют современные решения: шесть разъемов шины PCI-E2.0, два порта eSATA, шесть разъемов SATA II и два комбинированных порта SATA\SAS. Для подключения последних в комплект поставки входят специальные переходники, в итоге их питание будет осуществляться через стандартный molex. Три из шести гнезд PCI-Express 2.0 могут работать в режиме х16 благодаря распаянному на плате чипу nVidia nForce 200.

Но два остальных — только в режиме х8, а один в режиме х4. Стоит отметить, что плата позиционируется как подходящая, в первую очередь, для установки в серверы и рабочие станции, то есть для стандартного домашнего ПК или оверклокинга она не очень подходит.
ECS Black
X58B-A

ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ:

ЧИПСЕТ: северный мост — Intel Х58 Express, южный мост — Intel ICH10R ПОДДЕРЖИВАЕМАЯ ПАМЯТЬ: DDR3 800/1066/1333/1600 МГц non-ECC BIOS: AMI BIOS
СЛОТЫ РАСШИРЕНИЯ: PCI [1 шт.), PCI-E x16 (2 шт.], PCI-E хД (1 шт.). PCI-Ex1 (2 шт.)
ВНУТРЕННИЕ РАЗЪЕМЫ: 24- и 8-контактный разъемы питания АТХ, 5 разъемов для питания вентиляторов (из них один с поддержкой ШИМ), IEEE1394a, USB 2.0 (3 шт.), IR, аудио-разъемы для вывода на переднюю панель корпуса, CD-in, IEEE139Да, S/PDIF,
ИНТЕРФЕЙСЫ НАКОПИТЕЛЕЙ: SATA 2.0 (6 шт.), eSATA 2 шт. Поддержка RAID: 0/1/0+1/5
РАЗЪЕМЫ НА ЗАДНЕЙ ПАНЕЛИ: PS/2, RJ-45. IEEE1394a. USB 2.0 (6 шт.), eSATA (2 шт.), MiniJack 3.5 mm (6 шт.)
АУДИОКОДЕК: Realtek ALC888S-VC СЕТЕВОЙ АДАПТЕР: Realtek RTL8111С
Еще одна бюджетная системная плата. Несмотря на это, имеет множество функций, аналогичных тем, что есть у куда более дорогих устройств. Это, например, ЖК-дисплей, отображающий POST-коды, кнопки Power и Reset, распаянные на системной плате, кнопка сброса настроек BIOS, два встроенных сетевых адаптера и мощная система охлаждения, состоящая из трех радиаторов, связанных между собой тепловыми трубками. Комплект поставки системной платы никак нельзя назвать бедным. В него входят кабель eSATA, а также планка расширения с двумя портами USB и портом FireWire. Парк разъемов представлен двумя гнездами шины PCI-Express 2.0 х16, гнездом PCI 2.0, одним разъемом PCI-Express хД и одним PCI Express х1.
Основной недостаток платы является прямым следствием ее бюджетной направленности — установить более двух графических адаптеров у тебя никак не получится.
Gigabyte GA-EX58-Extreme
ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ:
ЧИПСЕТ:северный мост— IntelХ58 Express, южный мост— Intel ICH 10R ПОДДЕРЖИВАЕМАЯ ПАМЯТЬ: DDR3 800/1066/1333/2100+ МГц non-ECC
BIOS: Award BIOS
СЛОТЫ РАСШИРЕНИЯ: PCI (2шт.). PCI-Eх16 (2 шт.), РС1-Ех1 (1 шт.), РС1-ЕхД(1 шт.),РС1-Ех8(1 шт.)
ВНУТРЕННИЕ РАЗЪЕМЫ: 24- и 8-контактный разъемы питания АТХ, 4 разъемов для питания вентиляторов (из них один с поддержкой ШИМ), IEEE1394-а (2 шт.), USB 2.0 (2 шт.), аудио-разъемы для вывода на переднюю панель корпуса, CD-in
ИНТЕРФЕЙСЫ НАКОПИТЕЛЕЙ: SATA 2.0 (10 шт.), IDE. Floppy Поддержка RAID: 0/1/5/10
РАЗЪЕМЫ НАЗАДНЕЙ ПАНЕЛИ: PS/2,5/Р01Р(коаксиальный и оптический), RJ-45 (2 шт.). IEEE1394a, USB 2.0 (8 шт.). MiniJack3.5 mm (6 шт. АУДИОКОДЕК: Realtek ALC889A
СЕТЕВОЙ АДАПТЕР: Realtek RTL8111D
Плата сразу привлекает к себе внимание необычным внешним видом, который возник благодаря применению на ней водоблока (на северном мосту), а также системы охлаждения чипсета и элементов питания процессора. Последние, кстати, это фирменная фишка компании Gigabyte, применяемая на матплатах серии Ultra Durable 3. Благодаря всем этим девайсам, а также дополнительному радиатору из комплекта поставки, плату можно смело использовать для оверклокинга. Кроме того, продвинутым пользователям придется по вкусу наличие на плате кнопок Power и Reset, дисплея с POST-кодами, индикаторов, помогающих понять, что же не работает, а также кнопка сброса BIOS. Если твой музыкальный и видеоархив огромен, то 10 портов SATA 2.0 помогут решить эту проблему. В дополнение ко всему, эта системная плата поддерживает стандарт питания Intel VRD 11.1
Обратной стороной наличия на плате мощной системы охлаждения стало то, что она немного мешает установке длинных плат в разъемы PCI-Express.
Intel DX58 SO
ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ:
ЧИПСЕТ северный мост— IntelХ58 Express, южный мост— Intel ICH10R
ПОДДЕРЖИВАЕМАЯ ПАМЯТЬ: DDR3 800/1066/1333/1600 МГц поп-ЕСС BIOS: AMI BIOS
СЛОТЫ РАСШИРЕНИЯ: PCI (1 шт.), РС1-Ех16(2шт.). РС1-Ех4(1 шт.)
ВНУТРЕННИЕ РАЗЪЕМЫ: 24- и 8-контактный разъемы питания АТХ, 5 разъемов для питания вентиляторов (из них 2 с поддержкой ШИМ), IEEE1394a, USB 2.0 (2 шт.), IR, аудио-разъемы для вывода на переднюю панель корпуса
ИНТЕРФЕЙСЫ НАКОПИТЕЛЕЙ: SATA 2 0 (6 шт.)
ПОДДЕРЖКА RAID: 0/1/5/10
РАЗЪЕМЫ НАЗАДНЕЙ ПАНЕЛИ: S/PDIF (оптический), RJ-45. IEEE1394а. USB 2.0 (8 шт.), eSATA (2 шт.). MiniJack 3.5 mm (6 шт.)
АУДИОКОДЕК: Realtek ALC889
СЕТЕВОЙ АДАПТЕР: Realtek RTL8111D
Компания Intel, как производитель чипсета, на котором построена ее же системная плата, может позволить себе отступить от классической схемы компоновки подобных устройств. У данной платы гнездо для ЦП находится ниже, чем мы привыкли его обычно видеть, а над ним распаяны разъемы для памяти (4 штуки). Кроме того, северный мост примостился не снизу от процессора. Порты PS/2 вендор предал анафеме, разместив вместо них два разъема eSATA. Разъемам IDE места на этой плате также не нашлось, вместо них нам предложены шесть SATA-портов. Кроме того, есть пара разъемов PCI-Express х1, два порта PCI-Express х16 и один х4. В комплект поставки устройства входит вентилятор, который предназначен для установки на северный мост. Он понадобится тем, кто воспользуется уникальной функцией местной BIOS, которая позволяет вручную установить максимальную мощность процессора (Power Slope), потому что по умолчанию плате вполне хватало и имеющегося пассивного охлаждения. Есть в BlOS’e и другие интересные энтузиастам функции.
Возможно, тебе будет не хватать четырех разъемов для памяти, особенно учитывая, что цена на этот компонент постоянно снижается, а необходимость в нем увеличивается. На долговечности и надежности работы данной системной платы, особенно при активном оверклокинге, может отразиться наличие конденсаторов с жидким электролитом.
MSI Eclipse SLI
ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ:
ЧИПСЕТ: северный мост — Intel Х58 Express, южный мост — Intel ICH10R
ПОДДЕРЖИВАЕМАЯ ПАМЯТЬ: DDR3 800/1066/1333/1600 МГц поп-ЕСС BIOS: AMI BIOS
СЛОТЫ РАСШИРЕНИЯ: PCI (2 шт.). PCI-E х16 (Зшт.), PCI-E х1
ВНУТРЕННИЕ РАЗЪЕМЫ: 24- и 8-контактный разъемы питания АТХ. 6 разъемов для питания вентиляторов (из них один с поддержкой ШИМ), IEEE1394a,USB2.0(2ujT.)
ИНТЕРФЕЙСЫ НАКОПИТЕЛЕЙ: SATA 2.0 (10 шт.). IDE
ПОДДЕРЖКА RAID: 0/1/5/10/JBOD, Intel Matrix Storage
РАЗЪЕМЫ НАЗАДНЕЙ ПАНЕЛИ: PS/2. RJ-45(Ethernet) - 2 шт., IEEE1394a, USB 2.0 (8 шт.). eSATA - 2 шт.
АУДИОКОДЕК: в комплекте поставляется дискретная звуковая карта Creative Sound BlasterX-FiXtreme Audio
СЕТЕВОЙ АДАПТЕР: Realtek 8111С (10/100/1000 Мбит/с) - 2 шт.
Очень необычная и функциональная системная плата. Уже то, что в ней нет встроенного аудиокодека, а в комплекте поставки идет звуковая плата Creative Sound BlasterX-FiXtreme Audio, выделяете из ряда подобных. Крометого, в коробке ты найдешь специальное энергосберегающее устройство GreenPower Genie, которое ты сможешь включить через BIOS и контролировать с помощью специального ПО MSI. На плате распаяно 10 разъемов SATA, 2 порта eSATAVJSB присутствуют на задней панели. Имеющийся графический дисплей умеет отображать не только POST-коды. но и другую информацию, к примеру, температуру. Также плата хорошо подходит для оверклокинга.
Несмотря на все навороты, системная плата обладает серьезной проблемой — несовместимость со многими модулями памяти (даже с теми, на которых есть отметка о совместимости с процессорами Intel Core i7). Наиболее ярко это проявилось при попытке установить модули производства OCZ. Так что перед тем, как купить память, которую ты планируешь сюда установить, загляни на сайт MSI. посмотри, какую память рекомендует сам вендор.
Выводы
Тестируя платы на проверенном временем чипсете, можно делать определенные выводы, не боясь, что какие-то вещи зависят от детских болезней НМС. Сегодня награду «Выбор редакции» получает плата Gigabyte GA-EX58-Extreme, — это достойный выбор
для настоящего энтузиаста оверклокинга. «Лучшая покупка» присуждается плате Intel DX58, которая является лучшим бюджетным решением в нашем тесте. Кроме того, хотелось бы отметить платы ASUS P6T6WS Revolution и MSI Eclipse SLI. Они обе обладают выдающимся функционалом, и все будет зависеть от того, что тебе важнее. Плата ASUS имеет интерфейс SAS и дополнительный чип nVidia nForce 200 — довольно редкий случай. Устройство от MSI манит входящей в комплект поставки дискретной звуковой платой, многофункциональным информационным дисплеем и десятью разъемами SATA. Выбор за тобой.

, , , , , , , , , , , , , , , , , , , , , , , , , ,

Стой! He листай дальше. Если ты до сих пор воспринимаешь SSH исключительно как безопасную альтернативу устаревшему Telnet, не рискуй вызывать гнев богов, тьфу, разработчиков протокола. Ниже мы собрали самый полный мануал по правильному использованию Secure Shell на полную катушку.

Несмотря на большое разнообразие SSH-клиентов, особой проблемы с выбором не возникает. Общепризнанных всего два — PuTTY (www.chiark.greenend.org.uk) и SecureCRT (www.vandyke.com). и оба действительно хороши. Но если за «цитрамон» разработчики просят денежки, то PuTTY распространяется прямо в открытых исходниках. По этой причине выбор зачастую остается именно за ним. Более того, несмотря на то, что многие воспринимают путти как виндовый клиент, у него есть версии и для UNIX. Саму прогу ты видел в действии, когда смотрел ролики Visualhack++. С помощью него ты можешь коннектиться к своим сервакам через: Raw. Telnet, Rlogin. FTP (SFTP), SSH1, SSH2. В общем смысле. PuTTY — это комплект утилит, куда помимо непосредственно клиента (putty.exe) входят тулзы:

• puttygen — генератор rsa/dsa ключей, используемых для авторизации;
• pagent — агент аутентификации, который хранит ключи в памяти, благодаря чему ты освобождаешься от ввода паролей ручками;
• plink — интерфейс командной строки для
putty;
• pscp — утилита, обеспечивающая безопасное копирование файлов;
• psftp — безопасный ftp-клиент для копирования, просмотра, переименования файлов
и т.д.

С некоторыми из этих утилит мы еще познакомимся далее.
Невзирая на личную симпатию к PuTTY, долгое время я отдавал предпочтение SecureCRT. Почему? По большому счету — за одну маленькую, но очень полезную опцию, не реализованную в патти — поддержку табов для разных сессий. Если у тебя когда-нибудь было открыто пять, а то и больше окошек PuTTY для разных серверов, ты знаешь, насколько тяжело ориентироваться среди них. Разработчики не спешат добавлять поддержку табов в утилиту, но зато с этим справилась группа французских энтузиастов, выпустив замечательную тулзу PuTTY Connection Manager (puttycm.free. fr). Что важно, это не какая-то там переделка исходников оригинального PuTTY, которая могла повлечь за собой новые баги, в том числе и безопасности. Напротив, за SSH-сесии по-прежнему отвечает исходный бинарник (putty.exe), a PuTTY Connection Manager лишь объединяет открытые окна в удобный интерфейс с табами, а также предоставляет продвинутый интерфейс для настроек подключения. Поддержка табов — это не единственный конек написанной на С# надстройки над PuTTY. После недели использования с трудом можешь представить жизнь без полезных

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

Самый простой способ авторизироваться на удаленном сервере — использовать связку логин/пароль. Понятно, что если к серверу коннетишься раз в день, то набрать связку вручную не составит труда (при условии, что помнишь их). PuTTY для каждого подключения позволяет сохранить настройки. В PuTTY ты можешь создавать профили для различных SSH-серверов. так что не придется вбивать настройки для конкретного сервера, когда ты захочешь к нему очередной раз подсоединиться. В таком профиле, например, можно ввести логин, который будет использоваться для входа. Давай попробуем создать профиль для сервера. Для этого переходим в категорию Sessions. Здесь вводится IP-адрес или имя хоста, порт, а также протокол. Можно указать имя пользователя для подключения, под которым ты хочешь заходить в систему. Перейди в «Connection -> Data» и укажи в «Auto-login username» имя пользователя (например. UserAcc). Затем снова иди в категорию Sessions. Под надписью Saved Sessions (сохраненные сессии) введи имя профиля, например, session!, после чего кликай на Save. В следующий раз, когда будешь запускать PuTTY. просто выбери подходящий профиль из Saved Sessions, кликни Load и Open. Причем, имя пользователя введется автоматически. Стандарт на протокол SSH запрещает сохранять пароль, но позже мы научимся обходить это ограничение. Для авторизации на удаленной системе можно сгенерировать и использовать пару ключей (открытый/закрытый) для SSH-подключения к удаленной системе. В архив с программой входит дополнительная утилита PuTTYgen, которая поможет сгенерировать открытый и приватный ключ. Открытый ключ, как уже говорилось, необходимо передать на удаленный сервер. В случае виндового сервера — путь к нему достаточно указать в настройках аккаунта. Под никсами и OpenSSH необходимо вставить в файл /.ssh/ authorized_keys2 ключ в одну строку:

mkdir ~/.ssh chmod 700 -/.ssh vi  ~/.ssh/authorized_keys2 ssh-dss AAAAB3NzaClkc3MAAAE Huw2FekFNM7pMgEQi57k= dsa-key-20061205 chmod 600 -/.ssh/authorized_keys2

Файл должен читаться/правиться только данным пользователем, поэтому последней командой мы устанавливаем нужные права доступа.

Что касается закрытого ключа, путь к нему требуется указать в настройках нужной сессии клиента (SSH -> Auth -> Private key file for authentification). Добавлю, что даже при использовании пары ключей приходится каждый раз вводиться секретную фразу. Это сильно раздражает при частых коннектах. От проблемы может избавить утилита Pageant, которая также входит в стандартный комплект PuTTY.
Помимо этого, можно воспользоваться так называемым sshproxy (sshproxy-project.org/ about!, написанным на Python. Тулза позволяет подключаться к удаленным хостам без необходимости ввода паролей или ключей. По сути, это маленький демон, который сидит в локалке или DMZ-зоне. Когда пользователь коннектится к нему с помощью SSH-клиента, то sshproxy авторизирует его и проверяет права для доступа к нужному сайту. Если клиенту это разрешено, прокси выполняет соединение на удаленный сайт, используя пароль или ключ, сохраненные в его базе данных.

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

• в окне конфигурации подключения в категории «Session» указать Host Name (твой_55Ь_сервер), Port (22), Protocol (SSH);
• в категории «Connection/SSH/Tunnels», в секции «Add new forwarded port», указать «Source port» (локальный_ порт, например, 666), Destination (адрес_прокси_или_ сервера:3306);
• выбрать пункт Local и нажать кнопку «Добавить». После установления соединения можно запускать браузер, указав в качестве прокси 127.0.0.1 и порт, указанный в качестве Source Port (например, 666).
В unix-системе достаточно набрать команду:

ssh -L666 : адрес_прокси__или_сервера: порт -п имяпользователя@адрес_зз1т_сервера

Аналогичным образом можно поднять туннель до MySQL-сервера, пробросить VNC-сессию до удаленного рабочего стола и т.д.

Что такое «поднял 2-хоповый ssh тунель (2-hop ssh tunnel)»? SSH часто используется как транспортный протокол для безопасной передачи данных между другими приложениями, например, небезопасного VNC [удаленный рабочий стол). Однако бывают ситуации, когда установить туннель невозможно: например, между двумя хостами нет возможности прямого подключения (банально из-за ограничений файрвола). Если ввести некоторый хост, с которым подключение может установить каждая из сторон, то его реально использовать как посредника, прибегнув к приему two hop tunneling (или. проще говоря, — туннель через дополнительный гейт). Достигается это так: сперва мы используем ssh, чтобы переадресовать трафик на порт той машины, с которой возможно установить соединение, и далее заставляем ее переадресовывать трафик на нужный нам хост (с которым для нее также возможен коннект). В следующем примере мы будем осуществлять подключения с машины «myhome.example.org», в качестве промежуточного хоста будет выступать «gateway.example.com», а в роли желанной машины будет недоступный напрямую SSH-демон на «serverexample.com».
Наша задача — создать двух-хоповый туннель. Для этого на машине «myhome.example.org» запускаем команду:

ssh -f -N -L 51526:server.example.com:22 -2 gateway.example.com

Вот и все! В результате. SSH-подключения на 51526 порт на машине myhome.example.org будут туннелироваться на нужный хост (serverexample.com). Другими словами, вместо невозможного напрямую соединения на server.example. com:22, мы просто подключаемся на локальный хост и порт 51526. а все заморочки возьмет на себя механизм SSH. Кстати, в качестве порта можно использовать и любой другой, но желательно из диапазона 49152-65535.

С никсами все просто. Чуть ли не стандартом де-факто является всем известный OpenSSH, да и практически в любом дистрибе он установлен по умолчанию. В условиях ограниченных ресурсов (на старых компьютерах, аппаратных роутерах, точках доступа и т.д.] зачастую устанавливают DropBear (matt.ucc.asn.au/ dropbear/dropbear.html). Под виндой, впрочем, поднять SSH-сервер — тоже не бог весть, какая проблема. Для тех же самых OpenSSH и DropBear есть полноценные порты, но их трогать не будем. Обходим стороной и продвинутый, но платный WinSSHD [www.bitvise.com/ winsshd). В сравнении с WinSSHD программа MobaSSH (mobassh.mobatek.net) чарует своей простой. Все, что требуется для запуска полноценного SSH-сервера с авторизацией, используя аккаунты пользователей в системе — это нажать одну кнопку «lnstall». В системе тут же появится новая служба. После соединения с MobaSSH и получения приветствия демона становится понятно, что это не что иное, как сильно переработанный порт OpenSSH, собранный с помощью компилятора Cygwin. Для навигации по системе используются никсовые команды [Is вместо dir для отображения содержимого текущего каталога и т.д.). Имей в виду некоторую специфику демона. Все локальные диски доступны через директорию /cygdrive. Достучаться до сетевых ресурсов можно, используя привычный адрес в UNC-формате: //< LA NJ/VO R KSTATIО N >, а вносить изменения в реестр — через директорию /registry. Помимо этого есть ряд полезных команд:

MobaHwInfо:  детальная информация об ОС и железе
MobaSwInfo:  список установлено в системе софта
MobaTaskList, MobaKillTask: список процессов и удаление нужного TCPCapture:  сетевой монитор scp,  sftp:  передача данных по криптованному ssh-соединению rsync,  wget: синхронизация локальных папок с сетевыми ресурсами MobaSSH на 100% совместим со всеми никсовыми и виндовыми клиентами. Полностью с нуля, а поэтому и без всяких юниксовых замашек написан бесплатный freeSSHd (www. freesshd.com). С установкой также не возникнет проблем; причем, как будет работать демон, в виде сервиса системы или обычного приложения, предоставляется на выбор пользователю. Точно так же можно выбрать и оболочку — по умолчанию выбирается стандартный cmd.exe. Вообще, настроек не то, чтобы много, но как раз достаточно, чтобы все настроить под себя, включая авторизацию пользователя, приветственный баннер, параметры туннелирования. SFT и т.д.

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

plink my-ssh-session

По разным причинам соединение может иногда «падать». Будь уверен, упадет оно в самый неподходящий момент. Чтобы этого не произошло, отслеживай состояние подключения и вновь устанавливай его при необходимости. Когда-то подобные скрипты я писал вручную, но сейчас есть отличная утилита MyEnTunnel (nemesis2.qx.net/pages/ MyEnTunnell. Она незаметно сидит в трее и поддерживает активными все необходимые SSH-туннели. Принцип прост: тулза отслеживает процесс Plink. Если процесс умирает (соединение оборвано, сервер перегрузился или по какой-то еще причине удаленный хост стал недоступен), MyEnTunnel автоматически перезапустит Plink. Системные ресурсы при этом используются по минимуму. Юзер вправе сам указать, как часто нужно проверять наличие коннекта: в самом скромном режиме «Slow Polling» MyEnTunnel проверяет соединение раз в секунду. Несмотря на то. что тулза написана под винду. она отлично чувствует себя с Wine'oM и под никсами.

Когда мы говорим об SSH, не стоит забывать о безопасной передаче файлов (Secure file transfer), реализуемой на базе протокола SFTP (SSH File Transfer Protocol) и уже устаревшего протокола SCP (Secure СоРу). Подключившись к серверу по SSH, с помощью специального клиента можно выполнять все основные операции с файлами: загружать их на сервер, переименовывать файлы и папки, изменять свойства файлов, а также создавать символические ссылки и ярлыки. Одним из самых известных клиентов под винду является WinSCP (www.winscp. net). Помимо самых стандартных опций, тут есть и ряд бонусов. Для обновления некоторых сайтов я нередко использую функцию по синхронизации директорий, а автоматизировать часть рутинной работы на сервере, где у меня хранятся бэкапы, помогает возможность написания простых скриптов. Вдвойне приятно, что WinSCP интегрируется с Pageant и позволяет использовать уже сохраненные публичные ключи и сохраненные парольные фразы для подключения. Впрочем, зачем вообще заморачиваться с запуском каких-то программ? Файлы с удаленного сервера можно примонтировать прямо в систему, и. все равно, операции с ними буду осуществляться через SSH. ExpanDrive (www.expandrive.com), которая раньше называлась SFtpDrive, позволяет прозрачно примонтировать новый логический диск и работать с ним. как если бы это была, к примеру, флешка. Я использую эту прогу в достаточно странном ключе, а именно — для доступа к файлам некоторых никсовых систем из-под винды :).

Ситуация: дома у тебя есть настроенный клиент, с параметрами сессий, ключами для доступа, сохраненными логинами и паролями. Приятно воспользоваться всеми этими благами удаленно. В этом плане интересной разработкой стал бесплатный Telnet/SSH клиент Тега Term (http://www.ayera.com/teraterm]. Фишка в том, что тулза имеет встроенный веб-сервер, который включается через меню «Web — Accept HTTP Connections». После этого ты получаешь практически полноценный клиент через обычный браузер, просто набрав адрес машины и порт, на котором он принимает соединения. «А ведь наверняка же есть реализации SSH-клиента. полностью написанные для веб», — задумался я. В результате несложных поисков попалось сразу несколько реализаций, но самой качественной оказался WebShell (www-personaLumich.edu/-mressl/websheil). Единственная трабла — он написан на Python, а потому установить его на простой хостинг не получится. Но зато он полностью сделан на Ajax, а использовать его удобно не только с обычного компа, но и с телефона (кстати, ссылки на клиенты под различные мобильные платформы ты найдешь во врезке).

Поднять SSH-туннель и пустить через него VNC или RPD сессию проще простого. Однако для доступа к удаленным хостам по RPD-протоколу есть специальная утилита WiSSH (www.wissh.com). WiSSH позволяет осуществлять доступ через Gateway SSH-сервер к компьютерам со следующими системами: Windows 2000 Terminal Servers; Windows 2003 Terminal Servers; Windows NT Terminal Server Edition; Windows XP и Windows 2000/2003 с включенным Remote Desktop. Пользователи смогут работать на удаленной машине так же. как если бы находились непосредственно рядом с ней.

Об одном из видов автоматизации мы уже говорили. В случае использования PuTTY Connection Manager для любого соединения можно задать последовательность команд, которые будут выполняться после успешного входа на удаленной системе. Вот еще один способ упростить жизнь админу. в распоряжении которого имеются несколько серверов с одинаковой конфигурацией. С помощью утилиты ClusterSSH (clusterssh.sourceforge.net) можно администрировать сразу несколько удаленных хостов. Прога открывает несколько SSH-соединений с различным узлами, а также одну общую администраторскую консоль. Любая команда, набранная в этой консоли, реплицируется, т.е. передается по всем SSH-соединением. Это избавляет тебя от повторения монотонной работы. К сожалению, подобное решение есть только под никсы. ClusterSSH управляет несколькими окнами xterm через единый интерфейс, причем сам он частично написан Perl/TK.

Авторизация при помощи логина и пароля считается самой небезопасной. В большинстве случаев рекомендуется вообще отключать ее на сервере, а заодно деактивировать поддержку устаревшего протокола SSH1. Чтобы сделать это в OpenSSH — а он наиболее распространен — необходимо внести поправки в конфиг:

vi  /etc/ssh/sshd_config [...]
PasswordAuthentication no UseРАМ no [. . .]

Если отключать авторизацию не хочешь, то надо установить примитивную систему предотвращения вторжений. Например, Sshguard (sshQuard.sourceforge.net). Простой демон проверяет записи в журналах (syslog. syslog-ng, metalog, multilog, raw) и способен вычислять подозрительную активность вроде попыток подбора паролей. Для блокировки таких IP-адресов используется локальный фильтр пакетов (pf, ipfw, netfilter/iptables или файл hosts, allow). Поддерживаются сервисы sshd. dovecot, proftpd, риге-ftpd, FreeBSD ftpd. UWimap (imap, pop). Аналогично работают Fail2ban (www.fail2ban.org) и Sshdfilter [http://www.csc.liv.ac.uk/-gre sshdf ilter).

, , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

Прожорливость современных Linux-дистрибутивов легко ощутить, запустив один из них на компе с 512Мб ОЗУ или купив ASUS ЕееРС. Нерасторопная загрузка десктопа, борьба приложений за ресурсы, тонущий под собственным весом Firefox и постоянно шуршащий жесткий диск — зрелище пугающее и обескураживающее. Где же тот Linux, который способен работать на машинах с 16 Мб оперативки и процессором семейства i486? А ведь он до сих портам, внутри, задавленный грузом многочисленных библиотек, бесполезных демонов, жирных приложений и красивостей рабочего стола.

Q. В моем любимом дистрибутиве Linux загружается огромное количество сервисов. Это занимает кучу времени. Можно ли как-то ускорить загрузку?
А. Ну, например, можно попытаться организовать параллельный запуск сервисов. Это несложно, найди в файле /etc/init.d/гс такой код:

for i in /etc/rc$runlevel.d/S*
do case “$runlevel” in
*) startup $i start ;; esac done

И замени строку «*) startup $i start;;» на «*) startup $i start & ;;». Так загрузочные процессы будут запускаться параллельно: последующий сервис начнет стартовать, не дожидаясь выполнения предыдущего. После модификации конфига перезагрузи систему. Если тебе повезет, и Linux запустится корректно, то время его запуска сократится примерно в два раза. Но он может и не загрузиться. У этого способа есть один недостаток. Представим, что нам нужно запустить к сервиса: А, В, С и D, причем сервис С — довольно громоздкий, и его запуск занимает, скажем, секунд 15-20, а сервис D
— небольшой, но он зависит от С. Получается, что С еще не запущен, a D запущен, но он не может работать без С. В результате, D окажется неработающим. В реальной системе таких сервисов можетбыть много. Что же делать? Ответ прост: нужно использовать программу cinit, которая параллельно запускает сервисы, но при этом проверяет зависимости. Таким образом, cinit не запустит сервис D, если сервис С, необходимый для корректной работы D, еще не запущен.

Прочитать о правильной настройке cinit можно по адресу: nico.schottelius.org/documentations/ speeches/metarheinrrtain-chaosdays-110Ь/ cinit/view. Еще один вариант — перевести дистрибутив на систему инициализации InitNG (Init Next Generation). За подробностями обращайся к статье «Молниеносная загрузка тукса»зс _03_2006). Кслову,убунтовский upstart, использующий метод параллельного запуска сервисов, грузит дистрибутив до окна логина за -10 секунд.

Q. А как отключить ненужные сервисы?
А. Отключить сервисы можно с помощью графического конфигуратора (drakxservices в Mandriva, system-config-services в Fedora, services-admin в Ubuntu), но намного проще «прибить» ссылку в соответствующем rcN.d-каталоге (или же переместить ее в другой каталог — на случай, если когда-то понадобится включить сервис).

Q. Какувеличить объем виртуальной памяти?
А. Набери команду free в консоли. Сколько виртуальной памяти (физическая память плюс область подкачки) сейчас свободно? Если все заполнено, например, осталось несколько мегабайт физической памяти и столько же в своп-области, значит, памяти катастрофически не хватает. Лучший совет — это купить еще один модуль оперативки. В качестве временного решения могу предложить создать и активировать дополнительный файл подкачки (в нашем случаеего размер — 512 Мб):

# dd if=/dev/zero of=/swap/sw-f ile bs=lk count=524288
# mkswap /swap/sw-file 524288
# swapon /swap/sw-file

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

Q. Как повысить производительность виртуальной памяти?
А. Если ты работаешь с небольшими программами и часто переключаешься между ними, можно установить коэффициент подкачки равным 20 или 30. В этом случае переключение между приложениями будет мгновенным, но замедлится их работа. Поскольку приложения небольшого размера, то это не будет заметно.

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

Тогда переключение между приложениями будет медленное, зато основное приложение будет работать быстро. Изменить значение коэффициента подкачки можно с помощью команды:

swappiness
Или через /etc/sysctl.conf:
vm.swappiness =20

Поэкспериментируй с различными параметрами — только так можно подобрать для себя оптимальное значение. Кроме того, не мешает ограничить размер файлового кэша, чтобы он занимал меньше ОЗУ (так мы предотвращаем свопинг), и активировать принудительный сброс буфера в случае, если приложения суммарно займут более половины памяти:

vm.pagecache = 90 vm.dirty_ratio = 50

Q. Как оптимизировать работу жесткого диска?
А. В большинстве случаев система сама подбирает оптимальные параметры работы с жестким диском. Используя утилиту hdparm, есть возможность дополнительно повысить производительность. Чтобы получить информацию о текущих настройках харда, запустим команды:

$ hdparm /dev/sda $ hdparm -i /dev/sda

Параметров будет получено много, но на производительность напрямую влияют лишь некоторые:
• MaxMultSect/MultSect — максимальное/ текущее число секторов, которые диск может считать за один проход (для максимальной производительности они должны совпадать);
• РЮ modes/DMA modes — режимы, которые поддерживает жесткий диск (режим, помеченный звездочкой, является текущим);
• multcount — число одновременно считываемых секторов;
• 1/0 support — режим работы жесткого диска (16-битный режим, 32-битный режим или 32-битный синхронный режим);
• using_dma — использовать DMA или нет;
• readahead — количество секторов для упреждающего чтения.
Переопределить установки для конкретного диска можно в командной строке (вступают в силу немедленно) или —указав их в конфигурационном файле/etc/hdparm.conf или/etc/ default/hdparm (потребуется перезагрузка). Влияние изменений можно протестировать при помощи команды «hdparm -tT/dev/sda». Для примера включим DMA(-dl),32-битный режим I/O (c1); multicount выкручиваем по максимуму (-m64), а упреждающее чтение ставим равным multicount (-абЛ). Установка параметра *-и1* разрешает драйверу параллельно обрабатывать несколько прерываний, что повышает производительность:

# hdparm -ulcldlm64a64 /dev/sda

Дополнительно можно поиграться с параметром ‘-W (0/1), отключающим/включающим кэширование. Его значение зависит от производителя и модели харда и по умолчанию не определено.
Q. Как задать отдельной программе приоритет для работы с диском?
А. Аналогично nice, позволяющей изменить приоритет процесса, утилита ionice задает приоритет на использование харда для процесса или приложения. В Ubuntu ionice входит в пакет schedutils. Приоритет указывается при помощи класса и собственно приоритета в виде:

ionice -с класс -п приоритет -р PID

Приоритет — число от 0 до 7 (чем меньше число, тем он выше). В позиции класс три значения:
1. Realtime — планировщик дает преимущество при доступе к диску выбранному процессу, без внимания на работу других процессов (8 уровней приоритета [0-7]);
2. Best Effort — класс, устанавливаемый по умолчанию для всех процессов (8 уровней приоритета);
3. Idle — программа получает право на использование жесткого диска только в том случае, если другая программа не требует диск; приоритеты не задаются.
Вместо PID можно указать имя процесса:

$ sudo ionice -с2 -n0 mplayer

Q. Как разогнать файловую систему?
А. Через отключение ненужной функциональности. Любая современная ФС достаточно гибка, но напичкана большим количеством функций, которые лично тебе могут и не понадобиться. Возьмем, к примеру, ext3, наиболее популярную сегодня Linux-ФС. Она обладает двумя важными, но далеко не всегда необходимыми функциями: журналирование и временные метки последнего доступа к файлу. Обе они требуются, но только в случае, если твоя система целиком «сидит» на одном разделе. Если же установить ОС на несколько разделов, каждый из которых будет ответственен за хранение файлов конкретного каталога, — мы получим возможность использовать для них разные файловые системы с различным уровнем функциональности. Смотри:
• Раздел #1. Корень файловой системы, то есть каталог
• Раздел #2. Каталог/usr, хранящий все устанавливаемое программное обеспечение.
• Раздел #3. Каталог/home, личные данные пользователей.
• Раздел #4. Каталог/tmp, временные файлы.
• Раздел #5. Каталог/var, множество изменяемых во времени данных приложений.
Зачем журналировать и обновлять время последнего обращения к файлам для корня файловой системы, который изменяется очень редко (обычно во время переустановки ядра или обновления дистрибутива)? Ответ: незачем. Монтируем к корню шуструю ext2 (которая не ведет журнал) с опцией noatime (не использовать временные метки последнего доступа). То же относится к каталогу/tmp, за исключением того, что в этом случае atime лучше оставить. Каталог/var хранит множество мелких файлов, для управления которыми отлично подходит ReiserFS./home — важнейшие данные пользователя, поэтому к нему лучше подключить журналируемую ФС.
Кстати, для ускорения доступа к каталогу/tmp можно использовать файловую систему tmpfs, хранящую все свои файлы в оперативной памяти. Это отличное подспорье тогда, когда памяти много, а девать ее некуда. Вот строка для/etc/fstab:

tmpfs /tmp tmpfs size=512m/mode=1777 О О

Можно пойти и радикальным путем: не разбивать диск на множество разделов, а просто перейти на файловую систему ext4. В июльском номере журнала, в статье «На пути к совершенству», мы много говорили о ней и показали бенчмарки, которые доказывают, что производительность ех14за последнее время возросла настолько, что другие ФС на ее фоне выглядят поделками второкурсников.

Q. Что можно сделать с видеоподсистемой?
А. Первое — отказаться от использования стандартных видеодрайверов, поставляемых в комплекте с Х.огд. Особенно ущербны драйвера для карточек ATI и nVidia, и если первые способны хотя бы на что-то в плане 20-ускорения (во многом благодаря открытию некоторых спецификаций), то вторые — просто ужасны. Я на собственной шкуре ощутил примитивизм драйвера nv, когда попытался поиграться с КОЕ4.1.1, По уровню тормознутости картинка легко обставляла UT, запущенный на 166′ом пентиуме (тоже личный опыт), и это несмотря на 1 Гб оперативки, 2.6-гигагерцовый камень и полностью отключенные эффекты. После установки официальных дров кеды полетели быстрее XFCE. Ответ на вопрос «почему?» легко найти, прочитав документацию Knv, которая прямо говорито полном отсутствии функций 2й-ускорения (именно 2D) в драйвере. Второе, что можно сделать —установить простую утилиту nvclock [www.linuxhardware.org/ nvclock), которая позволит разогнать видеокарту как по частоте видеочипа, так и по памяти. На моем домашнем компе установлена старенькая видеокарта nVidia 5900FX. Когда-то давно я запускал на ней первый Far Cry (через wine). Поначалу он притормаживал даже на средних настройках графики, но после выполнения команды «nvclock -f -n 540». которая увеличила частоту чипа с дефолтовых 400 МГц до 540, игрушка начала без проблем бегать на высоких настройках.
Третье — отключить Зй-эффекты рабочего стола. Операция, которая не несет особого прироста производительности (эффекты не грузят проц, а для 30-ускорителя это просто семечки), может повысить скорость реакции системы за счет снижения времени на исполнение дополнительного кода и количества переключений контекста.

Q. Как отключить Compiz?
А. Все зависит оттвоего дистрибутива. Например, в Ubuntu нужно выполнить команду «Система -> Параметры -> Внешний вид» и на вкладке «Внешний вид» отключить эффекты рабочего стола. В других дистрибутивах можно использовать универсальные команды:

# gtk-window-decorator –replace (если у тебя GNOME)
# kde-window-decorator –replace

Q. Можно ли как-то использовать ресурсы видеоадаптера во время его простоя?
А. Да, можно. ATI и nVidia, два основных игрока на рынке видеоадаптеров, не так давно выпустили специальные фреймворки, позволяющие перенести некоторые прожорливые вычислительные задачи на GPU. Позднее была сформирована специальная группа KhronosGroup, разработавшая стандарт OpenCL (www.khronos. org/opencll. который описывает стандартизованный интерфейс доступа kGPU для вычислительных задач. Беда втом, что пока почти не существует приложений, использующих эту технологию. А вот задействовать установленную на видеоадаптер высокоскоростную память удастся прямо сейчас. Ядро Linux включает в себя специальный драйвер Memory Technology
Device (MTD), который позволяет адресовать не только оперативную память, но и память любого устройства, подключенного через шину PCI. Методика, описанная в статье en.gentoo-wiki.com/ wiki/TIP Use memory on video card as swap, использует этот драйвер для создания (псевдо) блочного устройства, которое будет использовать видеопамять в качестве хранилища данных. На устройстве можно создать своп или файловую систему для хранения файлов, например, каталога Amp. Интересная особенность: подход отнюдь не отменяет возможности использования графических приложений, позволяя зарезервировать небольшой кусочек памяти для VGA-режима.

Q. Интернет-соединение тормозит, периодически появляются раздражающие задержки. Как исправить?
А. Это известная проблема в некоторых дистрибутивах Linux с включенной по умолчанию поддержкой IPv6. Если поддержка новой версии протокола IP в системе не нужна, ее очень просто отключить. Для этого достаточно закомментировать строку, содержащую «ipv6», в конфиге /etc/modprobe.conf, или занести этот модуль в блэклист, добавив в файл /etc/modprobe.d/ blacklist.local запись «blacklist ipv6». Если проблема не решена, следует включить/отключить параметр TCP window scaling, определяющий масштабирование TCP-окна, то есть установку количества пакетов, которое может быть послано без подтверждений. Временно отключить его можно командой:

# sysctl -w net.ipv4.tcp_window_ scaling=0

Если это поможет, заносим следующую строчку в/etc/sysctl.conf:

net.ipv4.tcp_window_scaling=0

Другой вариант — не отключать «ТСР window scaling», а попробовать подобрать оптимальные параметры для TCP-буфера чтения и записи:

net . ipv4.tcp_rmem = 4096 87380 174760
net.ipv4.tcp_wmem = 4096 87380 174760

Аналогичный параметр есть и для UDP:

net.ipv4.udp_rmem_min = 16384 net.ipv4,udp_wmem_min = 16384 net.ipv4.udp_mem = 8388608 12582912 16777216

Ядро Linux 2.6 включает алгоритмы автоматической оптимизации буферов принимающей и отправляющей сторон.

, , , , , , , , , , , , , , , , , ,

Пользователь судит о программе в первую очередь потому, насколько с ней удобно и понятно работать. Поэтому в хорошей программе необходимо уделить немалое внимание разработке пользовательского интерфейса. В этой статье мы рассмотрим азы написания GUI на языке Python.

Практически любой серьезный язык программирования имеет средства для написания GUI. Python — не исключение. Но разработка GUI на нем имеет два преимущества. Во-первых, это высокая скорость разработки, что и следовало ожидать от такого языка как Python. Во-вторых, — огромное количество GUI-фреймворков. Существуют расширения для почти всех основных GUI-библиотек: Tkinter на основе Tcl/Tk, wxPython для wxWidgets, PyQt для Qt и многое другое (с полным списком можно познакомиться, пройдя по ссылке на боковом выносе). Tkinter поставляется вместе с Python, и работу с GUI можно начинать сразу после его установки В этой статье будет рассматриваться библиотека wxPython. Она является оберткой над популярной кроссплатформенной GUI-библиотекой wxWindows.

По ссылке на боковом выносе можно выбрать подходящий IDE, заточенный для работы с GUI. Выбор весьма богат, так что, скорее всего, ты не разочаруешься, «примеру, для работы именно с wxPython мне приглянулся BoaConstructor. Он удобен для визуального проектирования GUI: избавляет от рутины и, в целом, имеет интуитивно понятный интерфейс (что не отменяет чтения туториала]. Какой IDE выбрать — это дело вкуса, поэтому я больше не буду акцентировать на нем внимание. Дальнейшее чтение статьи должно быть понятным независимо от сделанного выбора. Так что устанавливай wxPython и приступим непосредственно к кодингу.

Немного перефразирую известную фразу: лучший способ изучить работу с GUI — это сразу начать писать GUI! Не откладывая дело в долгий ящик, сразу продемонстрирую программу «Hello. world!» на wxPython’e.

import wx
class HelloFrame(wx.Frame) :
def_init_(self) :
wx.Frame._init_(self, id=-l, parent=None,
pos=wx.Point(422, 270), size= wx.Size(300, 200), title=’Hello Frame’) self.panel = wx.Panel(self) self.helloButton = wx.Button(id=-l, label= ‘Push me. ‘ ,parent=self .panel,
pos=wx.Point(110, 75), size=wx.Size(80, 30)) self.panel.Bind(wx.EVT_BUTTON, self.OnButtonClick, self.helloButton)
def OnButtonClick(self, event) print ‘Hello, world!’
class HelloApp(wx.App) def Onlnit(self): frame = HelloFrame() f rame.Show(True) return True
app = HelloApp () app.MainLoop()

При запуске программы создается окно с кнопкой, при нажатии на которую выводится строка «Hello, world!».

Теперь немного теории. Любая wx Python-программа должна содержать два объекта: прикладной объект и главное окно. Прикладной объект управляет главным циклом обработки событий, а окно содержит элементы интерфейса, посредством которых пользователь может управлять данными. Разберем жизненный цикл нашей программы:

1) app = wx.PySimpleApp() — создается прикладной объект, который должен быть объектом класса wx.App или производного от него. Пока он не создан, невозможно создать никакие другие графические объекты wxPython.

2) Вызов метода OnlnitO для созданного прикладного объекта. Обычно здесь выполняется начальная инициализация виджетов. Если он возвратит False, то приложение тут же завершится.

3) frame = HelloFrameO — создание объекта главного окна (должен быть объектом класса wx.Frame или производного от него). Причем, необязательно, чтобы создание этого объекта происходило в методе OnlnitO прикладного объекта — лишь бы главное окно создалось не раньше, чем прикладной объект! Приложение может содержать несколько окон верхнего уровня (не имеющих родителя), и только одно из них является главным. Главное окно можно объявить явно (вызвав метод SetTopWindowO) либо неявно (главным считается фрейм верхнего уровня, который создан первым).

4) app.MainLoop() — вызов главного цикла обработки событий. Этот цикл отвечает на события, посылая их соответствующим обработчикам (к событиям я подробнее вернусь чуть позже). Когда все окна верхнего уровня закрываются, то происходит возврат из метода MainLoopO и приложение завершает работу. Так же как метод OnlnitO вызывается сразу после создания прикладного объекта, метод OnExitO у этого объекта вызывается после закрытия последнего окна, но перед внутренней очисткой wxPython. Его можно использовать для очистки не-wxPython ресурсов. Если по каким-то причинам приложение должно жить даже после закрытия всех окон, можно изменить поведение прикладного объекта, вызвав у него метод SetExitOnFrameDelete(False). После этого приложение будет жить до тех пор, пока явно не вызовет глобальную функцию wx.Exitd. Ты получил общее представление о том, что происходит«за кулисами». Можно перейти к созданию виджетов, которым будет посвящена оставшаяся часть статьи.

Рассмотрим создание окна (фрейма):

wx.Frame(parent, id=-l, title=»»/
pos=wx.DefaultPosition, size=wx.DefaultSize,
style=wx.DEFAULT_FRAME_STYLE, name=»frame»)

Большинство параметров имеют разумные значения по умолчанию, поэтому их можно опускать. Их назначение понятно из названий. Я только обращу внимание на параметр id, который задает идентификатор виджета. Любой виджет должен иметь уникальный id. Этого можно достичь тремя способами:

1) Самому генерировать уникальное положительное число и передавать его в конструктор.
2) Использовать функцию wx.NewldO.
3) Передать в конструктор виджета константу wx.lD_ANY или -1 (что и сделано в примере).

Между вторым и третьим стилями нет никакого функционального различия. При создании фрейма, втом числе, происходит создание виджетов. которые он должен содержать. Хорошим ходом считается создание виджета \л/х. Рапе такого же размера, как рабочая область окна, и который, по существу, является простым контейнером для других объектов. Это позволяет отделить содержание окна от других элементов, типа панели инструментов и строки состояния. Затем в примере создается виджет кнопки. Список параметров аналогичен таковому у конструктора фрейма. Обрати внимание, что родителем является объект панели. Здесь нужно, чтобы размеры внутреннего виджета не вылезали за рамки виджета-родителя (параметры pos и size). После создания виджета доступ ко всем его параметрам осуществляется через Get/Set методы (такой подход не свойственен Питону, но тут просматривается влияние С++, так как wxPython — это оболочка над библиотекой wxWindows, которая написана как раз на С++).

Как уже упоминалось, главная задача прикладного объекта — обработка событий, которые происходят во время работы приложения. События (events) в wxPython’e — это очень обширная тема, поэтому я рассмотрю только азы. После того как у прикладного объекта вызван метод MainLoopO, программа большую часть времени по сути ничего не делает. Все события, которые происходят при работе программы, помещаются в очередь. Время отвремени программа проверяет эту очередь. Если в ней что-то появилось, она обрабатывает это событие, вызывая программный код. связанный с ним. Любое событие является потомком wx.Event и имеет свой тип. Например, событие wx.MouseEvent имеет U типов, таких KaKwx.EVT_RIGHT_DOWN.wx.EVT_LEFT_UPnT.n. В wxPython. большинство виджетов генерирует высокоуровневые события в ответ на события более низкого уровня. Например, щелчок мыши на кнопке wx.Button генерирует событие wx.CommandEventTnna EVT_BUTTON. Преимущество такого подхода — в том, что он позволяет сосредоточиться на самих событиях, вместо того, чтобы отслеживать каждый щелчок мыши.

Чтобы связать событие, виджет, который его вызвал, и обработчик события, используется так называемый биндер — объект класса wx.PyEventBinder. Для каждого типа события существует свой биндер. Объекты биндеров предопределены и глобальны, но есть возможность создать собственный биндер для собственного типа события. Любой виджет является потомком класса wx.EvtHandler, а значит, имеет метод Bind. Он-то как раз и создает биндеры событий, про которые только что шла речь. Этот метод имеет следующую сигнатуру: Bindlevent, handler, source=None. id=wx.lD_ANY, id2=wx.lD_ANY). Первые два параметра обязательны. Event — объект класса wx.PyEventBinder. и он описывает событие; handler — объект, поддерживающий вызов, обычно это метод или функция с единственным параметром — объектом событием. Параметр source задает виджет, который является источником события (его следует задавать, если этот виджет не тот, который используется как обработчик).
Рассмотрим, какэто все работает в нашей программе. В ней есть такая строчка:

self.panel.Bind(wx.EVT_BUTTON, self.OnButtonClick, self. helloButton). Щ j? -.

В этой строчке объект panel создает биндер. при помощи которого, при нажатии кнопки helloButton, произойдет вызов метода On Button Clicklself, event).

Хочу обратить внимание, что код. который вызывается в ответ на событие, обычно не определяется виджетом, вызвавшим это событие (так называемая распределенная архитектура). В нашем случае событие вызывается виджетом helloButton. но обработчик этого события является методом OnButtonClick!) объекта Frame, который и содержит виджет. Стоит упомянуть еще об одной возможности обработки событий: если в обработчике вызван метод SkipO, это позволяет продолжить поиск и выполнение других обработчиков того же самого события (иначе будет выполнен только тот обработчик, который был найден первым). Иногда такое поведение необходимо.

Возможно, тебе покажется, что для такой простой программки. как«Не11о, world!», тут слишком много теории. Может быть. Но зато теперь ты готов писать GUI практически любой сложности. Основной алгоритм написания большинства GUI:

1. Создание прикладного объекта и фрейма.
2. Создание и размещение виджетов в фрейме.
3. Размещение всей логики работы GUI в обработчиках событий. Следующим этапом у нас будет написание более серьезной программы — калькулятора (наподобие стандартного в Windows). Вместе с подробными комментариями весь код занял у меня около 270 строк. Естественно, что целиком в рамки статьи он не поместится. Поэтому я буду делать акцент только на самых интересных местах, а сам исходник можно найти на диске. Калькулятор будет представлять из себя окно, на котором размещены поле для ввода/вывода чисел, кнопки для набора цифр, знаков операций и вывода результата. Так как эта статья посвящена обзору GUI. то не буду подробно разбирать логику работы калькулятора. Рассмотрю только ту ее часть, которая имеет непосредственное отношение к GUI.

С ростом числа виджетов возрастает объем однотипного кода. Можно прибегнуть к некоторым ухищрениям, чтобы в нем легче было ориентироваться.

1. Рекомендуется давать объектам виджетов «говорящие» имена, чтобы по названию сразу можно было понять, для чего они предназначены (например, кнопку умножения есть смысл назвать buttonMul вместо button J 2).
2. То же самое касается именования обработчиков событий. Их название принято начинать с префикса «Оп». За ним идет название виджета, с которым этот обработчик связан, а затем — название события, которое обрабатывает обработчик (например, из названия обработчика On Button Erase Click ясно, что он обрабатывает событие, возникающее при «клике» на кнопку buttonErase). Возможно, это провоцирует появление длинных имен, но я рекомендую делать выбор в пользу понятности, пусть и в ущерб краткости.
3. Часто есть возможность уменьшить количество обработчиков путем назначения одного и того же обработчика на разные события. В нашем случае вместо того, чтобы на каждый «клик» на кнопке с цифрой назначать отдельный обработчик (который всего лишь должен эту цифру дописать
в окно вывода), можно обойтись одним единственным обработчиком. Правда, перед тем как дописать цифру, этому обработчику вначале придется найти ту кнопку, которая вызвала это событие, так как эта цифра расположена на label’е этой кнопки. Что делается следующим образом:

# Получаем список всех виджетов, которые содержат
# panel.
children = self.panel.GetChildren()
# Находим виджет, который вызвал событие, for child in children:
if child. Get Id () == event .Get Id() :
# Знак, который нужно вывести, содержится
# в label’е виждета.
self.textCtrllnfo.AppendText(child. GetLabelO)   у– -   ШШ !^|LM^

Тут быстродействие приносится в жертву ради большей «прозрачности» кода. Но именно такой подход и соответствует идеологии Python”a. поэтому настоятельно рекомендую придерживаться его и впредь. Кроме того, на нажатие кнопок арифметических операций и кнопки вывода результата («=») также можно назначить один и тот же обработчик (в примере это метод OnOperationClick). Правда, при разборе этого метода могут возникнуть некоторые трудности для тех, кто слабо разбирается в Python”e. Но это лишь из-за не совсем тривиальной логики, по которой должен работать калькулятор (например, если было введено 2+3, то ввод следующей операции подразумевает вычисление этого выражения 2+3=5 и применения новой операции к результату). Даже если ты не до конца разберешься с логикой, — ничего страшного, ведь наша главная задача это GUI.

Есть несколько нюансов, о которых начинающие разработчики часто забывают.
1. Важно помнить, что пользователю может прийти в голову мысль изменить размер твоего приложения (например, развернуть его на весь экран). Обычно после этого приложение приобретает неприглядный вид — все виджеты будут расположены в рамках старого размера, а оставшаяся часть останется пустой. Самый простой вариант избежать этой неприятности — запретить изменения размера окна
и его максимизацию. Это можно сделать при инициализации фрейма, инициализировав параметр style значением wx.DEFAULT_FRAME3TYLE&Mwx.MAXIMIZE_B0X wx.RESIZE_BORDER).
2. Поскольку наш калькулятор позволяет вводить цифры не только путем нажатия кнопок, но и с клавиатуры, то необходим контроль за пользовательским вводом. Пользователь должен вводить только целые и дробные числа. Проверку правильности ввода можно организовать следующим образом:

try:
number = float(self.textCtrllnfo.GetValueO) except (TypeError, ValueError): self.errorStatusBar.SetStatusText(ОШИБКА! Введите число правильно.)
return

Этот код пытается привести строку к типу float; если не удается, то бросается исключение, которое ловится, и в виджет errorStatusBar выводится сообщение об ошибке. Обрати внимание, что ловятся ошибки определенного типа (TypeError, ValueError). Все остальные ошибки ввода уже не будут выводиться в виджет errorStatusBar Это считается хорошим стилем — ловитьтолько те ошибки, которые ты готов обработать.
3. По умолчанию длина входной строки не ограничена, и при вводе большого числа оно не будет влезать в поле ввода. Чтобы этого избежать, можно указать максимальную длину вводимой строки при создании виджета: textCtrllnfo. SetMaxLength(30).

Надеюсь, теперь тебе не составит труда продолжить изучение wxPython самостоятельно. На примере двух простых программок был рассмотрен фундамент любого wxPython-приложения. А если есть фундамент, — возвести фасад куда легче. В процессе дальнейшего изучения wxPython я настоятельно рекомендую обратить внимание на wxPython Demo, который поставляется вместе с самой библиотекой. Это большая сборка различных примеров с исходным кодом. Если захочется изучить новый виджет — в первую очередь ищи там. Также есть замечательная книга «WxPython in action» отавторов Noel Rappin и Robin Dunn. Ссылку для скачивания можно найти на боковом выносе. Написана она на английском, но если погуглить, то можно найти русский перевод нескольких глав (я нашел главы 1,2,3,11,14). Для начального знакомства с wxPython вполне хватит первых трех. Я вскрыл только верхушку айсберга программирования GUI на Python’e, все остальное остается за тобой. Удачи!

, , , , , , , , , , , , , , ,

Хочешь организовать публичный доступ к сетевым сервисам, но беспокоишься за безопасность? Решил переложить часть своих обязанностей на другого человека, но не хочешь наделять его правами? Управляешь хостингом и желаешь дать своим клиентам настоящую свободу? С помощью системы виртуализации Linux VServer легко решишь все эти задачи без головной боли и потери производительности.

Мы не раз говорили о системах виртуализации уровня операционной системы (песочницы) на примере FreeBSD Jail. Такой тип виртуализации позволяет разделить одну ОС на несколько виртуальных, каждая из которых будет обладать собственным окружением исполнения (библиотеки, каталоги /devH / proc, набор стандартных утилит), процессами и IP-адресом.

В отличие от эмуляции, обеспечиваемой такими технологиями, как Xen, VMWare и KVM, виртуализация уровня операционной системы не эмулирует аппаратные составляющие компьютера, а создает изолированные контейнеры поверх ядра ОС. Это своего рода расширенная трактовка понятия «процесс» с более глубоким уровнем изоляции и разделения ресурсов, предоставляемых ядром. Обладая всего одним явным недостатком, заключенным в невозможности создания контейнеров для исполнения приложений других ОС, песочница наделена двумя неоспоримыми преимуществами: незначительной потерей производительности (в районе 2-3%) и простотой развертывания виртуальных окружений. Виртуализация особенно популярна среди хостинг-провайдеров и создателей сервисов, предоставляющих площадки для организации облачных вычислений. Ведь в отличие от обычного хостинга, который выделяет клиентам аккаунт на сервере и доступ к набору предустановленных служб, хостинг, использующий виртуализацию, способен дать пользователям безграничный контроль над виртуальным сервером, возможностью устанавливать любое программное обеспечение и полным отсутствием ограничений на количество сайтов, почтовых ящиков, баз данных, интерпретаторов языков программирования. И все это с полной изоляцией виртуального сервера от хост-системы и простой системой развертывания.

ПОЧЕМУ VSERVER? Сегодня каждая из наиболее популярных UNIX-систем предоставляет возможности для организации виртуализации на уровне операционной системы. Во FreeBSD уже давно существует технология Jail, в Solaris изолированные контейнеры называются зонами (Zones), а среди решений для Linux наибольшей популярностью пользуются OpenVZ и Linux VServer.

Традиционно OpenVZ (openvz.org’) считается более взрослой, серьезной и развитой системой, этаким выбором профессионалов. Развиваемая сообществом Linux VServer (linux-vserver.org)« напротив, отличается простотой реализации и непретенциозностью. В то время как OpenVZ развивается по пути многофункциональной и сложной технологии для поддержки и управления VPS (Виртуальные Частные Серверы) в больших организациях и крупных сервисах, VServer следует идеологии простоты и удобства FreeBSD Jail. Система Linux VServer—это проверенный годами (более 7 лет разработки) небольшой, вылизанный и отлаженный патч для ядра Linux; он наделяет всем необходимым для организации надежной и производительной системы виртуализации, единственный недостаток которой— невиртуализируемый сетевой стек.

Программный пакет Linux VServer состоит из двух частей: патча для Linux-ядра и набора утилит для управления виртуальными серверами. Прекомпилированные ядра с включенным VServer доступны в пакетах для многих популярных дистрибутивов, поэтому сначала мы рассмотрим вариант установки средствами менеджера пакетов в Ubuntu 9.04, а уже после перейдем к ручному способу инсталляции, предполагающему выкачивание исходников ядра с kernel.org и компиляцию утилит. Итак, операционная система Ubuntu 9.04, ядро 2.6.28, ночь, серверная.

Шаг 1. Добавляем в apt keyring ключ для доступа к репозиторию VServer:

$ sudo apt-key adv –recv-keys –keyserver keyserver.ubuntu.com BB9BFB5B

Шаг 2. Добавляем ссылки на репозитории VServer в /etc/apt/sources.list:

deb http://ppa.launchpad.net/ christoph-lukas/ppa/ubuntu jaunty main
deb-src http://ppa.launchpad.net/ christoph-lukas/ppa/ubuntu jaunty main

ШагЗ. Устанавливаем новое ядро и утилиты:

$ sudo apt-get update
$ sudo apt-get install linux-image-vserver linux-headers-vserver util-vserver

Та же процедура, с полной пересборкой ядра и компиляцией утилит.
Шаг 1. Получаем ядро и патч:

# cd /usr/src
# wget http://www.kernel.org/ pub/linux/kernel/v2.6/linux-2-.6.28.7.tar.bz2
# wget http://vserver.13thfloor. at/Experimental/patch-2.6.28.7-vs2.3.0.36.8.dif
f

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

# tar -xjf linux-2.6.28.7.tar.bz2
# cd linux-2.6.28.7
# cp /boot/config-X.X.X .
# patch -pi < ../patch-2.6.28.7-vs2.3.0.36.8.diff
# make menuconf ig

Шаг 3. Изменяем конфигурацию пункта меню Linux VServer:
Enable Legacy Kernel API - Поддержка устаревшего API первой версии патчей. Отключаем
Enable Virtualized Guest Time — Возможность установки индивидуальной временной зоны для каждого окружения. Актуально для владельцев хостингов, во всех остальных случаях бесполезна и создаст дополнительный оверхед для системных вызовов, работающих со временем
Enable Proc Security — Скрывать все процессы, не принадлежащие окружению, в каталоге /ргос этого окружения. Hard CPU Limits — Жесткое ограничение окружений по времени использования процессора. Включаем Tag NFSD User Auth and Files — Поддержка встроенного в ядро NFS-демона
Maximum number of Contexts — Максимально возможное число окружений

Шаг 4. Устанавливаем ядро:

# make
# make modules_install
# cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.28.7-vs2.3 Шаг 5. Правим конфигурационный файл загрузчика:
#VI/BOOT/GRUB/MENU.LST
title Linux 2 . 6 .28 .7-vs2 . 3 root (hdO,0)
kernel /boot/vmlinuz-2.6.28.7-vs2.3 root=/dev/hdal ro
initrd /boot/initrd.img-2.6.28.7-vs2.3
boot

Шаг 6. Получаем и устанавливаем набор утилит для управления виртуальными серверами:

# cd /tmp
# wget http://ftp.linux-vserver.org/pub/utils/util-vserver/util-vserver-0.30.215.tar.bz2
# tar xjf util-vserver-0.30.215.tar.bz2
# cd util-vserver-0.30.215
# ./configure –prefix=/usr –sysconfdir=/etc
# make install

Перед тем как перейти к запуску виртуальных окружений («контекстов» в терминологии Linux VServer), мы должны соответствующим образом подготовить операционную систему. Первое, что следует сделать—примонтировать файловую систему, на которой будут располагаться виртуальные окружения, с опцией tag. Это даст ядру возможность устанавливать принадлежность определенных файлов конкретному контексту, что, в свою очередь, позволит устанавливать дисковые квоты на этот контекст.
Открываем файл /etc/fstab, находим строку, ответственную за монтирование файловой системы, содержащей каталог /var/lib (виртуальные окружения по умолчанию хранятся в /var/lib/vservers), и добавляем к опциям ее монтирования флаг tag. Результирующая строка должна выглядеть примерно так:

/dev/sda3 /var ext3 tag 1 1

Если каталог находится на файловой системе reiserfs, добавляем также опцию attrs. Отправляем сервер в ребут.

Теперь необходимо установить так называемый «Chroot Вагпег», который закроет процессы виртуальных сред в указанном каталоге, откуда ни один процесс окружения не сможет выбраться:

# setattr –barrier /var/lib/vservers

В довершение подготовительных действий прописываем в переменную ядра kernel.vshelper путь к скрипту, который будет корректно останавливать виртуальный сервер:

# echo “kernel.vshelper = /usr/lib/util-vserver/vshelper” » /etc/sysctl.conf
# SySCtI -p If*

Для начала необходимо создать минимальное Linux-окружение, где будут работать изолированные процессы. Сделать это можно с помощью специальных утилит, но гораздо легче и быстрее просто скачать готовый образ (шаблон) с одного из специальных ресурсов. Мы обратимся к хранилищу ftp: //ftp. pld-linux.org/people/hawk/vserver-templates/, в котором размещены готовые образы последних релизов CentOS, Debian, Fedora и Ubuntu, предназначенные для применения в системе VServer. Получим образ последнего релиза Ubuntu (ты можешь выбрать любой другой, по своему вкусу):

$ cd /tmp
$ wget ftp://ftp.pld-linux.org/people/hawk/vserver-templates/Ubuntu/jaunty-i386.tar.bz2

С помощью специальной команды создадим из него готовый к работе виртуальный сервер:

# vserver vpsl build \
—context 10 \ –hostname vpsl.host.ru \ —interface ethO: 192 .168.1.1/24 \ –initstyle plain \ -m template — \ -d jaunty \ -t /tmp/jaunty-i386.tar.bz2

Приведенная команда развернет образ в каталог /var/lib/ vservers/vpsl и проведет его начальное конфигурирование. Первая строка говорит о том, что новое виртуальное окружение должно быть создано с именем vpsl, вторая указывает на номер контекста (он может быть любым), третья устанавливает сетевое имя виртуального сервера в vpsl. host.ru, четвертая—привязывает его к сетевому интерфейсу ethO и назначает IP-адрес 192.168.1.1, в пятой указан способ инициализации окружения (plain—запуск/sbin/init). Оставшиеся строки говорят о том, что в качестве источника для сборки окружения должен быть использован шаблон /tmp/ jaunty-i386.tar.bz2, основанный на дистрибутиве Ubuntu 9.04 (Jaunty Jackalope).

VServer поддерживает множество других методов сборки окружений, включая полностью автоматизированные (с автоматическим выкачиванием дистрибутива), с которыми ты можешь ознакомиться, прочитав man-страницу vserver-build.

Теперь запустим вновь созданный виртуальный сервер и убедимся в его работоспособности:

# vserver vpsl start
# vserver-stat

Сервер должен присутствовать в списке. Остановим сервер:

# vserver vpsl stop

Все внешние по отношению к окружению настройки виртуальных серверов, такие как ограничения, доступные сетевые интерфейсы и т.д., хранятся в каталоге / etc/vservers/HMH_cepBepa. Поэтому переходим в каталог / etc/servers/vpsl и приступаем к шаманству с конфигурационными файлами.
Для начала взглянем на каталог interfaces, который уже содержит один подкаталог с названием «О». Он хранит настройки первого виртуального сетевого интерфейса, доступного внутри виртуального окружения. Linux VServer, как и система FreeBSD Jail, использует сетевой интерфейс
хост-системы и закрепленный за ним IP-псевдоним для предоставления виртуальным окружениям доступа во внешний мир. Для хранения настроек каждого сетевого интерфейса используется отдельный каталог с числовым именем (0— первый интерфейс, 1—второй и т.д.) Поэтому для того чтобы оснастить виртуальный сервер дополнительным сетевым интерфейсом, необходимо создать каталог с именем «1» и поместить в него несколько файлов с настройками:

Привяжем сетевой интерфейс к устройству ethl хост-системы

# echo “ethl” > dev
Зададим IP-адрес и маску сети
# echo “192.168Л.2й > ip
# echo “24″ > prefix

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

Это же утверждение относится и к монтируемым файловым системам. Вместо того, чтобы заходить на сервер и редактировать /etc/fstab, ты можешь поместить монтируемые ФС в файл /etc/vservers/vpsl/fstab. По умолчанию он уже содержит строки, ответственные за подключение файловых систем /dev, /ргоси /tmp, к которым можно добавить, например, монтирование дерева портежей хост-системы (если в качестве виртуального сервера используется Gentoo):

/usr/portage /usr/portage none bind,rw 0 0

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

1. Присвоить виртуальному окружению белый IP-адрес (нужно покупать у провайдера).
2. Настроить NAT между хост-машиной и виртуальным сервером, что позволит перенаправлять исходящий от виртуального сервера трафик на внешний сетевой интерфейс хост-системы и пускать нужный входящий трафик прямиком на адрес виртуального сервера.
Рассмотрим второй вариант подробнее. Настроим SNAT, чтобы исходящий от виртуального сервера трафик выходил наружу:

# iptables -t nat -A POSTROUTING -s 192.168.1.1/24 \
-d ! 192.168.1.1/24 -j SNAT –to-source <Внешний IP>

И DNAT, чтобы предназначенный для определенных сетевых сервисов трафик перенаправлялся на IP-адрес виртуального сервера (пример для web-сервера, работающего под управлением VServer):

# iptables -t nat -A PREROUTING -s ! 192.168.1.1/24 \
-m tcp -p tcp –dport 80 \
-j DNAT –to-destination 192.168.1.1:80

Настройки ограничений ресурсов, накладываемых на виртуальный сервер, хранятся в каталогах dlimits и rlimits. По умолчанию эти каталоги не существуют, поэтому сервер может отъедать ресурсы почти на равных с хост-системой. Чтобы исправить ситуацию, создадим каталог /etc/vservers/vpsl /dlimits, который будет хранить настройки, накладывающие лимит на использование дискового пространства:

# cd /etc/vservers/vpsl
# mkdir dlimits

Создадим каталог для настроек корня файловой системы виртуального сервера (на самом деле имя может быть любым):

# mkdir dlimits/root
# cd dlimits/root

Укажем каталог, для которого будут действовать ограничения:

# echo “/var/lib/vservers/vpsl” > directory

Лимит на количество индексных дескрипторов (максимальное количество файлов):

# echo “10000″ > inodes_total

Максимальное пространство, которое могут занимать файлы этого виртуального окружения (укажем 10 Гб):

# echo “10485760″ > space_total

Процент зарезервированного для пользователя root пространства:

# echo “5″ > reserved

Теперь установим тэг на существующие файлы виртуального сервера, чтобы ядро смогло определить их принадлежность vpsl и правильно рассчитать лимиты (файлы, созданные виртуальным окружением, автоматически получат этот тэг):

# chxid -URx -c vpsl /var/lib/vservers/vpsl

Все, теперь можно запустить виртуальный сервер и выполнить команду vdlimit, которая покажет занятые виртуальным сервером ресурсы ФС и лимиты:

# vdlimit –xid vpsl /var/lib/vservers/vpsl

От лимитов всегда можно избавиться, просто удалив каталог /etc/ vservers/vpsl/dlimits/root и выполнив команду vdlimit с флагом ‘–remove’, которая отменит их для запущенного сервера:

# vdlimit —xid vpsl –remove /var/lib/vservers/vpsl

Для хранения настроек лимитов на виртуальную память и процессорное время предусмотрен каталог /имя_контекста/ rlimits. Linux VServer использует системный вызов setrlimit(2) для накладывания лимитов на ресурсы контекста. Всего существует 22 различных вида ресурсов (15 в ванильном ядре + 7, добавляемые Linux VServer), наиболее интересные из них перечислены ниже (страница = 4 Кб для х86):

сри — Процессорное время, выделяемое контексту, в миллисекундах
f size — Размер файла в килобайтах
rss - Размер резидентной памяти в страницах пргос — Количество процессов
as — Размер адресного пространства контекста в страницах nice — Приоритет, который может получить процесс контекста nsock - Число открытых сокетов openf d — Число открытых файловых дескрипторов
Чтобы установить максимальное значение для каждого из этих ресурсов, достаточно записать число в одноименный файл внутри каталога /etc/ vservers/имя_cepвepa/rlimits. Например, ограничим адресное пространство контекста значением 100 Мб (25600*4 Кб):

# mkdir /etc/vservers/vpsl/rlimits
# echo “25600″ > /etc/vservers/vpsl/rlimits/as

Кроме того, в Linux VServer встроена гибкая система ограничения контекстов в правах и полномочиях, возможности которой можно использовать для наделения контекста особыми привилегиями или, наоборот, лишения прав. Все, что позволено контексту, должно быть перечислено в файле / еКАзегсеге/имя.контекста/ссараЬШпез. Вот возможные флаги этого файла:

SET_UTSNAME — Возможность использовать системные вызовы setdomainname (2) и sethostname(2) для установки имени хоста SET_RLIMIT — Право использовать set г limit (2) для управления лимитами • RAW_ICMP — Право использовать “сырые” сокеты SYSLOG — Использование syslog(2) для ведения журналов SECURE_MOUNT - Разрешить mount (2) SECURE_REMOUNT - Разрешить перемонтирование ВI NARY_MOUNT - Бинарное /сетевое монтирование QUOTA_CTL - Разрешить накладывать квоты ADM I N_MA Р PER - Разрешить доступ к “device mapper” ADMIN_CLOOP — Доступ к loop-устройству KTHREAD — Возможность создавать потоки ядра

Существует и множество других флагов, которые следует указывать в файлах flags, nflags, bcapabilities и neaps. Детальное их описание можно найти на страничке linux-vserver.org/util-vserver.Capabilities and Flags.

, , , , , , , , , , ,

Но как же без него? Если нет привычной базы данных SQL, то что? Вот, что я тебе скажу. Первым кинь камень в того, кто скажет, что в большом проекте без SQL не обойтись. Обойтись можно. И при этом некисло выиграть!

Скажи честно, тебе ведь интересно, как устроены изнутри те суперпроекты, на которых висишь сутками ты и еще сотни миллионов пользователей сразу? Google, Amazon, eBay, Twitter, тот же Facebook или наш ВКонтакте? Они совсем не похожи на большинство обычных веб-сайтов, написанных на PHP+mySQL. База данных в них — все. Там и новости, и информация о товарах в интернет-магазине, и статьи с комментариями в блоге, и самое вкусное — логины и пароли.

Очень многие разработчики и архитекторы также думали, что без базы не обойтись, продолжая создавать все более мощные сайты. Но вскоре столкнулись с тем, что сколько ни тужься, какие только хаки и умные штуки ни придумывай — при нагрузке в сто миллионов пользователей, базы данных все равно мрут, как мухи. Ребята тоже слышали о кластерах, и о распределенных системах и даже об облачных вычислениях (подробнее читай статью «Заоблачные вычисления» в #125 номере зс). Если надо, чтобы больше людей скачали новый порно-ролик с Берковой, достаточно поставить еще пару серверов и скопировать на них файлы. А вот базы данных так просто не работают. Вот тут-то и нарисовалась проблема масштабирования. Каждый решает ее по-своему. Сначала ставят второй сервер: с него приложение читает данные, записывая только на первый, а он уже сам, в фоновом режиме, переносит новые данные. Такая архитектура называется master-slave, но ничего связанного с BDSM здесь нет!

Позже можно доставить еще сервер, и еще, но это уже не поможет, если писать надо много и постоянно. Ведь каналы между серверами рано или поздно будут забиты так, что новые данные будут появляться на подчиненных узлах гораздо позже, чем это допустимо. А кому интересно ждать, пока его комментарий появится на странице (самые нетерпеливые тупо жмут рефреш, чем еще сильнее нагружают систему)? Светлые умы подумали и решили: а что, если все базы данных будут сразу главными? У тебя есть три сервера, и на каждом из них — вся информация, а приложение случайно или по определенному алгоритму выбирает, с каким сервером работать. Изменения на одном сервере сразу передаются на два других (это называется master-master или multi-master репликация), и в любой момент везде есть самые последние данные, при этом писать и читать информацию можно с любого сервера. Но тут одна сложность — у самых популярных баз эта функция появилась только недавно, да и в настройке и поддержке очень уж сложная. И не дай бог, придется восстанавливать данные или потерянные транзакции — тут вообще без пива не разберешься. Ну и, конечно, до бесконечности наращивать количество серверов также нельзя. Все будет неплохо, пока не дойдешь до десятка. А там не оберешься проблем с взаимной связью и трафиком внутри такого хозяйства. А результат тот же — медленно и ненадежно.

А тем временем сайты растут, пользователей становится все больше, счет идет уже на десятки миллионов. Что же делать? А вот что — отказаться от обычной базы данных! Ведь что такое база данных? Это специальное хранилище данных (обычно это просто файлы, но с собственной структурой и кешем в памяти) с движком, который принимает от тебя команды в виде языка SQL (например, на выборку данных и выполняет их.

Особенно достают кривые руки разработчика или админа, когда для самого простого запроса «а сколько юзеров у меня на странице?» приходится тупо перебирать весь список пользователей и проверять, у кого статус «онлайн». Ведь юзеров может быть реально много, а если ты еще не озаботишься правильными индексами, то на каждый такой запрос придется серверу доставать всю табличку с данными (а это может и гигабайт быть] и считать снова и снова. А если в этот момент Вася скинул своим френдам в ЖЖ ссылку на твой суперпроект и пришла еще тысяча юзеров, каждого из которых надо записать в базу? Все — капут серверу! Все потому что и базы данных, и язык SQL, которым эти данные выбираются, достаточно плохо приспособлены к масштабированию. То есть, пока один-два сервера, все будет окей. Но как только больше — начинаются проблемы. Нельзя добавить еще машинку и гарантированно заставить работать все быстрее. В Гугле это давно поняли и изобрели свое решение, полностью отказавшись от применения таких обычных баз данных. Но это Гугл со своими ноу-хау, а что делают остальные? Остальные используют key-value database! По сути, это максимально упрощенная база данных. Скорее, даже просто хранилище, где все данные сведены к обычной паре: ключ (или индекс) и сами данные, которые обычно представляют собой строку и — в некоторых случаях — числа. То есть, вся база данных — это просто список ключей и сопоставленных с ними строк данных. Что именно хранится в такой базе, ей совершенно неважно — это забота самого приложения. Интерфейс доступа к такой базе также максимально прост — обычно это простейшие команды типа get (получить данные по ключу], set (записать данные с ключем), delete (удаляет ключ и его данные), update (обновляет уже существующие данные). Самым главным преимуществом является то, что если правильно все сделать, сложность таких операций (то есть, время вычисления результата) будет заранее известна и не зависит от объема данных или количества серверов. Более того, операции обычно атомарные (в SQL базах данных это называется транзакциями). Т.е., задавая команду, ты можешь быть уверенным, что она либо успешно отработает, либо сразу вернет ошибку — при этом другие пользователи не помешают тебе, даже если будут пытаться сделать то же самое. Это самый обычный тип key-value баз данных.

Подобных проектов существует много, но отличаются они, как правило, типами данных, возможных для хранения— например, кроме строк можно хранить числа или двоичные объекты (BLOB-ы), — а также количеством команд-операций. Понятно, что описанные выше четыре операции самые простые, обычно поддерживается еще инкременент/декремент (счетчик в памяти); особо продвинутые могут хранить массивы и списки. На низком уровне такие базы строятся на базе хеш-таблиц и их разновидности — распределенной хеш-таблицы (DHT). Это просто обычная, хоть и большущая таблица, которая может автоматически распределяться на любое количество компьютеров и поддерживает поиск и получение знания, где данные конкретно (такой принцип, в частности используется для бессерверного обмена пирами во время скачки файла через torrent). И хотя обычно для быстрой работы данные хранятся в оперативной памяти, некоторые сервера обеспечивают хранение на диске и бекап, так что после выключения такого сервера все данные сохраняются.

Сильная сторона таких решений — масштабируемость и скорость. Свойства DHT такие, что можно присоединять новые сервера постоянно, и база будет расти и расти. Столько — сколько надо. При этом в самих приложениях ничего менять не нужно, все делается автоматически! Скорость очень и очень высокая, так как практически все такие базы работают в памяти, а на диск пишется лишь бекап (при этом, он может быть постоянным — в таком случае в него записывается только новая инфа). Показатели в сотни тысяч запросов в секунду на одном дохленьком сервере — это обычное дело для таких баз. Но, несмотря на восторги, есть и сложности. Первая — это скудность возможностей работы с данными. Ага, вот и расплата за скорость и расширяемость! Сервер знает только ключ и данные, которые с ним ассоциированы, а вот, что это за информация — номер кредитной карточки или дата регистрации — уже не ведает. Этим должно заниматься само приложение! Поэтому просто взять и, например, написать один SQL-запрос, чтобы выбрать всех пользователей, которые регистрировались год назад и совершили больше одного платежа за это время, уже не получится. В базе просто нет возможности выборки по какому-либо признаку, кроме ключа. Но не спеши отворачиваться — это ограничение легко решается за счет ввода дополнительных данных (так же как в SQL-базе постоянные данные выделяются в отдельную таблицу-справочник). Правда, в этом случае нужно с самого начала проектировать сайт под такие типы базы. Ведь то, что делается одной строкой на SQL, здесь потребует как нескольких запросов и обработки, так и предварительного форматирования данных при записи. Увы, автоматических трансляторов SQL в key-value запросы пока нет, но работы в этом направлении ведутся. Еще одним недостатком таких баз является требовательность к параметрам сервера и в особенности оперативной памяти, которой, как известно, много не бывает. Прожорливость удается удовлетворить за счет хранения неиспользуемых данных на диске. Подобным образом поступили разработчики MemcacheDB, где скрестили популярный сервер memcache и базу данных BerkleyDB, используемую как постоянное хранилище данных. В более молодом, но очень сильном проекте проекте — Redis — используется асинхронная запись в фоновом режиме на диск. Другие также не брезгуют использовать традиционные базы данных для хранения, ведь их совсем не видно за фасадом сервера и они работают локально, поэтому на скорость работы почти не влияют.

Memcached/MemcacheDB (memcachedb.org) — наверное, самый известный представитель семейства key-value DB. Многие используют его как кеширующую систему, что, по большому счету, то же самое. Проект хранит данные в оперативной памяти, занимает места столько, сколько ему выделили, и может объединяться с другими серверами, чтобы распределить данные между собратьями. Доступ к данным идет через UDP-порт и сокеты, что очень быстро, а с выходом последней версии, 1.4, добавлен и экономичный бинарный протокол. Хотя в Facebook считают иначе и ускоряют, как могут, добиваясь нескольких сотен тысяч одновременных подключений! Кстати, именно эта социальная сеть имеет самую большую инсталляцию Memcached-серверов — в архитектуре участвует более тысячи серваков! Недостаток мемкеша в том, что он хранит все в памяти. По этой причине в местах, где необходима сохранность данных, придется использовать MemcacheDB, который использует обычную базу данных как постоянное хранилище данных. Другие недостатки — ограниченность на данные, которые понимает сервер (это только числа и строки), а также сложности выборки одним запросом множества ключей. Project Voldemort (project-voldemort.com) — такой же мощный, как и Темный Лорд, только в царстве баз данных. Штука написана на Java и изначально нацелена на распределенность. Добавлять новые сервера можно без остановки — данные по ним «расползутся» без посторонней помощи. Кроме обычного сетевого доступа, Project Voldemort поддерживает JavaAPI и различные сетевые протоколы, например, Google ProtoBuf или Thrift, что сильно экономит трафик и повышает скорость. Данные хранятся как в памяти, так и на диске (можно использовать и обычные базы данных), так что сбои питания никак не нарушат целостности. Сильной стороной является поддержка версионности, то есть каждая единица данных имеет историю версий и изменений, поэтому можно откатываться назад, если что-то записали не то или возникли ошибки. Быстродействие также на высоте: в среднем 10-20 тысяч операций в секунду, и такой гигант, как соцсеть Linkedln не прогадал, используя кластер из этих серверов для своей работы. Apache CouchDB (couchdb.apache.org) — это уже тяжелое оружие из будущего! Шутка, CouchDB это представитель отдельного семейства баз данных, называемых документно-ориентированными. В этой штуке хранят документы, представляющие собой некоторую группу данных, которые вместе составляют один объект-документ. Например, статья (текст), краткая аннотация, имя автора, дата публикации и статус. По отдельности, это просто значения, а вот документная база позволяет их сгруппировать как один объект и производить над ним операции. Apache CouchDB написана на Erlang (просто замечательная платформа, если речь идет о расширяемости) и имеет HTTP REST-интерфейс или JSON API. так что можно получать данные сразу напрямую из JavaScripta-a на веб-странице! Кстати, она имеет встроенный язык запросов, и какой ты думаешь? Да, JavaScript вместо традиционного SQL.

Справедливости ради стоит сказать, что о промышленном применении базы пока не слышно. Уж сильно экспериментальная разработка, хотя и чрезвычайно перспективная. Redis (code.google.com/p/redis) — проект молодой и достаточно простой, но по возможностям мощнее всех предыдущих вместе взятых! Почему? Да взять хотя бы производительность. Более 100 запросов в секунду на простеньком сервере или мощном лаптопе. Знакомься, Redis или, как он сам себя называет, сервер структурированных данных. Проект позволяет хранить не только обычные ключи и значения, но и списки, наборы данных (группы пар ключ-значение), а также производить всего одной командой (и с гарантированным временем выполнения!) сложнейшие операции над такими списками. Там, где для memcached надо писать вручную две, три или десяток команд и еще вычислять что-то в самом приложении, при использовании Redis-a можно обойтись одной! Поддерживается даже сортировка, что является самой сложной и практически не выполнимой командой для всех key-value баз (в отличие от SQL, где это самая тривиальная операция). Написанный на ANSI С сервер умещается в паре десятков Кб исходных текстов (по лицензии BSD), работает на любой системе и сотворит чудеса с твоими данными. Команды посылаются no TCP или напрямую через telnet. Помимо этого, есть и API или модули на любой вкус и язык. Не буду скрывать, что сам являюсь автором класса-интерфейса для РНР. расширяющего возможности сервера еще сильнее! :)

Понимаю, что все, что я выше с таким трудом рассказал, это фигня, и хочется сразу почувствовать мощь новой технологии (ладно, не сильно новой, но все равно интересной). Давай попробуем ее в действии. Известно, что у самого быстрорастущего сервиса в мире [Twitter) долгое время
были проблемы с производительностью. Писать об этом проекте нам уже надоело, поэтому предлагаю забабахать собственную альтернативу. С использованием обычной БД — это вполне тривиальная задача (если не брать в расчет вопрос масштабируемости). Но мы реализуем тот же функционал без привычной БД — используя только сервер Redis. С кодом сложностей не должно возникнуть, HTML-странички ты сверстаешь сам, а вот как использовать такую необычную базу внутри, я тебе сейчас расскажу. ШАГ 0. Определимся, что мы делаем. Наш простой твиттер должен уметь хранить акка-унты пользователей (и пускать тех, кто знает пароль), хранить твои записи и выводить их, позволять добавлять и удалять друзей (фол-ловеров) и показывать их список, а также отображать полную ленту сообщений (как твоих, так и всех твоих друзей).

ШАГ 1. Аккаунты будем хранить в виде отдельных пар ключ-значение, где ключом будет логин пользователя, а значением — сериализированный массив(язык не имеет значения, например, РНР), в котором уже все о юзере, его имя, пол, дата регистрации и остальные данные. Вместо сериализации лучше использовать JS0N — тогда мы вообще не будем зависеть от языка приложения, ведь JS0N умеет обрабатывать любой современный язык программирования. Команда SET admin «{name:'supervasya',age:21,sex:'m',registered:'27.07.2009'} » — записывает нового юзера с логином admin. Теперь, выполнив запрос GET admin, мы получим JSON-строку с данными.

Для авторизации мы используем отдельное значение: SET admin_pass «md5(password)» — ключом здесь также служит логин, но с добавлением строки «_pass», а значение — md5 хеш пароля. Авторизация будет в два шага (для надежности, но можно и в один]. Сначала проверим, существует ли логин: EXISTS admin, если все ОК (значит, в базе есть такой юзер], извлекаем его хеш пароля для проверки: GET admin_pass. Саму проверку и сравнение хешей придется делать уже в приложении. Не забудем счетчик всех юзеров (а то ведь SELECT COUNT!) здесь нету): INCR count_user — увеличит счетчик юзеров на 1. Если тебе захочется иметь весь список юзеров. придется раскошелиться на еще одну переменную, например, загнав все логины в набор (set): SADD all_user_list admin. Таким образом, в all_user_list у нас будет храниться список всех логинов, по которым можно извлечь профайл аккаунта.

ШАГ 2. Теперь будем хранить все твои сообщения. Ключом в данном случае будет метка времени, потому что ключ должен быть уникальным, да и вряд ли ты будешь постить что-то чаще раза в секунду (нефиг спамить!). Можем просто создать ключ, используя логин и метку времени, например, admin_11232142135. и хранить его как отдельное значение вместе с сообщением: SET admin_1123214-2135 «{аи1Ьог:^гпт*,1ех1:’моя супер статья!’ .time: 11232142135,title:’статья!*}». Но чтобы облегчить себе жизнь, мы сделаем еще список, где будут храниться данные о времени постов каждого автора. Вот так: RPUSH admin_msgs 11232142135. Команда добавит в конец списка admin_msgs новое значение — метку времени твоего поста. Зачем? Для облегчения получения потом всех постов за определенное время или просто указанного количества, например, для постраничного вывода. Внутри списка даты уже отсортированные по времени, поэтому дополнительной сортировки не нужно.
ШАГ 3. Если ты хочешь зафолловить (читать) Васю, необходимо сохранить логин Васи в твоем списке фолловеров. Для этого также применим списки, создав для каждого юзера список фолловеров: RPUSH admin_follow vasja. В списке admin_follow теперь будут храниться логины всех юзеров, которых хочет читать admin. Аналогично, если Вася хочет читать, что же про него пишет админ: RPUSH vasja _follow admin.

ШАГ 4. Выводим полную ленту сообщений. Мы уже умеем хранить все сообщения одного пользователя и хранить список тех, за кем он следит. Теперь выводим ленту сообщений, в которой будут как собственные сообщения юзера, так и все сообщения тех, за кем он следит. При этом, все сообщения должны идти в хронологическом порядке.

Допустим, мы будем показывать только сообщения за последний час. Здесь уже немного сложнее. Сначала выберем список всех пользователей, которых надо показать. Для этого сначала получим количество наших фолловеров (длину списка): LLEN admin_follow. Допустим, мы получили 2 (админ отслеживает двух юзеров):
LRANGE admin_follow 0 1 — получаем в виде массива логины юзеров. Не забываем, что надо прибавить сюда и свой логин, так как наши сообщения тоже должны быть видны. Это придется делать уже самому приложению.

Далее, имея список логинов, нам надо выбрать все списки сообщений каждого юзера. К сожалению, для этого надо N раз вызвать команду LRANGE, указав ей каждый раз другой список (комбинацию логин игрока + _msgs). Конечно, в этом нет ничего страшного, ведь скорость работы Redis-a очень высокая, но этот момент может нуждаться в оптимизации. Например, есть команда KEYS, которая ищет по паттерну все ключи и возвращает сразу список. Поэтому можно попробовать задать ей такое выражение, чтобы сразу получить все ключи сообщений (ведь они формируются через логин и метку времени, значит можно отфильтровать). Но это уже тебе как домашнее задание (на самом деле задача имеет несколько решений и не факт, что каждое из них самое лучшее).

Мы пока сделаем по старинке, получив список сообщений для каждого юзера. программно сформируем из него список заранее подготовленных ключей для извлечения сообщений. Так как все сообщения идут по времени, достаточно полученный массив преобразовать из JSON-a в родной для твоего языка программирования и отбросить все значения, меньшие за текущее время минус 3600 (мы ведь за последний час выбираем). Если брать не за час, а просто последние 100, то задача еще более упростится.
Далее простым циклом формируем ассоциативный массив из комбинации логин + метка времени, где ключом будет метка времени (число, для обеспечения правильной сортировки), а значение — строка вида loginjime (то есть так, как хранится у нас в Redis-e), а потом просто объединяем эти массивы. Язык сам позаботится о правильной последовательности, например, РНРтак и сделает, используя команду аггау_тегде и. если надо array_sort.

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

Последний штрих — сформируем команду к Redis-y на извлечение всех сообщений, ключи которых мы уже подготовили. У сервера есть волшебная команда, которой так не хватает другим популярным системам вроде memcached (там пытаются приспособить для этого теги) — MGET список^ключей, то есть одной командой получаем все ключи, имена которых передали. Остается только превратить наш массив в строку, разделителем служит символ пробела — и мы сразу получим массив JSON-строк с сообщениями. Его сразу можно передать на веб-страницу, с JSON умеет работать любой AJAX-фреймворк. Насчет производительности не стоит переживать — операция декодирования JS0N в родной для языка массив везде очень и очень быстрая, даже если речь идет о сотнях или тысячах преобразований. Аналогично можно отобразить список всех фолловеров — ведь мы храним их в списке admin_follow. в котором хранятся логины, а значит, используя потом MGET-команду, мы сразу достанем профайлы всех юзеров, за которыми следит админ.

Я ничего не сказал об удалении данных — вдруг Вася окажется занудным типом или спаммером и ты захочешь отписаться от него. Для этого надо просто удалить из списка admin_follow его логин, что
Сейчас реляционные базы данных (SQL СУБД) уже не правят миром, особенно если речь идет о высоконагруженных проектах или сайтах, где надо без задержки обслуживать клиентов. Если раньше все проблемы пытались решить кешированием, то сегодня мы видим, как гиганты индустрии просто уперлись в ограничения баз данных и в поисках выхода попробовали посмотреть на традиционные кеши с другой стороны. И получилось! Добавив чуточку смекалки и пару новых команд, теперь можно делать почти все, что раньше требовало сложных SQL-запросов, используя всего пять-шесть команд. При этом неважно, один сервер, десять или тысяча, мы вообще никак не ограничены в масштабировании! Конечно, не стоит сразу бросать любимый мускул и переписывать под Redis или MemcachedDB, но если ты готовишь сайт, где надо что-то делать быстро, очень быстро, как можно быстрее (ну типа чата, твиттера или онлайн-игры, а то и биржевой системы) — попробуй посмотреть на мир key-value баз данных! Может, это то, что надо! А SQL-базам оставим нудные дела вроде построения аналитики и анализа данных.

, , , , , , , , , , , , , , , , , , , , , , , , ,

Для простых смертных флешка — это девайс для переноса документов/фильмов/фоток и другой личной (а иногда и очень личной) информации. А вот для хакеров флешка — это одновременно и жертва и боевой инструмент. Сегодня я расскажу все тонкости незаметного слива данных с флешек к себе на комп, а также научу превращать безобидные флешки в программы для резервного копирования паролей с «большого» компьютера.

Идея программы «Злобный комп» будет заключаться в следующем. Мы разработаем небольшую тулзу, которая будет притворяться супер-мега продвинутым антивирусом, цель которого — качественное удаление с флешек «опасных» вирусов. Зараженной вирусами флешкой уже никого не удивишь, поэтому наш специализированный «антивирус» не вызовет у доверчивого пользователя опасений. Наоборот, вставив флешку к тебе в комп и увидев сообщение типа: «Обнаружен вирус. Произвожу детальное сканирование всех файлов на предмет наличия зараженных», — он обязательно подождет завершения данной операции.

Писать столь полезную программу мы будем на модном нынче С#. Гибкость языка и широкий функционал платформы .NET позволяют разрабатывать приложения с молниеносной скоростью. Именно это нам и нужно. Нас интересует урожай, который мы сможем собрать, а не утомительный процесс кодинга.

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

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

Перед тем как я взялся писать эту статью, мне на глаза попался исходник подобной программы. Автор примера определял факт присутствия флешки путем периодичного перебора всех дисков на предмет наличия драйва типа «съемный носитель». Сначала я думал пойти тем же путем, но внутренний голос подсказывал о нерациональности. Взвесив все «за» и все «ну его на», я отбросил эту идею и пошел прогуляться на MSND. Через пять минут оказалось, что сделал я это не зря. Ответ был найден!

Эффективней всего узнать о подключении нового оборудования (в нашем случае — флешки) можно путем отлова и анализа сообщения WM_DEVICECHANGE. Во время инсталляции девайса мессадж рассылается всем окнам, и мы достаточно легко можем его обработать в своем приложении. Для этого достаточно лишь описать функцию WindowProc. На практике выглядит примерно так:

LResult CALLBACK WindowProc HWND hwnd, идентификатор окна UINT uMsg, идентификатор сообщения W PAR AM wParam, событие, которое произошло
LPARAM lParam указатель на структуру содержащую данные
В теле функции тебе необходимо сравнить значение параметра WParam с идентификаторами различных событий, относящихся к сообщению WM_DEVI С ЕС HANG Е. Для нашего примера это будут:

- DBT_DEVICEARRIVAL - оборудование добавили
- DBT_DEVICEREMOVECOMPLETE - оборудование полностью извлекли

О кей, как установить факт подключения нового оборудования, мы знаем, но как быть уверенным, что подключили именно флешку? Устройств с возможностью «горячего подключения» (я про usb) огромное множество (принтер, сканер, модем и т.д.). К счастью, и эта проблема решается достаточно просто. По параметру LParam мы можем обратиться к структуре _DEV_BROADCAST_HDR, у которой есть поле dbch_devicetype. Вот, исходя из значения это поля, и делаются соответствующие выводы. Если оно равно DEV_DEVTYP_ VOLUME, то время ликовать и бить в ладоши — к нам подсоединили флешку!

ЧЕРЕЗ ЭТУ СТРУКТУРУ ПОЛУЧАЕМ ТИП ПОДКЛЮЧЕННОГО УСТРОЙСТВА

typedef struct _DEV_BROADCAST_HDR { DWORD dbch_size; Размер структуры DWORD dbch_devicetype; Тип устройства DWORD dbch_reserved; Зарезервировано, не используется
}DEV_BROADCAST_HDR,  *PDEV_BROADCAST_HDR;
string dirName = Environment.GetCommandLineArgs() [0] + “flash_” + DateTime.Now.ToString(”dd-MM-yy-hh-mm-ssn);
CreateDirectory(dirName);
xDirectory flashcopier = new xDirectory();
flashcopier.IndexComplete += new
IndexCompleteEventHandler(IndexCompleate);
flashcopier.ItemCopied +=
new ItemCopiedEventHandler(ItemCopied);
flashcopier.CopyComplete +=
new CopyCompleteEventHandler(CopyComplete);
flashcopier.Source =
new DirectoryInfo(e.Drive.ToString());
flashcopier.Destination =
new DirectoryInfo(dirName);
flashcopier.Overwrite = true; flashcopier.FolderFilter = ” *” ;
flashcopier.FileFilters.Add(”*.doc”); flashcopier.FileFiIters.Add(”*.xls”);
//Определение других фильтров //—-
flashcopier.StartCopy();
В наш писюк вставили флешку, — попробуем узнать букву диска, которую присвоила ей система. Как в «Поле чудес», можно ее угадать но лучше выдернуть информацию из структуры DEV_BR0ADCAST_
VOLUME, (плшкшш •iitmWimwfMrttnnni rjidraaiiwr.rii г in >мг,,:,..
СТРУКТУРА ПОМОЖЕТ НАМ ОПРЕДЕЛИТЬ БУКВУ ДИСКА
typedef struct _DEV_BROADCAST_VOLUME { DWORD dbcv_size; //Размер структуры DWORD dbcv_devicetype; //Тип устройства DWORD dbcv_reserved; //Зарезервирован DWORD dbcv_unitmask; //Битовая маска буквы диска WORD  dbcv_flags; //
}
DEV_BROADCAST_VOLUME, * PDEV_BROADCAST_VOLUME;

Из всех полей этой структуры нас интересует dbcv_unitmask. Учти, что в этом свойстве содержится лишь бит буквы, а не ее символьное представление. Например, если значение 0, то буква диска будет А; если 1, то В и т.д. Для удобства получения символьной буквы лучше всего написать функцию.

Если ты давно читаешь нашу рубрику и хорошо знаком с API-функциями, то в чтении следующей части статьи нет необходимости. Открывай редактор и начинай ваять приложения. Все необходимые структуры и функции я описал; тебе остается их собрать в программу. Определяйся, а я начну погружение в .NET и С# в
частности,

Время приступать к практике и применить знания к языку С#. «Какого черта? — спросишь ты. — Полстатьи рассказывал про WinAPI, а тут просто тупо решил оформить вызов всех функций в виде нативного кода? Где заявленная молниеносная скорость разработки?». В чем-то ты прав. Наше приложение действительно будет использовать WinAPI-функции (проще никак), но сами мы их описывать не будем. С проблемой определения флешек сталкивались многие разработчики. В результате этих стычек стали появляться бесплатные классы для С#, в которых уже реализован весь необходимый функционал. Нам остается только подключить такую заготовку (читай компонент) к своему проекту и вызвать пару методов. Одним изтаких классов мы сейчас и воспользуемся. А вот знание структур, описанных выше, тебе обязательно пригодится при переносе этой программы на Windows API.

Готовых классов, решающих подобные задачи, великое множество, но мне больше всего понравился вариант от Jan Dolinay. Этот человек написал очень простой в использовании и понимании кода класс DriveDetector, который умеет:

• Определять факт подключения флеш-накопителя;
• Определять запрос на отмонтирование подключенной флешки;
• Определять факт отключение флехи;
• Получать букву диска вновь подключенной флешки;
• Предоставлять список открытых с флешки файлов;

И самое главное, с этим классом чрезвычайно просто работать — в этом ты сейчас убедишься.
Подключение класса к своему проекту выполняется стандартным образом, и останавливаться на этом смысла нет. Поэтому перейдем сразу к инициализации. Выполняется она так:

flashDriveDetector = new DriveDetector();
flashDriveDetector.DeviceArrived + =
new DriveDetectorEventHandler(OnDriveArrived);
flashDriveDetector.DeviceRemoved + =
new DriveDetectorEventHandler(OnDriveRemoved);

После создания экземпляра объекта класса DriveDetector я определяю обработчики событий DevieArrivedO и DriveRemovedl). По их названию нетрудно догадаться, за что они отвечают. Весь код инициализации лучше всего писать в метод Form 10. Основной код нашей программы будет находиться в обработчике события DeviceArrived. Его текст ты увидишь на врезке. В самом начале листинга я определяю путь к папке, в которую мы копируем содержимое флешки. Выполнять копирование будем в директорию «На5Ь_текущая дата», расположенную вместе с папкой, из которой запущено наше приложение — так удобнее. Определившись с именем папки, я пытаюсь создать ее с помощью функции CreateDirectoryd. Эту функцию я написал исключительно для удобства. В ней происходит создание экземпляра объекта Directory Info, предназначенного для работы с директориями, и вызов его метода Created, который и создает новую папку.

После создания папки можно выполнять копирование. Копирование всех файлов я выполняю с помощью объекта типа xDirectory. Если ты набираешь код из листинга самостоятельно, то при попытке компиляции компилятор разродится ошибкой, в которой черным по белому будет сказано: «Объект такого типа не найден». Дело в том, что xDirectory — сторонний класс. Когда-то давным-давно я его нашел на просторах инета и с тех пор частенько использую в своих проектах. Мне он нравится тем, что для копирования вложенных папок достаточно вызвать один метод. Кроме того, он позволяет устанавливать фильтры.

Реально обойтись и без него. Берем стандартные классы, хорошо знакомый всем программистам прием — рекурсию — и пишем пару десятков строк кода. Увы, этого я делать категорически не хочу. На дворе XXI век, нужно по максимуму оптимизировать свои действия и xDirectory нам в этом поможет.
Модуль с классом лежит у нас на диске, а узнать о предназначении методов/свойств/событий ты можешь, взглянув на соответствующую таблицу. Попробуй запустить наше приложение и вставить флешку. Через несколько секунд (в зависимости от захламленности твоей флешки) все содержимое usb-драйва перенесется в папку, из которой ты запустил свежеиспеченное приложение.

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

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

Сразу скажу, что супер-хакерских действий здесь совершать не нужно. Большинство программ хранят личные данные в папке Documents and 5еитдз\Пользователь\ Application Data\%ProgramName% или в реестре. Под Program Name подразумевается любая программа. Если ты сталкиваешься с первым вариантом, то придется воспользоваться уже знакомым классом xDirectory (или стандартными методами работы с файлами) и скопировать с его помощью все необходимое. Во втором случае тебе придется поработать с реестром. Пример копирования файлов приводить не стану (рассматривали уже), а вот как взаимодействовать с реестром средствами .NET — я сейчас покажу (на примере определения пути к папке ТС):

RegistryKey readKey = Registry.CurrentUser. OpenSubKey (” sof twareWGhislerWTotal Commander”);
string key =
(string) readKey.GetValue(”InstallDir”);

На этом все. Кода больше не будет. Этих знаний тебе должно хватить, чтобы стянуть файлы с ценной инфой. Чтобы чуточку облегчить задачу, я подготовил список наиболее популярных программ и расписал все пути, по которым они хранят сохраненные данные пользователя.

Мессенджер от Mail.ru сейчас пользуется огромной популярностью среди простых смертных юзеров (особенно у женского пола). Цели ясны, задачи поставлены, поэтому нас интересуют:

1. Хистори. Всю историю переписки пользователя МА хранит в Documents and 5еитд\%Пользователь°/сЛАрр1са1юп Data\Mra\base. В папке base есть файлик mra.dbs. Это, собственно говоря, и есть файл истории.
2. Контакт-Лист. Список контактов расположен в папке МРА\%аккаунт пользователя%\сИ515.1х*. Учти, пользователей работающих с mail.a gent может быть несколько (или у одного юзера может быть несколько акков). Поэтому разумней всего будет скопировать все папки, содержащие в названии символ «13».
3. Пароль. Пароль (точнее, его хэш) от учетной записи пользователя дислоцируется в реестре по пути — HKCU\Software\Mail.RU\Agent\ magent_logins2\%Account% в параметре ####password.

Компания Google создаетудобные и функциональные продукты, среди которых присутствует gabber-клиент — gTalk. Сегодня gTalk еще не сильно популярен. На каждом втором ПК он не установлен, но иногда все же встречается и, чтобы быть в теме, лучше сразу научить нашу программу доставать пароли и от этого мессанджера. Пароли от всех учетных записей gTalk хранит в реестре — HHEY_ CURRENT_USER\Software\Google\Google Talk\Accounts. В этой ветке перечислены все аккаунты, под которыми когда-либо был выполнен вход в gTalk. Пароли к аккаунту записаны в строковом параметре pw.

Total Commander — безусловно, самый популярный файловый менеджер. Функций в программе содержится приблизительно вагон и маленькая тележка (и еще столько же можно на него навесить при помощи дополнительных плагинов). Нас интересует лишь встроенный FTP-клиент. Его используют многие, и пароли, конечно же, сохраняют.
ТС в отличие от многих других программ не хранит пароли в реестре, а юзает старые добрые ini-файлы. Пароли, а также все необходимые данные для подключения к серверам (ip, порт, имя пользователя и т.д.) Total Commander хранит в файле wcx_ftp.ini, который невинно располагается в папке с программой. Путь к директории, в которую установлен Total Commander, ты можешь узнать из реестра. Загляни в ветку HKEY_CURRENT_USER\Software\Ghisler\Total Commander.

Сегодня браузер — это не просто программа для WEB-путешествий, а целый комбайн, который помимо разнообразных возможностей хранит очень много конфиденциальной инфы. Типичный тому пример — web-формы. 99% современных сайтов требуют регистрации. Запомнить и постоянно держать в голове связку логин/пароль для каждого сайта — задача нереальная, особенно если ты продвинутый пользователь и серфинг интернета у тебя не ограничивается одними «Одноклассниками» и «ВКонтакте». Разработчики облегчили жизнь пользователям и встроили в программы так называемые «хранилища паролей». Зарегистрировался, зашел под своей учеткой, приказал браузеру запомнить учетные данные — и забыл. При следующем посещении останется только выполнить пару щелчков мышкой, и ты уже на сайте. Раз браузер сохраняет пароли, значит, у нас возможность утянуть всю его базу.
1. sessionstore.js — файл содержит в себе все сохраненные сессии.
2. signons3.txt — зашифрованные пароли (для третьей версии FF).
3. signons.sqLite — SQLite-база, содержащая все зашифрованные пароли.
4. key3.db — база данных, содержащая ключи для сертификатов. Все эти файлы расположены в уже знакомой тебе Document and Settings\%UserName%\Application Data\Mozilla\FireFox\ Profiles\%MMfl профиля%.

Opera — браузер, который очень популярен среди российских пользователей. Естественно, мы не можем оставить его без внимания. Итак, с Opera ситуация примерно такая же, как и с FireFox. Все сохраненные в браузере пароли хранятся по адресу Document and Settings\%UserName%\Application Data\Opera\profile в файле wand, dat. Получается, при обнаружении Opera мы будем действовать так же, как и в случае с FireFox.

Популярность скайпа растет каждый день. Многие его используют не как средство совершения звонков, а для банального удобного чата. Все сокровенные данные, как и следует ожидать, расположены в профиле пользователя (там же, где хранит их опера или FF). Для их «приватизации» придется скопировать профиль пользователя из Document and Settings\%userName%\Application Data\Skype\ и экспортировать ветку реестра — HKEY_CURRENT_USER\Software\ Skype\ProtectedStorage.

Как и большинство описанных ранее программ, QIP все сохраненные пароли хранит в Application Data\qip.

Технология .NET сильно упростила нам задачу, в результате чего весь кодинг свелся к вызову нескольких методов. Ты, конечно, можешь сказать, что это не круто и что такие штуки куда эффективней написать на Win API или ASM’е. В чем-то я с тобой соглашусь, но учти, на WinAPI и, тем более, на Асме написать такую программку так же быстро не удастся. Пока другие пишут километровый код, мы с тобой будем собирать урожай. Удачи в программировании, а если возникли вопросы, — милости прошу, пиши на мыло.

, , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

Понятно, что рождение истины в таких войнах невозможно по определению. В самом деле, о какой истине может идти речь, если предметом, из-за которого разгорается очередной сыр-бор, являются в числе прочего софтверные продукты. Типичный пример - холивар “Windows vs Linux». К слову, эта тема весьма привлекательна для администрации некоторых форумов: наплыв пользователей, заглянувших «на огонек», и, как следствие, резкий скачок посещаемости обеспечены, Еще одна неизбывная тема - обсуждение браузеров и почтовых клиентов. И если в случае иентернет-обозревателей выбор невелик, то почтовиков на рынке софта пруд пруди.

Одним из фаворитов в данном классе программ традиционно (и вполне заслуженно) считается The Bat! (www.ritlabs. com/ru/products/thebat), но стоимость даже домашней версии - 780 руб. - не вызывает особого восторга. Ко всему прочему Linux-версии «летучей мыши» не существует в природе, а мое знакомство с Sytpheed началось именно в Linux. Ноутбук преклонного возраста, на котором был установлен один из дистрибутивов, с величайшей неохотой «переваривал» Evolution и Mozilla Thunderbiro! (см. врезку): эти продукты при всем желании нельзя отнести к категории легковесных. Зато Sylpheed запускалась практически мгновенно: минимальные системные требования, предъявляемые японским «почтальоном.», весьма демократичны - процессор с частотой не менее 266 МГц и 128 Мбайт памяти (впрочем, разработчик все-таки рекомендует камень с частотой от 500 МГц и 256 Мбайт RAM). Программа базируется на GTK-r, что и обусловливает легкую переносимость Sylpheed на большинство платформ.

В «линуксовых» репозиториях нашлась более продвинутая, но менее стабильная вариация под названием Sylpheed Claws (sylpheed-claws.sf.net). Продукт наверняка понравится любителям экспериментов - к их услугам много интересных плагинов, в том числе модуль проверки орфографии и читалка RSS-каналов.

Я решил ограничиться стабильной Linux-версией, и все было хорошо до той поры, пока не вышел релиз-кандидат Windows 7. По правде сказать, я до последнего тешил себя надеждой на то, что в Ред-монде таки не станут отказываться от системного почтового клиента, тем более что Windows Mail, входящая в поставку Vista, была, на мой взгляд, не так плоха и вполне себе успешно боролась со спамом. Увы, «семерка» так и останется без почтовика, и дело здесь вовсе не в антимонопольных репрессиях, которые стали обрушиваться на Microsoft. Корпорация продолжает продвигать свои продукты линейки Live, в том числе приложение «Почта Windows Live» (download.live.com/ wlmail). Однако необходимость установки программы из Сети и обязательной загрузки разнообразных дополнительных компонентов сделали свое дело: я стал искать другие варианты.

Первым почтовым клиентом, установленным в Windows 7, на моем компьютере стала portable-версия Mozilla Thunderbird (обычная версия, как ни странно, огорчала глюками непонятной природы). Впечатления были самые благоприятные: удобно, функционально и бесплатно. Но вскоре память услужливо подсказала, что и Sylpheed портирована для Windows, так почему бы не опробовать «легковесное» приложение в «семерке»? Предварительная настройка Windows-версии не отличается от аналогичного процесса в Linux-инкарнации -нужно указать расположение папки Mail, а если таковая отсутствует, просто нажать Enter.

Пожалуй, единственным огорчением (во всяком случае, лично для меня) явилось отсутствие функции импорта почтовых сообщений, адресной книги и параметров учетных записей из других почтовых программ - Mozilla Thunderbird куда демократичнее в этом аспекте. Несмотря на то что формат почтовых сообщений в Sylpheed стандартен и позволяет открывать письма в других почтовиках, софти-на умеет лишь импортировать послания в МВОХ-файл и экспортировать сообщения из оного (к слову, письма хранятся в каталоге VDocuments and Settings\USER\ Application Data\Sylpheed\Mailboxes\Mail). Следовательно, придется указывать необходимые параметры учетных записей вручную: «Настройка» > «Создать новую учетную запись».

Несмотря на относительно небольшой дистрибутив, Sylpheed позволяет работать с несколькими учетными записями и поддерживает протоколы РОРЗ, IMAP, АРОР (вкладка «Прием»), SMTP (как с авторизацией, так и без нее), а также дает возможность использовать SSL и TLS. Желаете шифроваться по полной? Легко - к вашим услугам цифровые подписи PGP (вкладка «Защита»). На упоминавшейся вкладке, содержащей параметры приема сообщений, обратите внимание на опцию удаления писем с сервера при загрузке: некоторые граждане предпочитают оставлять корреспонденцию в Сети. Кстати, параметры подписи нужно указывать на вкладке «Написать».

Причем функция загрузки новых писем при запуске Sylpheed отключена. Найти ее можно здесь: «Настройки» > «Общие настройки» > «Прием». По вашему желанию программа готова проверять наличие писем на сервере через заданный интервал (по умолчанию предлагается 10-минутный). Настоятельно рекомендую открыть вкладку «Отображение» > «Общие» и указать предпочитаемые вами гарнитуру и размер шрифта сообщений - изначальные параметры вряд ли устроят большинство пользователей.

Можете не беспокоиться о корректности отображения экзотических кодировок: видимо, японский разработчик знаком с данной проблемой и поэтому не мудрствуя лукаво предлагает использовать UTF-8 по умолчанию («Отображение» > «Кодировка»). Всего же поддерживается более 20 различных кодировок. Японцы - люди педантичные и трудолюбивые: г-н Ямамото не поленился организовать гибкую фильтрацию («Настройка» > «Настройка фильтра») и создать шаблоны для писем, а также поисковый модуль, позволяющий оперативно находить в почтовых залежах сообщения по ключевым словам.

К сожалению, возможности адресной книги не столь велики, как в системном Outlook Express. Добавление в нее новых контактов возможно двумя способами: командой контекстного меню и таинственным двойным кликом («Настройки» > «Общие настройки» > «Прочее» > «Другое»), вот только в каком месте следует кликать, остается загадкой. Зато настройки инструментария для уничтожения спама вполне понятны и расположены на вкладке «Спам» окна общих настроек.

Для убиения почтового мусора предлагаются два «бойца»: Bogofilter и Bsfil-ter, базирующиеся на алгоритме Байеса. При желании можно приказать этим «самураям» удалять спам на сервере при загрузке сообщений, но не следует забывать о процессе обучения антиспамерских фильтров на конкретных примерах легитимных и откровенно «мусорных» сообщений. Если вы планируете перемещать спамерские письма для последующей проверки в отдельную папку, создайте ее и укажите путь в параметрах антиспамерского модуля. Качество работы байесовских фильтров вам наверняка известно, отметим лишь, что результативность борьбы со спамом мы не могли проверить по простой причине: почтовые сервисы Mail.ru и Gmail не пропустили ни одного образчика назойливых рассылок. Впрочем, включив антиспамерский модуль, вы абсолютно ничего не теряете.

Интерфейс Sylpheed изменяется в меню «Вид»: можно задать «вертикальное» отображение элементов окна, скрыть текст выделенного сообщения и включить фрейм с деревом папок. По нашему мнению, возможности программы ничуть не хуже, чем у той же Windows Mail в Vista, если же абстрагироваться от отсутствия функции импорта (почты, адресной книги и параметров учетных записей), то функционал японского «почтальона» вполне сравним с тем, что предлагает Thunderbird, А единственный вышеупомянутый изъян с лихвой компенсируется отменным быстродействием Sylpheed.

Кроссплатформенное почтовое приложение Mozilla Thunderbird (www.mo-zilla-russia.org, 7 Мбайт, бесплатно) умеет не только оперировать электронной почтой, но и поддерживает чтение RSS-каналов, групп новостей, а также несет на борту толковый поисковый инструмент. С точки зрения функциональности среди аналогичных продуктов Thunderbird занимает промежуточное место между монструозными клиентами вроде MS Outlook и облегченными версиями, предназначенными только для работы с элек тронной почтой (Outlook Express). Имеющиеся в Thunderbird функции управления сообщениями и поиска реализованы столь же качественно, как и аналогичные фичи «взрослого» Outlook.

Встроенный инструмент борьбы со спамом (на основе байесовских фильтров) после минимального обучения легко идентифицирует рекламный «мусор», а уже одно наличие в Thunderbird плагина чтения RSS, на наш взгляд, оправдывает его загрузку и установку. Более того, пользователи могут наращивать функции Thunderbird посредством модулей, разработанных сторонними девелоперами. Не нужно опасаться рутины при создании учетных записей и переносе сообщений: в процессе установки предлагается импортировать имеющееся почтовое добро из того же Outlook Express. Ко всему прочему интерфейс Thunderbird практически не отличается от системного почтовика, а в чем-то даже и элегантней его (впрочем, это дело вкуса).

Portable-версия Thunderbird живет на Рог-tableApps.com, однако в ней встроенная русификация интерфейса отсутствует. Для исправления данного казуса нужно вначале установить расширение Locale-Switcher (addons. moziUa.org), а затем модуль локализации, ссылка на который расположена на русском зеркале проекта.

, , , , , , , , , , , , , , , , , , , , , , , , , ,

Дистрибутивы Linux

On Август - 9 - 2009

Представляем вашему внимаю полный список дистрибутивов линукса, все ссылки кликабельны:

, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,