Archive for Август, 2009

Виртуализация с помощью Linux

Posted by admin On Август - 28 - 2009

Хочешь организовать публичный доступ к сетевым сервисам, но беспокоишься за безопасность? Решил переложить часть своих обязанностей на другого человека, но не хочешь наделять его правами? Управляешь хостингом и желаешь дать своим клиентам настоящую свободу? С помощью системы виртуализации 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-базам оставим нудные дела вроде построения аналитики и анализа данных.

Опасность использования флешек

Posted by admin On Август - 28 - 2009

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

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

Писать столь полезную программу мы будем на модном нынче С#. Гибкость языка и широкий функционал платформы .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 или Linux

Posted by admin On Август - 26 - 2009

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

Posted by admin On Август - 9 - 2009

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

В настоящее время, время высоких скоростей обмена информации, даже для простого пользователя возникает вопрос хранения информации. Наряду с хранением также встает вопрос распределения этой информации или обмен. В этой статье мы не будем касаться законодательных и этических моментов связанных с распространением той или иной информации, мультимедийного контента, программного обеспечения. Заострим лишь наше внимание на способах и возможностях хранения информации, а также распространении.
Предпосылка. Обычный домашний пользователь безграничных просторов Сети Интернет. Безлимитный тарифный план, приемлемая абонентская плата, ресурсы домашней, (локальной), сети и… И пользователь начинает потреблять. Даже если свести желание только к конкретным интересам, то объем информации просто потрясает. Как известно жесткие диски к сожалению имеют конечный объем, не резиновые, и их рабочее пространство подходит к концу. Резонен вопрос: А куда все это деть? Записать на болванки, с одной стороны приемлемо и возможно, но тогда начнет заполняться жизненное пространство – стойки, ящики. Встает задача каталогизации, списков и появятся дополнительные временные затраты на поиск болванки с нужной информацией. Возможно, есть смысл, записывать на оптический носитель только действительно что-то сверхценное для пользователя, какую-то информацию личного характера, домашний видео архив, фотографии, документы.
А что делать с остальным объемом данных?
Пользователь ведь не только потребляет, условия файлообмена таковы, что получил, (скачал), поделись, (раздай). Сменные жесткие диски, подключаемые мобильные решения в этом случае помогут мало и слабо, исключением может быть только тот случай если персональный компьютер работает в круглосуточном режиме. Но, если рассмотреть ситуацию еще чуть глубже и предположить что дома у пользователя не один компьютер, а больше, то здесь необходимо совершенно другое конструктивное решение. И такое решение есть – это NAS.
Что бы не быть голословным обратимся к Свободной Сетевой Энциклопедии и процитируем определение NAS. Цитата: «NAS (англ. network attached storage) — сетевая система хранения данных. По сути, представляет собой один компьютер с некоторым дисковым массивом, подключенный к сети Ethernet по протоколу TCP/IP. Часто диски в NAS объединены в RAID массив. Несколько таких компьютеров могут быть объединены в одну систему. Обеспечивают надёжность хранения данных, легкость доступа для многих
пользователей, лёгкость администрирования, масштабируемы». Действительно, согласитесь, что иметь такого рода независимое хранилище с возможностью распределять информацию – это практически идеальный вариант, и не только для домашних пользователей, но и для бизнес-структур.
На нашем рынке представлен вполне приличный модельный ряд данного типа устройств, в разном ценовом диапазоне и возможностями. При выборе NAS, скорее всего лучше обращаться не только к продавцам, а на соответствующие форумы, почитать почти независимые обзоры, обратиться на сайт производителя.

Бесплатное ПО для предприятий

Posted by admin On Август - 9 - 2009

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

Итак, речь в данной статье пойдет об бесплатных аналогах приложений под Windows.
Самое первое, что приходит на ум – Microsoft Office. Что только не умеет этот пакет! И с таблицами он работает, и документы чудесно оформляет, и базу данных в нем ничего не стоит создать… Уже не говоря о таких вещах, как электронная почта и контакты… Незаменимая вещь! Что же можно эдакое найти «нахаляву»?
OpenOffice. Компания «Инфа-ресурс» уже давно занимается разработкой и локализацией этого проекта. Этот продукт можно скачать по адресу http://www.i-rs.ru/Skachat . В состав него входят:

