LinuxForum.Fans
Тема

Kaspersky LiveCD: загрузка по сети

Автор: Vaicartana 10 сообщений 5014 просмотров
#219940

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

Перерыв пол-тырнета пришел к однозначному решению: Касперыча по сети ставят через (_!_) и запускается он только на машинах с минимально 256м памяти. Работая под LTSP и видя как это работает на совсем уж убогом железе я решил что такое безобразие меня точно не устраивает, поэтому решено было сделать такой загрузчик, чтобы он не гонял по сетке почти 200мег всякий раз при загрузке каспера(не то, чтобы оно каждый день, но все же :D ). Кроме того работая с wifi сетями с досадой констатирую: и так не быстрый (не верьте рекламе в 300мбит, в лучшем случае получите 27, а средняя и того меньше - около 10мбит!) канал разделен на всех пользователей и при не очень качественной связи проседает так, что 200 метров проще донести на флехе.
Процесс разобъем на две части, в этой будет описано как запустить касперского по сети на машине с 256мб памяти.

Как это будет работать: на сервере служба dhcp выдаст адрес клиенту и укажет что есть загрузчик pxelinux, клиент запросит файл через tftp и получит первое ядро, которое, загрузившись, даст пользователю выбор системы загрузки, загрузит ядро линукса и файловую систему initrd, инициализация которой закончится тем, что будет загружена уже реальная файловая система. Наглядно это выглядит так:

[dhcp]->[tftp]->[pxelinux.0]->[vmlinuz + initrd]->[rootfs]

Немного о initrd. Это сжатый образ файловой системы, имеющий небольшой тулкит для начальной загрузки. В его корне расположен файл *init которому ядро передает управление. Наша первоочередная задача расколупать этот образ и отредактировать файл init. Замечу, что неудачное заколупывание обратно приводит к тому, что ядро vmlinuz не может разархивировать файл что приводит к фаталу и панике ядра :D, а так же разным ошибкам, в частности к Failed to execute /init
Хоть ядро и шибко вумное, но некоторые архивы оно не понимает, насколько я понял это зависит от того, что в него было включено при компиляции. gzip увидели все доступные мне ядра, а вот 7z - ни одно...
Чтобы разобрать initrd от кашмерского понадобится squashfs, но тот, что был у меня из коробки(ubuntu 11.04) не поддерживал lzma, поэтому пришлось брать напильник.

Если у Вас lzma поддерживается этот пункт можно пропустить. Проверить можно командой
[console]
mksquashfs
.............
Compressors available and compressor specific options:
gzip (no options) (default)
lzma (no options)
xz
[/console]

В принципе lzma используется только в образе реальной фс, и если Вы не собираетесь править ее содержимое данный пункт можно пропустить, меня лично раздражает две вещи: собственно отсутствие поддержки lzma :D и навязчивое окно EULA при открытии кашмерыча. Если данные проблемы Вас не касаются - пропускаем этот пункт.

Показать

Итак, нам понадобится архиваторы:
- squashfs-tool с поддержкой lzma,
- xz-5.0.3

тут сказано как поставить squashfs, но совет не полный, мне пришлось сначала установить g++(не путать с gcc!), но при попытки компиляции вышла ошибка zlib.h, после установки библиотечки все равно не захотела ставиться, так как не был найден xz.
В общем, порядок следующий:
- ставим g++ и zlib1g-dev
text

sudo apt-get install g++ zlib1g-dev

- Зесь берем xz, разархивируем и устанавливаем по мануалу
- в каталоге xz от рута выполняем следующее:

text

./configure --disable-shared
make -C po update-po
make install

далее уже можно установить squashfs как указано по ссылке выше.

Инструментарий подготовлен, можем приступать к препарации поциента :D
Скачивем образ кашмировского, гугл в помощь, версии обновляются каждый год, за всем не уследишь, а мануал хочется универсальный, на сколько это возможно.
Кашмерский свои паделки гордо именует rescue(типа всё от "версачи"), соответственно имеем
/cdrom/boot/rescue - ядро gentoo linux
/cdrom/boot/rescue.igz - сжатая фс

вот её то, болезную, и будем сейчас мучить. Для начала просто раЗкроем её.

text

7z x rescue.igz

да, это простой 7z, хотя file rescue.igz и говорит что это gzip, но онный его не берёт.
теперь здесь же создадим папку, войдем в неё и раЗкроем файловую систему

text

mkdir unpack
cd unpack
cat ../rescue |cpio -id

теперь папка unpack содержит фс тулкита, немного шаманских плясок вокруг /init.
Нам потребуется патч от zloidemon'a который можно взять тут
Если у Вас кашмерский 2008 то вперед - патчим, если нет, немного попляшем с бубном
открываем в редакторе /init и ищем "Determining root device..."
строку ниже заменяем
-while true
+while false
(+ и - ставить не нужно, это что поставить и убрать соответственно)
Чуть ниже идет строка "Determining looptype" и под ней, после примерно 20 строк находим "elif [ "${LOOPTYPE}" = 'squashfs' ]"
выглядит оно так

