Meefik's Blog

Freedom and Open Source

Запуск дистрибутива Kali Linux из образа

Дистрибутив Kali Linux основан на Debian и позиционируется как дистрибутив для тестирования информационной безопасности. Установка этого дистрибутива в Linux Deploy полностью поддерживается в автоматическом режиме с установкой из официального репозитория (см. инструкцию по установке GNU/Linux и инструкцию на сайте www.kali.org), однако в некоторых случаях может понадобиться установка из уже готового образа без доступа в Интернет.

linuxdeploy

Инструкция

  • Скачать архив ARM образа (например, для Raspberry Pi) и распаковать.

  • Извлечь из полного образа образ второго раздела (выполнять из-под Linux):
    kpartx -v -a kali-1.0.9-rpi.img
    dd if=/dev/mapper/loop0p2 of=/tmp/kali.img bs=1M
    

    Для образа Raspberry Pi это второй раздел, для образов других устройств нормер раздела может отличаться. Посмотреть таблицу разделов в образе можно командой:

    fdisk -l kali-1.0.9-rpi.img
    
  • Скопировать файл kali.img на карту памяти устройства. Если образ занимает более 4095 МБ, то карта памяти должна быть отформатирована в файловой системе exFAT, NTFS или другой, которая поддерживается на устройстве и может хранить файлы размером более 4 ГБ.

  • В приложении Linux Deploy создать новый профиль и в параметрах указать: Дистрибутив - Kali Linux; Версия дистрибутива - kali; Тип установки - Файл; Путь установки - путь к файлу kali-linux.img (например, /storage/sdcard1/kali.img); Окружение рабочего стола - Xfce.

  • Выполнить переконфигурацию (Параметры -> Переконфигурировать).

  • Запустить GNU/Linux систему кнопкой СТАРТ из главного окна приложения.

  • Подключиться по SSH или VNC, пароль - changeme.

Обзор графических подсистем Linux Deploy

Linux Deploy поддерживает несколько графических подсистем, вариантов вывода графики, которые можно использовать в зависимости от поставленной задачи.

VNC используется по умолчанию и представляет собой программный сервер, который запускается параллельно с работой Android и создает виртуальный рабочий стол, к которому можно подключиться через специальное приложение — VNC-клиент. По VNC можно подключиться как локально, прямо с устройства, так и удаленно, например, с компьютера или другого устройства. Единственным условием является то, чтобы устройства были в одной подсети, например, подключены к одному роутеру. VNC имеет два основных параметра: адрес сервера и номер дисплея. Адрес сервера — это IP или имя хоста, где запущен VNC-сервер. Номер дисплея — это номер виртуального рабочего стола с которым мы хотим работать и на котором запускается окружение рабочего стола. Номер дисплея находится в диапазоне от 0 до 99 и соответствует номеру порта VNC-сервера от 5900 до 5999 соответственно, именно этот порт будет открыт на сервере для ожидания подключения клиента. VNC прост в настройке, есть множество приложений-клиентов, кроссплатформенный, но не лишен своих недостатков. К таким недостаткам можно отнести относительно невысокую отзывчивости графики, отсутствие поддержки аппаратного ускорения, отсутствие мультитача, дополнительная нагрузка на систему и некоторые другие.

Для использования VNC в Linux Deploy достаточно зайти в параметры текущего профиля и выбрать VNC в качестве графической подсистемы (Параметры -> Графическая подсистема -> VNC). А затем, при необходимости, можно изменить настройки VNC-сервера в меню Параметры -> Параметры GUI. После этого, при запуске GNU/Linux, окружение рабочего стола будет запускаться внутри виртуального X-сервера, доступ к которому будет открыт для VNC-клиента. Для подключения к серверу в VNC-клиенте достаточно указать IP-адрес данного устройства (IP-адрес отображается в верхней строке приложения Linux Deploy) и номер дисплея, к которому следует подключиться.

