Для начала
небольшая выкладка мыслей. Отношение к how-to почти не имеет:
Если кому то интересно читать зачем мне это нужно, то в
этом посте есть маленькая предыстория.
Я не являюсь сисадмином и программирую в основном на скриптовых языках, поэтому мое мнение не претендует на истину.
Но зато я имею большой опыт взлома "снаружи", который говорит о том, что выйти из под чрута очень и очень не просто, особенно если ядро свежее.
Данное решение я делал как дополнительный уровень защиты рабочей машины.
Расширения хрома (особенно если в них есть .so), скайпы часто хотят иметь доступ к ко всем данным пользователя, а я не хочу делится своей информацией.
Не думаю, что в ближайшие пару лет кто нибудь начнет производить под линь профессионально, а посему шансов на попытки выйти из чрута, нет.
Но вот расширение (лисы, хрома), которое "сливает налево" данные с машины, вполне можно написать, и поставить.
Я имел опыт разработки расширения для браузеров, и поэтому знаю что:
1. По умолчанию брузер имеет доступ *почти* к любой части ФС
2. (проверено в лисе) Позволяет запускать бинарники (по факту любые скорее всего).
3. То есть может [censored] любые данные пользователя, который его запустил.
Именно от этого я в первую очередь и хочу предохранится.
Максимум что [censored] плагин из чрута — то что я скачиваю и закачиваю в сети.
...
Так же я сделал два чрута для скайпов по исходной схеме:
http://rrv.nsk.ru/?p=110Но на самом деле создавать чруты с дебианами на убунте не совсем правильно.
Просто потому, что чруты тоже надо обновлять(!!!), и есть некоторый шанс что один из апдейтов может что нибудь похерить.
Хотя если вам нужно запустит в чруте что нибудь без интерфейса, то все будет отлично.
Так как проблема с в дебиане в основном с интерфейсом, который надо пилить.
...
И да, я параноик: Поэтому у меня разные браузеры под разные задачи, два из которых теперь будут жить в своих чрутах.
До этого я использовал не удобную схему с виртуалбоксом.
У нас имеется — Ubuntu 10.04 и быстрый интернет (нужно не мало качать)
Задача — запустить софт (в случае данной статьи, chromium) в песочнице.
Ⅰ — Подготавливаем систему для чрута
1. Получаем права рута:
sudo -i
2. Устанавливаем необходимые пакеты:
apt-get install schroot debootstrap
3. Создаем папку где будет размещаться будущая система:
mkdir -p /chroot/chromium
Папку конечно можно создавать любую и в любом разделе, если он смонтирован не с флагами noexec/nosuid (имхо).
4. Делаем бекап конфигурационного файла schroot:
cp /etc/schroot/schroot.conf /etc/schroot/schroot.conf.backup
5. Открываем
/etc/schroot/schroot.conf в любом удобном для вас редакторе:
И прописываем туда (можно в начало, куда хотите) примерно следующее:
# Внутри скобок имя чрута при вызове
[chromium]
description=Jail for Chromium. Ubuntu lucid
# Путь до чрута
directory=/chroot/chromium
priority=3
# Здесь заменяем user на свой логин в системе
users=user
groups=user
# Желательно во всех (если сделаете больше одного) чрутах использовать именно логин пользователя основной системы
# Иначе в будущем при использовании буду некоторые не соответствия.
# Я не знаю могут ли они помешать работе системы, но лучше перестраховаться.
# Настоятельно рекомендую оставить как есть.
root-users=root
# Чуть позже мы будем подключать часть вашей корневой системы в чрут
# И поэтому лучше не создавать путей обхода системных механизмов поднятия прав
6. Собираем будущий чрут в папке:
debootstrap --arch i386 --include="aptitude,python-software-properties,nano" --verbose lucid /chroot/chromium http://us.archive.ubuntu.com/ubuntu /usr/share/debootstrap/scripts/lucid
Все параметры можно изменить под себя. Например поставить текстовый редактор (консольный) по вкусу.
Базовый набор пакетов я не ставлю (так как внутри идет гном и много мусора), он называется `ubuntu-standard`.
Ⅱ — Настраиваем систему
7. Входим в собранную систему под рутом:
schroot -c chromium -u root
8. Создаем группу и пользователя с именами и id как на основной системе:
# Создаем группу пользователей
addgroup --gid 1000 user
# И пользователя от которого будет работать софт
adduser --disabled-password --uid 1000 --gid 1000 user
9. Подключаем основной репозиторий. Добавляем в
/etc/apt/sources.list следующие строки:
deb http://us.archive.ubuntu.com/ubuntu/ lucid multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ lucid multiverse
10. Подключаем PPA chromium-daily:
add-apt-repository ppa:chromium-daily
11. Обновляем БД пакетов:
apt-get update
12. Устанавливаем Chromium:
apt-get install chromium-browser
13.
Внимание. Вероятно данный шаг зависит от билда хромиума, поэтому выполнять только если флеш не работает!
Вообще флеш плагин устанавливается вот так:
apt-get install flashplugin-nonfree
Требуется подключенный multiverse репозиторий.
Чуть ниже костыльный способ:
13.1. На adobe.com узнаем ссылку на флеш последний флеш плеер. С нормальной системы конечно.
13.2. Устанавливаем wget в чруте:
apt-get install wget
13.3. Качаем пакет:
wget http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player_10_linux.deb
13.4. Устанавливаем его:
dpkg -i install_flash_player_10_linux.deb
13.5. Удаляем пакет:
rm install_flash_player_10_linux.deb
13.6. Читаем информацию о том, будет ли в свежих версиях хромиума нормальный флеш (а не гнаш как сейчас, вроде).
Если не будет, то нужно добавить репы для корректного и автоматического обновления плеера.
14. Устанавливаем пакеты для GTK2 темы, в моем случае `
Human-Clearlooks`:
apt-get install gtk2-engines gtk2-engines-murrine
15. Создаем папки куда будет записан конфиг стиля для GTK:
mkdir -p /home/user/.gconf/desktop/gnome/interface
16. Записываем в конфиг
/home/user/.gconf/desktop/gnome/interface/%gconf.xml следующее:
<?xml version="1.0"?>
<gconf>
<entry name="accessibility" mtime="1274437979" type="bool" value="true"/>
<entry name="icon_theme" mtime="1283883812" type="string">
<stringvalue>Humanity</stringvalue>
</entry>
<entry name="gtk_theme" mtime="1283884223" type="string">
<stringvalue>Human-Clearlooks</stringvalue>
</entry>
</gconf>
Замечу, аналогичный файл (с выбранной вами темой) имеется и у вас, его надо просто скопировать с основной системы в chroot.
Если файла у вас нет, то это значит, что у вас свежая Ubuntu. Просто смените тему (можно туда и обратно): файл должен появиться.
17. Выходим из schroot:
exit
18. Заканчиваем c GTK. Копируем используемую вами тему в chroot:
cp -R /usr/share/themes/Human-Clearlooks /chroot/chromium/usr/share/themes
Ⅲ — Соединяем чрут с основной системой
19. Внимание. Данный шаг можно пропустить, и просто ребутнуть машину после записи постоянных конфигов (20 и 21 действия).
19.1. Биндим системные разделы:
mount -o bind /dev /chroot/chromium/dev
mount -o bind /proc /chroot/chromium/proc
## В нужности этого я не уверен, проверю
##mount -o bind /sys /chroot/chromium/sys
## поэтому не выполняем
19.2. Связываем сессии:
mount -o bind /tmp/.ICE-unix /chroot/chromium/tmp/.ICE-unix
mount -o bind /tmp/.X11-unix /chroot/chromium/tmp/.X11-unix
19.3. Выставляем 777 на /dev/shm внутри chroot:
chmod 777 /chroot/chromium/dev/shm
20.
Аккуратно. Добавляем в конец файла
/etc/fstab:
# Chromium CHROOT
/dev /chroot/chromium/dev auto bind 0 0
/proc /chroot/chromium/proc auto bind 0 0
# Опять же не уверен
#/sys /chroot/chromium/sys auto bind 0 0
21. Добавляем в
/etc/rc.local до `exit`:
# Выставляем правильный права на /dev/shm в руте.
chmod 777 /chroot/chromium/dev/shm
# Почему так получается при бинде, не понятно.
# А ведь хромиум (конкретно он!) хочет писать в эту директорию
# Chromium chroot
mount -o bind /tmp/.ICE-unix /chroot/chromium/tmp/.ICE-unix
mount -o bind /tmp/.X11-unix /chroot/chromium/tmp/.X11-unix
22. Нам больше не нужны права рута на основной машине, выходим:
exit
Ⅳ — Автоматизация запуска
23. Проверяем переменную $DISPLAY реального пользователя:
echo $DISPLAY
# Выдаст скорее всего:
# :0.0
24. Создаем папку для ручных скриптов, если у вас таковой нету:
mkdir ~/.scripts
25. Создаем пусковой скрипт
~/.scripts/chromium.sh:
#!/bin/sh
xhost +local:
cd / && schroot -c chromium -u user /bin/sh /home/user/chromium.sh
sleep 30
xhost -local:
26. Выставляем права на исполнение:
chmod +x ~/.scripts/chromium.sh
27. Заходим в chroot но уже под пользователя:
schroot -c chromium -u user
28. Создаем файл
/home/user/chromium.sh:
export DISPLAY=":0.0"
chromium-browser %U&
exit
29. Выходим из chroot:
exit
30. Тестируем:
~/.scripts/chromium.sh
Если все правильно, то после появления сообщения о разрешение локальных коннектов к X, у вас откроется браузер.
Ⅴ — Мелкие доработки
....Будет дополнятся....
Хотелось бы добавить информацию о том, как сделать все более безопасно и ещё удобнее.
Ну а так же хотелось написать скрипты для крона, который будет обновлять чрут автоматически.
Ну и самое главное - уточнить наличие проблемы с флеш плагином.
Пока how-to в виде демо-версии. Пока надо уточнить безопасность самой системы использования schroot.
Ну и как минимум дать проверить профессионалам.

Но все пункты были проверены и должны работать.