text

        elif [ "${LOOPTYPE}" = 'squashfs' ]
        then
            good_msg 'Mounting squashfs filesystem'
            mount -t squashfs -o loop,ro "${NEW_ROOT}/mnt/cdrom/${LOOPEXT}${LOOP}" "${NEW_ROOT}/mnt/livecd"
            test_success 'Mount filesystem'
            FS_LOCATION='mnt/livecd'

вот это безобразие и надо заменить на

text

         elif [ "${LOOPTYPE}" = 'squashfs' ]
         then
             good_msg 'Mounting squashfs filesystem'
            mount -t squashfs -o loop,ro /${LOOP} ${NEW_ROOT}/mnt/livecd
            mount -t squashfs -o loop,rw /cdrom.squashfs ${NEW_ROOT}/mnt/cdrom
             test_success 'Mount filesystem'
             FS_LOCATION='mnt/livecd'
         elif [ "${LOOPTYPE}" = 'gcloop' ]

вкраце чёэтмытакоесделали:
while false - отключил поиск REAL_ROOTFS на носителях
mount -t squashfs -o loop,ro /${LOOP} ${NEW_ROOT}/mnt/livecd - примонтировал файловую систему указанную в параметре ядра loop (об этом далее)
mount -t squashfs -o loop,rw /cdrom.squashfs ${NEW_ROOT}/mnt/cdrom - жестко привязал файл /cdrom.squashfs к монтируемым устройствам.
Если Вы не планируете делать проверку антивирусом, а использовать его только как редактор реестра и анлокер то эту строчку можно закоментировать, а в продвинутой версии скрипта мы её завернем в условие, но об этом в другой раз.

Теперь в директорию unpack запишем REAL_ROOTFS, она находится на диске под именем image.squashfs, файл достаточно большой, почти 90мб, что вместе с уже существующими файлами дает 115мб.

Если нужен еще и антивирусник, то придется подготовить файл cdrom.squashfs:
рядом с папкой unpack(но не внутри неё!!!!) создаем папку KAV и копируем туда с диска папку rescue, папка boot не нужна, там грабер и его файлы конфигурации, а image.squashfs скопировали на прошлом этапе
должно получится следующее
../KAV/rescue - папка с диска (в ней папки backup, bases help...)
../unpack - развернутая фс тулкита
../unpack/image.squashfs - REAL_ROOTFS
теперь выполним команду

text

 mksquashfs path_to/KAV cdrom.squashfs -comp lzma

Если lzma не поддерживается, опцию -comp можно пропустить, по умолчанию сожмет с gzip, правда получится файл чуть большего размера.
Полученый файл кладем в unpack, те должно получится
../unpack/cdrom.squashfs - попилиный образ диска

теперь про EULA

Показать

лицензии это конечно хорошо, но давайте не столь навязчиво это делать? Во-первых у кашмерского лайвсд через раз видит точпад, в результате приходится прикручивать мышь, во-вторых для принятия соглашения нужно активировать окно, хотя оно и распахнуто, на него нужно переключится, ну и в третьих, текст лицензии находится на сидироме, который я себе не монтировал ибо всегда есть свежая курилка, а качать базы и писать скрипт их прикручивания к образу мине лень да и трафика жалко на такую фигню. А без текста лицензии "кнопки" принять не активны. Поэтому поколупаем image.squashfs
Переходим в нашу основную директорию где создавали unpack и KAV, создаем каталог и раЗкрываем туда базы
text

mkdir rootfs
unsquashfs -f -d path_to/rootfs image.squashfs

Ругаицца на lzma? А для кого я писал выше как в сквош прикрутить лзма???

заходим в rootfs/usr/sbin и находим файл kl_eula.sh, редактируем его до такого состояния

text

#!/bin/bash

touch /tmp/eulaterm mount --bind /usr/bin/xterm /tmp/eulaterm #until grep -s accepted /var/log/eula.log > /dev/null; do # if [[ -n ${DISPLAY} ]]; then # flock -xo "/tmp/Kaspersky Rescue Disk.lock" -c "/tmp/eulaterm ${EULA_FONT} -maximized -e /usr/sbin/EULA" # else # flock -xo "/tmp/Kaspersky Rescue Disk.lock" -c "/usr/sbin/EULA" # fi #done

umount /tmp/eulaterm rm /tmp/eulaterm

В общем мы со всем согласны, кашмерыч может спать спокойно :D
Собираем все в зад

text

mksquashfs path_to/rootfs image.squashfs -comp lzma

и помещаем полученный файл в /unpack/

ну-с, дело за малым, собрать все это хозяйство обратно в initrd(который rescue)

text

find . -print | cpio -o -H newc > ../rescue

Переходим на уровень вверх, смотрим на rescue... не хило... почти 200м с образом диска и 115 без. Ну немного поможем нашей сетке, сожмем это хозяйство. Хотя для раЗпаковки мы иЗпользовали 7z, упаковывать будем gzip'ом