Другой графической подсистемой, позволяющей запускать GNU/Linux параллельно с Android, является режим X Server (X Window System). Включается режим также в параметрах графической подсистемы (Параметры -> Графическая подсистема -> X Server). Данный режим позволяет запускать графическое окружение рабочего стола на стороннем X-сервере. Здесь сервер отвечает за прорисовку графики и отображение ее на видеоадаптере, а клиент — за выполнение приложений и передачу графики на сервер. Так, в данном случае, клиентом является GNU/Linux система и запускаемые в ней приложения, а сервером — другое приложение в Android (например, XServer XSDL), либо вообще на другом компьютере (например, Xorg, Xnest, Xephyr, Xming). X-сервер позволяет в некоторой степени решить вопрос производительности и существенно повысить отзывчивость графических интерфейсов, при этом не лишает возможности использовать необходимые функции Android-устройства в случае локального запуска сервера.

Для вывода графики на внешний X-сервер в параметрах Linux Deploy следует указать адрес сервера (IP или имя хоста) и дисплей сервера. Затем запустить X-сервер, а после запустить GNU/Linux через Linux Deploy. После этого на указанном X-сервера должно запуститься окружение рабочего стола. По такой схеме работают тонкие клиенты, только в данном случае роль тонкого клиента выполняет компьютер (или само устройство), а роль сервера — телефон/планшет.

И, наконец, следует упомянуть еще один режим графической подсистемы — фреймбуфер. В этом режиме при выводе графики GNU/Linux приложениями нет посредников, все работает как в полноценных десктопных дистрибутивах. Входящий в комплект дистрибутива X-сервер (Xorg) настраивается таким образом, что вывод графики осуществляется через специальный драйвер — fbdev. Отдельно настраивается адрес видеоустройства (например, /dev/graphics/fb0) и устройств ввода (например, /dev/input/event2 для тачскрина) для работы напрямую с железом. Данный режим дает указание X-серверу перенаправлять изображение напрямую на видеоустройство, а также использовать прямой доступ к устройствам ввода. В этом случае появляется выигрыш в производительности за счет прямого доступа к аппаратным ресурсам устройства. Однако тут есть обратная сторона. К сожалению, графическая подсистема Android и GNU/Linux не могут работать одновременно. Чтобы иметь возможность запустить графические приложения GNU/Linux в этом режиме, Linux Deploy приостанавливает работу Android на время, пока выполняются Linux-приложения. После завершения графического сеанса работа Android корректно возобновляется без необходимости перезагружать устройство (впрочем, есть и другие варианты, как с полной остановкой Android, так и вообще без остановки). Другим ограничением использования данного режима является проблема совместимости Xorg с аппаратными ресурсами устройства в некоторых случаях.

Для перевода Linux Deploy в режим фреймбуфера нужно выбрать соответствующую графическую подсистему (Параметры -> Графическая подсистема -> Framebuffer). Если в списке компонентов не выбран X-сервер, то это следует сделать (Параметры -> Выбрать компоненты) и выполнить переконфигурацию (Параметры -> Переконфигурировать) для установки необходимых пакетов. В параметрах графической подсистемы (Параметры -> Параметры GUI) следует указать видеоустройство и устройство ввода конкретного девайса. Также может потребоваться заморозить Android UI для корректной работы данного режима. Параметры Xorg сервера можно настроить более тонко в файле /etc/X11/xorg.conf внутри окружения установленного дистрибутива.

Снимок файловой системы и поиск изменений

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

Формат запуска утилиты такой:

java -jar jcut.jar <directory> [snapshot.gz]

Пример использования (жесткий диск SATA 7.2k):

$ java -jar jcut.jar /path/to/dir
add	/dir1	0
del	/dir2	0
del	/dir2/file1	1433802787000
mod	/file1	1433802751000
Time: 3742 ms
Processed: 209846 items
Snapshot: 1384480 bytes

Скорость обработки линейно возрастает с увеличением числа файлов в директории.

Поворот экрана в режиме кадрового буфера

Ниже приводится решение для правильного поворота экрана в режиме фрейм-буфера. Т.е. чтобы была повернута картинка на 90 градусов (ландшафтная ориентация) и драйвер сенсорного экрана обрабатывал это поворот корректно. Решение опробовано на Samsung Galaxy S2 (i9100), тачскрин MXT224 (узнать модель тачскрина можно командой: cat /sys/devices/virtual/sec/sec_touchscreen/tsp_touchtype), Ubuntu 13.04 Raring Ringtail и Debian 7.0/wheezy.

