Schroot. Запираем Skype в chroot тюрьму.

И так, имеем:
1. Ubuntu 7.10 или выше
2. Желание использовать Skype
3. Огромную параною на использование проприетарного софта (подкрепленную ценными данными на компьютере).

Решение: запираем Skype в chroot — окружение.

И так устанавливаем schroot и debootstrap:

$sudo apt-get install schroot debootstrap

Редактируем файл /etc/schroot/schroot.conf

[sid]
description=Debian sid (unstable)
#location=/srv/schroot/sid #устарело, теперь используется directory
directory=/srv/schroot/sid
priority=3
users=rom
groups=rom
root-groups=rom

Устанавливаем минимальную систему (Debian) используя debootstrap, добавляя устанавливаемые пакеты с помощью —include=пакет1,пакет2,пакет3 и удаляя лишние с помошью —exclude=пакет1,пакет2, пакет3.
sid — это тип chroot.
/srv/schroot/sid — путь до корня chroot:

$ sudo debootstrap --arch i386 --include=aptitude sid /srv/schroot/sid http://ftp.br.debian.org/debian

теперь так

$ sudo debootstrap --arch i386 --include=aptitude sid /srv/schroot/sid http://http.debian.net/debian/

Запускаем chroot-окружение с правами root в нутри «тюрьмы» (я буду обозначать шел внутри chroot как skype# и skype$)

$ schroot -c sid -u root

Создаем пользователя skype (<id_rom> и <gid_rom> — это uid и gid пользователя реальной системы)

skype# adduser --disabled-password --uid <id_rom> --gid <gid_rom> skype

Устанавливаем скаченный дистрибутив для debian с официального сайта skype:

skype# dpkg --force-all -i skype-debian_2.0.0.72-1_i386.deb

Удовлетворяем зависимости:

skype# apt-get -f install
skype# exit

В основной системе монтируем части реальной файловой системы (можно попробовать урезать):

$ sudo mount /dev /srv/schroot/sid/dev -o bind
$ sudo mount /proc /srv/schroot/sid/proc -o bind
$ sudo mount /tmp/.ICE-unix /srv/schroot/sid/tmp/.ICE-unix -o bind
$ sudo mount /tmp/.X11-unix /srv/schroot/sid/tmp/.X11-unix -o bind

Так же, что бы не монтировать каждый раз после перезагрузки, можно прописать автомонтирование в /etc/fstab:

/dev            /srv/schroot/sid/dev            auto bind 0 0
/proc           /srv/schroot/sid/proc           auto bind 0 0
/tmp/.ICE-unix  /srv/schroot/sid/tmp/.ICE-unix  auto bind 0 0
/tmp/.X11-unix  /srv/schroot/sid/tmp/.X11-unix  auto bind 0 0

Проверяем переменную $DISPLAY реального пользователя:

$ echo $DISPLAY
:0.0

Выключаем контроль за подключения к X-серверу, разрешая не авторизованные локальные подключения:

$ xhost +local:

Переходим в schroot и устанавливаем переменную:

$ cd / && schroot -c sid -u rom /bin/bash
skype$ export DISPLAY=":0.0"

Запускаем Skype:

skype$ skype --dbpath=/home/skype/.Skype &
skype$ exit

Включаем контроль за подключения к X-серверу:

$ xhost -local:

Пользуемся 🙂

P.S. Скрипты для ленивых:

Для запуска используем скрипт /home/rom/skype.sh :

#/bin/sh

#Настройка параметров web-камеры
/usr/bin/dov4l -d /dev/video0 -b 25000 -c 3000 -n 7000 -w 0 >/dev/null

xhost +local:
cd / && schroot -c sid-roman -u rom /bin/sh /home/skype/skype.sh
sleep 30
xhost -local:

Который в свою очередь вызывает другой скрипт в chroot окружении /srv/schroot/sid/home/skype/skype.sh :

export DISPLAY=":0.0" 
LD_PRELOAD=/usr/lib/libv4l/v4l2convert.so skype --dbpath=/home/skype/.Skype & 
exit
# LD_PRELOAD=/usr/lib/libv4l/v4l2convert.so перед skype требуется для работы web-камеры.

Все.

7 комментариев to “Schroot. Запираем Skype в chroot тюрьму.”

  1. Дорогой товарищ!

    Мне очень понравилась эта статья 🙂

    А мог ли бы ты нарисовать подобную методику для Мандривы?

  2. МИБ:

    Если платформа х64 и ядро новое, то необходимо подгружать 32х библиотеку, т. е. в пути писать не /usr/lib/, а /usr/lib32/

  3. Как я понял, rom — это основной пользователь хост-системы?
    А пользователь skype — это пользователь «тюрьмы», который должен иметь другое имя, но тот же uid, что и rom?

  4. rrv:

    По моему нет, не обязательно. Это получилось автоматически. Главное что бы права на папки в основной системы были правильно расставлены, а иначе ничего сохранить не получится. Есть желание, можете проверить и отписаться 🙂

  5. Green:

    Вся безопасность такого решения летит к чертям, когда /dev монтируется в chroot-окружение

  6. rrv:

    Да, вы правы по поводу /dev, но под мою задачу достаточно, а так вы правы надо монтировать только требуемые устройства о чем я и написал «В основной системе монтируем части реальной файловой системы (можно попробовать урезать):»

  7. Sergius:

    MAKEDEV жёсткий проканает для ограничения?

Leave a Reply