text

gzip rescue

для красоты обзовем его оригинальным именем rescue.igz. Так... пол дела сделано :D остается все это безобразие прикрутить к dhcp + tftp серверу
Как ставить эту связку я тут расписывать не буду, неплохой мануал есть тут, только там статья про LTSP, если он не нужен, пропускаем все что к нему относится.
Короче, считаем что dhcp поднят и раздает адреса, tftp слушает сеть и все что нужно валяется в папке /srv/tftp (эт не обязательно, папка может быть любой)
вот так должен выглядеть конфиг каспера
[tftp_pxe_root]/pxelinux.cfg/default

text

label Kaspersky Rescue
    menu label ^Kaspersky
    kernel rescue
    append initrd=rescue.igz cdroot=1 root=/dev/ram0 kav_lang=ru real_root=/ loop=image.squashfs looptype=squashfs 

Помните про монтирование в /init и параметр loop? Ну вот тут то он и задается, если написать что другое то оно и передаст в скрипт. Например можно передать ему ип адрес...

файлы rescue и rescue.igz должны располагаться в папке [tftp_pxe_root], причем rescue - это оригинальный файл ядра с диска касперыча, а не наша неужатая поделка :D

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

#219956

брррр не понимаю зачем извращаться с live_cd. Не рекламирую DR Web но у них уже есть клиент под linux значиться можно проще.
Взять тот же debian + openbox + tint2 + немного разного софта. И поставить туды DR Web. И всё это дело грузить по сети.
Думаю тоже самое можно и сделать с каспером. Для таких целей всё таки лучше использовать NFS что уже будет логичнее (в плане RAM).

#220048

Отдельно каспера нема. Лан пробнем чуть по другому.

#220051
Kettler написал:
брррр не понимаю зачем извращаться с live_cd. Не рекламирую DR Web но у них уже есть клиент под linux значиться можно проще.
Взять тот же debian + openbox + tint2 + немного разного софта. И поставить туды DR Web.

Можно еще проще. С сайта докторавеба скачать ГОТОВЫЙ LiveCD. Запускается Linux. Там же, кроме антивируса, есть браузер, чатилка, почтовый клиент миднайткомандер. Все виндодиски примаунтены. ;)

#220052
voral написал:
[quote=Kettler]брррр не понимаю зачем извращаться с live_cd. Не рекламирую DR Web но у них уже есть клиент под linux значиться можно проще.
Взять тот же debian + openbox + tint2 + немного разного софта. И поставить туды DR Web.

Можно еще проще. С сайта докторавеба скачать ГОТОВЫЙ LiveCD. Запускается Linux. Там же, кроме антивируса, есть браузер, чатилка, почтовый клиент миднайткомандер. Все виндодиски примаунтены. ;)[/quote]
Таким макаром всё в RAM а если использовать как я говорю тогда можно спокойно без напильника через NFS.

#220098

Щас пробну всю систему kaspersky live cd грузануть через NFS

#220106
voral написал:
Можно еще проще. С сайта докторавеба скачать ГОТОВЫЙ LiveCD. Запускается Linux. Там же, кроме антивируса, есть браузер, чатилка, почтовый клиент миднайткомандер. Все виндодиски примаунтены. ;)

Хм... а чем оно от кашмарыча отличается в плане юзабильности? Теже яйца...

Некоторые пояснения: Взять Live_CD оно конечно можно, но.... как я уже писал, для этого нужен (пабаааам!) сидиром и чистый диск(или флеш-бут и место на флешке)
DrWeb и клиент под линукс... тож ничего не дает, тк нужен ЛИНУКС на машинке, а если он там стоит на кой вообще тогда дрвеб и каспер?
Сей геморой описанный выше преследует одну цель - разблокировать банер на ОС Виндовз, диск качать не надо, флеш не надо - воткнул сеть и вперед.
Кроме того данный способ позволяет пользоваться обновленными базами, нужно их только качать и формировать из них фс.

Лично мне что ДрВеб что Каспер - одинаково унылое ПО, зарабатывающее только тем, что разводит несчастных неопытных пользователей на бабло, тк виндовс прекрасно спавляется без ЛЮБОГО антивирусника (где то была статья Криса Касперского на эту тему)

2Kettler: гыгы... не все так просто )) Но, в любом случае, отпишись о результатах.

РС: Будет вам NFS, будет, чуть позжее напишу

#220111

Обязательно для меня как спортивный интерес. Правда Gentoo ну и лан пробнем.

#220124
Vaicartana написал:
Некоторые пояснения: Взять Live_CD оно конечно можно, но.... как я уже писал, для этого нужен (пабаааам!) сидиром и чистый диск(или флеш-бут и место на флешке)

Все понял. За вашим стилем изложения не уследил сути

#220126

Честно сказать мне кажется проще сделать чтоб gentoo грузился с сети.

Войдите или зарегистрируйтесь, чтобы ответить.