OpenOffice.org Writer (почти полностью заменяет Microsoft Word)
OpenOffice.org Calc (забудем про Miсrоsоft Еxсеl)
OpenOffice.org Drаw (нарисуем векторно)
OpenOffice.org Impress (Вместо PowerPoint)
OpenOffice.org Bаse (Делаем БД)
OpenOffice.org Math (Редактируем формулы)

На мой взгляд, весь этот пакет с легкостью заменяет дорогущий Офис от Miсrоsоft.
Если же нам просто необходимо набирать тексты и применять нехитрое форматирование, то нам вполне хватит и AbiWord, скачать который можно тут http://www.аbiwоrd.соm/ . Эта софтина отлично форматирует текст, применяет стили, вставляет таблицы, картинки, сноски. Следует заметить такую важную особенность, как проверка орфографии. Да, да, русский язык также поддерживается!!!

А как же нашему брату проверить почту? Ведь многие используют TheBat!, который слишком дорого стоит для студента. Нам поможет такая программа, как «Mozzila Thundеrbird». http://www.mоzilla.ru/prоduсts/thundеrbird/

«Mozzila Thunderbird имеет простой, гибко настраиваемый интерфейс. Вы можете добавлять и удалять кнопки на панели, менять раскладки окон. Mozzila Thunderbird не использует ни строчки кода от Intеrnеt Еxplоrеr. Программой поддерживаются цифровые подписи, шифрование сообщений, а также проверка сертификатов. HTML редактор писем создает компактный код. Одно и то же письмо, написанное в Mozzila Thunderbird и Outlook Express будет иметь разный размер, отличающийся в 4-5 раз. Mozzila Thunderbird не указывает жестко по умолчанию шрифты, которыми будет набираться сообщение, и как результат, получатель прочитает сообщение, используя тот шрифт, который нравится ему, а не отсылающему. Смайлики помещаются в сообщения не как картинки, а как HTML теги. Все остальные почтовые программы могут только загромождать письма графикой. Проблем с кодировками не существует. Письма из других почтовых клиентов отображаются правильно, а сам Mozzila Thundеrbird создает такие сообщения, которые без проблем читают остальные почтовые программы. Поддерживается смена тем оформления и установка модулей расширений. Реклама обнаруживается автоматически, и вы можете делать с ней все, что угодно. Кроме того, почтовый клиент может хранить вашу почту как в отдельных папках для каждого ящика, так и в общей для всех. Другие почтовые программы могут что-то одно.»

Кажется нечего добавить. Скажу лишь, что Mozzila Thundеrbird имеет сборки под Windows, GNU/Linux, Mac OS X, OpenSolaris и FreeBSD.

«Ой, а что бы такое найти вместо фотошопа?..» - спросили из зала. «Да это же Гимп!» - отвечу я. http://www.gimp.оrg/

Почти полная замена Фотошопу. Принципы работы те же. Меню только разные. Сказать больше нечего.