Что работает:

  • позиционирование курсора к месту нажатия;
  • обработка удерживания (эмуляция удерживания левой кнопки мыши);
  • обработка двойного нажатия одним пальцем (эмуляция левой кнопки мыши);
  • обработка нажатия двумя пальцами (эмуляция правой кнопки мыши);
  • поворот координат сенсорного экрана.

Для этого нужно выполнить следующие шаги:

  • Установить дистрибутив через Linux Deploy (Debian или Ubuntu) и подключиться к консоли под пользователем root (например, по SSH).

  • Доставить необходимые пакеты:
    apt-get install build-essential wget unzip xorg-dev libmtdev-dev
    
  • Загрузить исходный код модифицированного драйвера mtev для Xorg:
    wget https://github.com/meefik/xorg-input-mtev/archive/master.zip --no-check-certificate
    unzip master.zip
    
  • Запустить сборку драйвера:
    cd ./xorg-input-mtev-master/
    make
    
  • Скопировать драйвер в каталог модулей Xorg:
    cp obj/mtev.so /usr/lib/xorg/modules/input/mtev_drv.so
    
  • Отредактировать файл /etc/X11/xorg.conf:
      Section "ServerLayout"
          Identifier "Layout0"
          Screen "Screen0"
          InputDevice "touchscreen" "CorePointer"
      EndSection
    
      Section "InputDevice"
          Identifier "touchscreen"
          Option "Device" "/dev/input/event2" #linuxdeploy
          Driver "mtev"
          Option "Rotation" "1"
      EndSection
    
      Section "Device"
          Identifier "Card0"
          Driver "fbdev"
          Option "fbdev" "/dev/graphics/fb0" #linuxdeploy
          Option "Rotate" "CW"
      EndSection
    
      Section "Screen"
          Identifier "Screen0"
          Device "Card0"
          DefaultDepth 24
          SubSection "Display"
              Depth 24
          EndSubSection
      EndSection
    
  • Запустить GNU/Linux через Linux Deploy в режиме фрейм-буфера (Параметры -> Графическая подсистема -> Framebuffer). Для набора текста можно использовать виртуальную клавиатуру florence.

Веб-терминал для Android

wShell - эмулятор терминала с веб-интерфейсом для Android. Основан на Shell In A Box. Приложение позволяет подключиться к консоли Android-устройства прямо из веб-браузера, если компьютер и устройства находятся в одной локальной сети.

wshell

Приложение распространяется под лицензией GPL версии 3 или более поздней.

Исходный код: https://github.com/meefik/wshell
Установить из Google play: https://play.google.com/store/apps/details?id=ru.meefik.wshell

Публикация в журнале ИУС № 5(66)/2013

В журнале Информационно-управляющие системы № 5(66)/2013 опубликована статья “Приложение для автоматизации процессов установки и запуска GNU/Linux-окружения на устройствах под управлением Android”, страницы 56-60.

linuxdeploy

В статье проводится обзор основных функций разработанного программного обеспечения для автоматизации установки GNU/Linux-дистрибутивов и запуска Linux-приложений на устройствах под управлением Android. Даны примеры его возможного использования, сравнение с аналогами. Описываются принципы работы программного обеспечения. Приведены оценка производительности и статистика по апробации.

Запуск дистрибутива OpenPandora

Через Linux Deploy под Android можно запустить дистрибутив OpenPandora.

Инструкция

  • В приложении Linux Deploy 1.4.1+ создать новый профиль и в параметрах указать следующее: Дистрибутив - RootFS; URL-адрес зеркала - http://www.openpandora.org/firmware/pandora-rootfs.tar.bz2; Тип установки - Файл; Путь установки - путь к будущему образу (например, /mnt/sdcard/pandora.img); Размер образа (МБ) - 1000 (можно больше); Имя пользователя - android, Окружение рабочего стола - Xfce; Установить GUI - нет. Остальные параметры менять не нужно.

  • Запустить установку через Параметры -> Установить. В результате должен быть создан файл образа диска на карте памяти и в него распакован архив rootfs.

  • Запустить SSH сервер (из консоли Android, можно использовать терминал ConnectBot):
    linuxdeploy shell "/etc/init.d/dropbear start"
    

    Теперь можно подключиться по SSH, логин - android, пароль - changeme, порт 22.

  • Остановить SSH сервер:
    linuxdeploy shell "/etc/init.d/dropbear stop"
    
  • Настройка автоматического запуска/остановки SSH через Android-интерфейс Linux Deploy (кнопками СТАРТ/СТОП):
    linuxdeploy shell "cp /etc/init.d/dropbear /etc/init.d/ssh"
    

Комментарий: Чтобы из консоли Android была доступна команда linuxdeploy нужно в настройках разрешить создавать в системе символьную ссылку (Настройки -> Создать симлинк) и обновить рабочее окружение (Настройки -> Обновить окружение). Однако это необязательное требование и можно вызывать команду linuxdeploy по полному пути ENV_DIR/bin/linuxdeploy, где ENV_DIR - каталог рабочего окружения, по умолчанию /data/data/ru.meefik.linuxdeploy/linux.

Запуск дистрибутива Angstrom

Через Linux Deploy под Android можно запустить дистрибутив Angstrom.

Инструкция

  • Создать образ системы (rootfs) в формате tar.gz на сайте narcissus.angstrom-distribution.org и получить ссылку на архив.

  • В приложении Linux Deploy 1.4.1+ создать новый профиль и в параметрах указать следующее: Дистрибутив - RootFS; URL-адрес зеркала - полученная ранее ссылка; Тип установки - Файл; Путь установки - путь к будущему образу (например, /mnt/sdcard/angstrom.img); Размер образа (МБ) - 100 (можно больше); Имя пользователя - android, Окружение рабочего стола - XTerm. Остальные параметры менять не нужно.

  • Запустить установку через Параметры -> Установить. В результате должен быть создан файл образа диска на карте памяти и в него распакован архив rootfs.

  • Установить необходимые пакеты и выполнить базовую конфигурацию. Для этого из любого Android-терминала выполнить (через программу ConnectBot или другой терминал, выполнять от рута):
    linuxdeploy shell "opkg update"
    linuxdeploy shell "opkg install initscripts sysvinit sysvinit-pidof shadow bash \
      localedef glibc-localedata-en-us glibc-localedata-ru-ru tzdata dropbear sudo \
      xserver-xorg-xvfb x11vnc xinit xterm"
    linuxdeploy configure
    
  • Запустить SSH сервер:
    linuxdeploy shell "/etc/init.d/dropbear start"
    

    Теперь можно подключиться по SSH: логин - android, пароль - changeme, порт 22.

  • Остановить SSH сервер:
    linuxdeploy shell "/etc/init.d/dropbear stop"
    
  • Запустить VNC сервер:
    linuxdeploy shell
    xinit /bin/su - android -c 'export DISPLAY=:0; ~/.vnc/xstartup' -- /usr/bin/Xvfb :0 -screen 0 800x400x16 -nolisten tcp -ac &
    su - android -c 'x11vnc -forever -display :0 -wait 10' &
    

    Теперь можно подключиться по VNC: пароль - changeme, порт 5900.

  • Остановить VNC сервер:
    pkill -9 Xvfb
    
  • Настройка автоматического запуска/остановки SSH через Linux Deploy (кнопками СТАРТ/СТОП):
    linuxdeploy shell "cp /etc/init.d/dropbear /etc/init.d/ssh"
    
  • Настройка автоматического запуска/остановки VNC через Linux Deploy (кнопками СТАРТ/СТОП):
    linuxdeploy shell
    cat << EOF > /usr/bin/vncserver
    #!/bin/sh
    [ $# -eq 0 ] && exit 1
    VNC_DISPLAY=$1
    shift
    while true
    do
      case $1 in
      -depth)
          VNC_DEPTH=$2; shift 2; continue
      ;;
      -geometry)
          VNC_GEOMETRY=$2; shift 2; continue
      ;;
      -dpi)
          VNC_DPI=$2; shift 2; continue
      ;;
      *)
          break
      ;;
      esac
    done
    if [ -n "$VNC_DEPTH" -a -n "$VNC_GEOMETRY" -a -n "$VNC_DPI" ]
    then
      Xvfb ${VNC_DISPLAY} -screen 0 ${VNC_GEOMETRY}x${VNC_DEPTH} -dpi ${VNC_DPI} -nolisten tcp -ac &
      x11vnc -forever -display ${VNC_DISPLAY} -wait 10 &
      sleep 1
      DISPLAY=${VNC_DISPLAY} ~/.vnc/xstartup &
    else
      pkill -9 Xvfb
    fi
    EOF
    chmod 755 /usr/bin/vncserver
    