«А киношку как смотреть?» - не унимался кто то…
Разрешите представить – Mplayer! (http://www.mplауеrhq.hu/dеsign7/nеws.html) А вот его функционалу позавидует почти любой win-плеер.
MPlayer поддерживает многочисленные видео- и аудио-форматы, такие как компакт диски, DVD, Video CD, мультимедиа-файлы в формате AVI, ASF/WMV/WMA, QT/MOV/MP4, RealMedia, Ogg Vorbis, NUT, NSV, VIVO, FLI, NuppelVideo, yuv4mpeg, FILM (.cpk) формат, RoQ, PVA и Matroska, записанные с видеокодеками DivX, MPEG-1, MPEG-2, MPEG-4, Sorenson, WMV, RealVideo, x264 (реализация стандарта H.264) и аудио-кодеками MP3, Vorbis, RealAudio, AC3/A52 (Dolby Digital), AAC (MPEG-4 аудио), QuickTime, VIVO аудио и WMA, а также многими другими более-менее распространёнными видео- и аудио-кодеками. Также поддерживается потоковое воспроизведение через HTTP/FTP, RTP/RTSP, MMS/MMST, MPST, SDP; захват и запись(MEncoder) телевизионного сигнала. Он много чего умеет…

Диски будем записывать тоже бесплатной программой с говорящим названием Infa Recorder http://infaRecorder.sourсeforge.net/ Ведь надо как то сохранить в годах то, что создал когда то! Не платить же колоссальные деньги за «тяжеленный» Nero, который, как мне сказали, скоро и ОС свою выпустит!..
Infa Recorder предлагает большое количество продвинутых функций, имеет ясный интерфейс и интегрируется с Windows Explorer.

Возможности программы
Создание произвольных Data, Audio и смешанных проектов и запись и на физические носители, а также в дисковые образы.
Поддержка двухслойных DVD
Очистка перезаписываемых дисков четырьмя различными способами.
Запись дисковых образов (ISO и BIN/CUE)
Фиксация (закрытие диска, предотвращающее последующую запись данных)
Сканирование шины SCSI/IDE и сбор информации об обнаруженных устройствах.
Создание копий дисков, с использованием временного файла-образа или “на лету”
Импортирование сессий с мультисессионных дисков и добавление на них новых сессий.
Отображение информации о диске.
Сохранение аудиотреков и дорожек с данными в файлы (.wav, .wma, .ogg, .mp3 и .iso).

И последнее… Безопасность превыше всего. Используя ClamWin Free Antivirus http://www.сlamwin.сom/ мы решим некоторые проблемы относительно цифровой заразы.
ClamWin Free Antivirus выпускается под лицензией GNU General Public License и является свободным программным обеспечением. Он поставляется с дружественным инсталлятором и исходными кодами бесплатно.

Возможности ClamWin:
Планировщик сканирования по расписанию
Автоматическое обновление антивирусной базы
Антивирусный сканер
Интеграция в контекстное меню Проводника в Windows
Плагин для Microsoft Outlook

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

Вокруг Open Source

Posted by admin On Август - 9 - 2009

Погружение в мир Open Source на «Связь-Экспокоме» началось издалека—с «железной» компании Sun Microsystems. Она выступала под своим брендом. Оборудование выставлялось на одном стенде — там можно было встретить серверы на «спарках», терминалы Sun Ray, экономящие средства и решающие проблемы безопасности. На такую машинку ценой 200-300 долл. довольно сложно протащить вирусы. Вторая часть, софтверная, была на стенде, посвященном СПО. Со словоохотливыми сотрудниками компании можно было вдоволь наговориться и узнать, что, к примеру, когда появились слухи о слиянии Sun и IBM, они отправились спокойно спать, ибо клиентская база этих компаний в общем-то не пересекается: у IBM свой процессор, свои серверы, клиенты же Sun, случись объединение, благополучно перейдут к Fujitsu, в ассортименте которой тоже есть «спарки». В общем, выгоды никакой. Другое дело — Oracle. Крупная софверная компания, покупающая крупного производителя железа, — ситуация весьма необычная для ИТ-рынка.

Oracle в результате этой сделки вполне может стать «второй 1ВМ».
Поддерживаемые Sun продукты с открытым кодом не пропадут. Напротив, работа над многими из них, например над Open Office, развернулась очень широко. В «Свободном офисе» обещано значительное увеличение скорости загрузки и открытие документов, нарисованы прототипы интерфейсов, которые отчасти навеяны лентами Microsoft Office. В России Sun активизировала продвижение своей OpenSolaris, специальная версия которой даже сертифицирована в ФСТЭК.

Вообще Open Source не ограничился несколькими стендами, на которых демонстрировались самые разные продукты— AkLinux и сделанный на его основе «Школьный сервер», «Русская Fedora» и т.п. В рамках выставки прошла и конференция «ИТ-Весна-2009», на которой очень подробно говорилось обо всех достижениях и проблемах СПО — сложностях лицензирования и продвижения продуктов, об их качестве. Забавно, но приглашение на нее пришло от Microsoft. Один из невеселых выводов, сделанный в рамках дискуссии < состоял в том, что софтверной индустрии ПО в России попросту нет. Те несколько известных компаний — «Лаборатория Касперского», Abbyy, 1С и др. — это слишком мало.

Второй поднятый вопрос касался того, быть или не быть российской операционной системе. По мнению принявшего участие в «ИТ-Весне» Ильи Пономарева, председателя подкомитета Госдумы по технологическом) развитию, создать свою систему — не такая уж и сложная задача. Скорее всего, он прав: академические разработки новых операционных систем, опирающиеся на совершенно иные архитектуры — микроядерные, а не монолитные, — уже давно ведутся и в общем-то не требуют неподъемных инвестиций. Это, например, ОС Minix, детище Microsoft Research ОС Singularity, доступная в виде Open Source, и даже таинственная российская ОС «Фантом», существующая, похоже, пока только на бумаге или в чьих-то головах. Однако главная сложность на пути всего нового — это не разработка, а следующий после нее этап, То есть продвижение на рынок. Драйверы, интерфейсы, создание, портирование Unix-окружения, подготовка национальных дистрибутивов потребуют не столько существенных инвестиций (ведь не секрет, что коллективный труд сообщества во многих случаях удешевляет разработку), сколько грамотного управления этой массой людей. Справится ли государство с такой миссией — совершенно неясно. Возможно, и здесь без помощи Microsoft, умеющей делать продукты, понятные большинству, не обойтись.