Комментарий: Чтобы из консоли Android была доступна команда linuxdeploy нужно в настройках разрешить создавать в системе символьную ссылку (Настройки -> Создать симлинк) и обновить рабочее окружение (Настройки -> Обновить окружение). Однако это необязательное требование и можно вызывать команду linuxdeploy по полному пути ENV_DIR/bin/linuxdeploy, где ENV_DIR - каталог рабочего окружения, по умолчанию /data/data/ru.meefik.linuxdeploy/linux.

Настройка окружения рабочего стола GPE

Установка и настройка окружения рабочего стола, которого нет в списке настроек программы Linux Deploy, на примере GPE.

linuxdeploy

Для этого нужна установленная система, можно без окружения рабочего стола (в данном случае Debian Wheezy). Далее нужно подключиться к системе по SSH и выполнить установку окружения:

sudo apt-get update
sudo apt-get install tightvncserver x11-xserver-utils xfonts-base \
                     gpe --no-install-recommends -yq
sudo apt-get clean

После этого нужно настроить автозапуск:

mkdir ~/.vnc
chmod 755 ~/.vnc
echo "MPTcXfgXGiY=" | base64 -d > ~/.vnc/passwd
chmod 600 ~/.vnc/passwd
cat << EOF > ~/.vnc/xstartup
XAUTHORITY=\$HOME/.Xauthority
LANG=ru_RU.UTF-8
export XAUTHORITY LANG
echo \$\$ > /tmp/xsession.pid
matchbox-session
EOF
chmod 755 ~/.vnc/xstartup

После этих опрерация будет установлены VNC сервер и GPE, а также настроен автозапуск при старте VNC. Пароль к VNC будет: changeme

Запуск дистрибутива Raspbian MATE

Дистрибутив Raspbian MATE основан на Debian и разрабатывается для Raspberry Pi, в качестве окружения рабочего стола используется MATE. Этот дистрибутив можно запустить под Android через Linux Deploy.

linuxdeploy

Инструкция

  • Скачать образ с официального сайта: rpi_pisces_mate_r2.zip

  • Извлечь из полного образа образ третьего раздела (выполнять из-под Linux):
    kpartx -v -a rpi_pisces_mate_r2.img
    dd if=/dev/mapper/loop0p3 of=/tmp/rpi_pisces_mate.img bs=1M
    
  • Скопировать файл rpi_pisces_mate.img на карту памяти устройства.

  • В приложении Linux Deploy создать новый профиль и в параметрах указать: Дистрибутив - Debian; Версия дистрибутива - wheezy; Тип установки - Файл; Путь установки - путь к файлу rpi_pisces_mate.img; Имя пользователя - raspbian; Окружение рабочего стола - Другое. Выполнить переконфигурацию (Параметры -> Переконфигировать).

  • Запустить GNU/Linux кнопкой СТАРТ из главного окна приложения. Подключиться по SSH: логин - raspbian, пароль - changeme.

  • Настроить автозапуск окружения рабочего стола по VNC:
    cat << EOF > ~/.vnc/xstartup
    XAUTHORITY=\$HOME/.Xauthority
    LANG=ru_RU.UTF-8
    export XAUTHORITY LANG
    echo \$\$ > /tmp/xsession.pid
    mate-session
    EOF
    chmod 755 ~/.vnc/xstartup
    
  • Перезапустить GNU/Linux через интерфейс программы. Подключиться по VNC, пароль - changeme. Должен открыться рабочий стол MATE.