Выставочный Open Source на этом не закончился — на «Связь-Экспокоме» прозвучало довольно много анонсов. Вот лишь некоторые из них. Появилась еще одна версия Linux для серверов и рабочих станций — она получила названия «МСВСфера Сервер» и «МСВСфера Клиент» и основана Red Hat Enterprise Linux. Дистрибутив разработан Национальным центром поддержки и разработки (НЦПР) совместно с Red Hat и ВНИИНС. Летом ожидается сертификация в ФСТЭК — тем самым эта версия будет полностью соответствовать российским требованиям к информационной безопасности и может использоваться в организациях, работающих с персональными данными граждан.

Создатели системы NetPolice (см. www.netpolice.ru), решившие сделать Интернет дружественным и безопасным, предлагают и закрытые решения для Windows, и аналогичные открытые для Linux — они даже могут войти в очередную версию российского дистрибутива AltLinux. Задача проекта — защитить от интернет-угроз и негативного контента.

Open Source привлекает и системных интеграторов. Так, для госсектора предназначено аппаратно-программное решение «АйТи». Оно включает в себя недорогой, созданный Kraftway из «ноутбучного» железа, компьютер и ряд бизнес-систем с открытым кодом. Помимо стандартного Open Office, туда включена система электронного документооборота Open Referent. При необходимости «АйТи» включает и ряд коммерческих продуктов для Linux — скажем, FineReader, информационно-справочные системы и т.п. Еще больше свободного кода, наверное, создаст и организованная ею дочерняя фирма «ПингВин Софтвер» — в ее планах доработка интерфейса пакета Open Office, создание шрифтов и адаптация интерфейсных оболочек так, чтобы они максимально походили на Windows или MacOS X. Звала «АйТи» и в свою академию за знаниями о Linux.

В завершение хочется сказать, что, несмотря на кризис и не такое большое количество нового консыомерского железа, российская выставка все-таки удалась. Что, кстати, отметил и Президент России ДА. Медведев, посетивший ее в день открытия. Он высказал сожаление, что не может погулять по ней подольше. Возможно, развлекательного в ней было недостаточно (хотя конкурсы, лотереи, соревнования, презентации проходили постоянно), однако скучно не было. А разве бывает скучно, когда спутниковая навигация, Mobile WiMAX и Open Source делают такой большой шаг вперед?