Скрипт создания каталога chroot для запуска в нём торбраузера. Используется 64-битная система, для 32-битной требуются изменения, например: lib -> lib64, ld-linux-x86-64.so -> ld-linux.so и т.п. Могут потребоваться и другие модификации, в зависимости от используемой системы Linux, например расположение unix-сокетов и конфигурационных файлов.

Основные моменты
1. Копируется каталог установки ТББ
2. Для исполняемых файлов в нём определяются зависимости и тоже копируются
3. Копируются другие необходимые файлы: шрифты, конфигурационные файлы
4. Для unix-сокетов создаются жёсткие ссылки
5. Создаются файлы устройств
6. Для каталогов устанавливается запрет на чтение (биты доступа 111), кроме шрифтов, /proc и $home. Это затрудняет вредоносную активность при использовании уязвимости торбраузера.

После создания пользователя (в данном примере это tbb)

[code]
useradd -r -m -s /sbin/nologin -b /opt tbb
[/code]

и распаковки в нём ТББ (каталог tor-browser_en-US переименован в tor-browser) запускается скрипт

[code]
#!/bin/bash

# пользователь, домашний каталог, каталог установки ТББ, каталог chroot
user=tbb
home=/opt/$user
installdir=$home/tor-browser
chroot=/var/chroot/torbrowser/$user

# Проверка, что chroot не равен '/' или пустой строке
[ "$chroot" == '/' ] || [ -z "$chroot" ] && { echo "Error: Chroot directory is undefined"; exit 1; } # Создание каталога chroot, если его нет, и переход в него mkdir -pv $chroot chmod 0700 $(dirname $chroot) cd $chroot # Копирование каталога с ТББ в chroot cp --parents --preserve=all -vLr $installdir . # Создание жёстких ссылок из chroot на unix-сокеты X-сервера и dbus Xsocket=/tmp/.X11-unix/X0; dbusocket=/var/run/dbus/system_bus_socket mkdir -pv .$(dirname $Xsocket) .$(dirname $dbusocket) ln -v $Xsocket .$Xsocket ln -v $dbusocket .$dbusocket # Поиск в ТББ всех двоичных исполняемых файлов (ELF), нахождение зависимостей (ldd) и # копирование необходимых динамических библиотек в chroot cp --parents -vL $(ldd $( \ for f in "$(find $chroot$installdir -type f -perm /0111 -exec file {} \; | grep ELF | cut -f1 -d:)"; do echo $f; done) 2>/dev/null | grep '^\s' | cut -f3 -d ' ' | sed '/^\s*$/d; /^[^/]/d' | sort -u) . # Копирование дополнительных файлов и библиотек, необходимых для работы торбраузера cp --parents -vLr /etc/{localtime,fonts,pulse} /usr/share/fonts /var/lib/dbus/machine-id \ /lib64/{ld-linux-x86-64.so*,libnss*.so.*} . # В /etc/{passwd,group} только записи о пользователе, под которым работает торбраузер grep ^$user /etc/passwd > ./etc/passwd grep ^$user /etc/group > ./etc/group # Создание файлов устройств mkdir -pvm 0111 ./dev mknod -m 0666 ./dev/null c 1 3 mknod -m 0644 ./dev/random c 1 8 mknod -m 0644 ./dev/urandom c 1 9 # Каталог для файловой системы proc mkdir -pv ./proc # Запрет просмотра каталогов, кроме /proc и $home find . -type d \( -path ./proc -prune -o -path .$home -prune -o -print \) | xargs chmod a-rw # Разрешение просматривать каталоги со шрифтами find ./usr/share/fonts ./etc/fonts -type d | xargs chmod a+r [/code] Монтирование каталога /proc [code] mount --bind /proc /var/chroot/torbrowser/tbb/proc [/code] Если используется общая X-сессия, нужно разрешить подключение к ней [code] xhost si:localuser:tbb [/code] Запуск торбраузера [code] user=tbb cd /var/chroot/torbrowser/$user env -i DISPLAY=:0.0 HOME=/opt/$user/tor-browser/Browser LD_LIBRARY_PATH=/opt/$user/tor-browser/Browser/TorBrowser/Tor /usr/sbin/chroot --userspec=$user:$user . /opt/$user/tor-browser/Browser/firefox -profile /opt/$user/tor-browser/Browser/TorBrowser/Data/Browser/profile.default" [/code] Для автоматизации запуска удобно создать ярлык $HOME/Desktop/tor-browser.desktop следующего содержания [code] [Desktop Entry] Categories=Network;WebBrowser; Comment=Browse the Web GenericName=Web browser Icon=/tmp/tbb/tor-browser_en-US/Browser/browser/icons/mozicon128.png Name=TorBrowser tbb NoDisplay=true Exec=sudo bash -c "user=tbb; xhost si:localuser:$user; cd /var/chroot/torbrowser/$user; mount | grep $(pwd) || mount --bind /proc ./proc; env -i DISPLAY=:0.0 HOME=/opt/$user/tor-browser/Browser LD_LIBRARY_PATH=/opt/$user/tor-browser/Browser/TorBrowser/Tor /usr/sbin/chroot --userspec=$user:$user . /opt/$user/tor-browser/Browser/firefox -profile /opt/$user/tor-browser/Browser/TorBrowser/Data/Browser/profile.default"
Terminal=true
StartupNotify=true
Type=Application
Version=1.0
[/code]

После этого в настройках указывается нужный прокси-сервер (SOCKS5 127.0.0.1:9050 или HTTP/S 127.0.0.1:8118). chroot-окружение для Tor-демона создаётся аналогично, в Интернете есть примеры, могу выложить свой пример если кто заинтересуется.

Некоторые наблюдения
1. торбраузер не работает без файла /var/lib/dbus/machine-id, содержащего уникальный идентификатор машины.
2. торбраузер работает с HTTPS-сайтами при отсутствующих файлах /dev/{random,urandom} (все файлы устройств оказываются не нужны). Возникает вопрос, откуда он берёт случайность и о её качестве. Например Tor-демон в chroot не работает при отсутствующем /dev/urandom.

Ограничение доступа к файлам из /proc до реально необходимых, позволило бы снизить возможности по идентификации машины.

Работа со звуком и видео не проверялась.

Конструктивные замечания и улучшения приветствуются.

Комментарии
Гость (24/02/2015 09:27)   

Сбор энтропии из системы[link1], в браузере firefox при использовании libnss.
Как видно собирают из чего попало, и хотя /dev/urandom[link2] используется, отсутствие этого файла не является фатальной ошибкой и не сопровождается никакими сообщениями.
Если что, на выходе от netstat'а энтропии доберет ☺. Такие дела.
Гость (24/02/2015 16:20)   
Бакланджос, будь[link3] рессой хипстером – ипаш через Докер. Олечка Джессика контейнер накатала за тебя.

Гость (24/02/2015 23:54)   
Чем модный Докер лучше chroot в данном случае? Поверхностное чтение о нём в Интернете не выявило заметных преимуществ. А недостатки есть

1. Ядро Linux 3.8 и выше. При этом chroot работает на любых компьютерах и роутерах, доступен в других ОС (BSD).

2. Более сложная реализация. Докет потребляет ресурсы процессора, дисковое пространство и снижает производительность. У chroot этого нет, размер системы практически не растёт, а производительность вообще не меняется, это лишь системный вызов, изменяющий для процесса корневой каталог. Чем проще решение, тем меньше вероятность наличия слабых мест. Уже было несколько сообщений об уязвимостях Докера.

3. Если правильно понял, Докеру доступна для чтения вся система и её утилиты. Он лишь создаёт контейнер, действия в котором не должны влиять на файлы вне его. Процесс в нём может спокойно исследовать систему на слабые места, залезть в /sys, выполнить dmesg, отослать результат в Интернет, пользуясь сетевыми утилитами и т.п.


бакланчик, упражняться в убогом сленге лучше в этой[link4] теме, ни к чему понос по всему сайту разносить.
Гость (25/02/2015 00:39)   
Гость (24/02/2015 23:54): красиво уделал фраера с его докером, респект! :)
— ressa (25/02/2015 13:36, исправлен 25/02/2015 14:26)   

Баранджос – в том моем посте, на который ты ссылаешься я спрашиваю совета а не утверждаю. Почитал бы сам о Docker. Не получив ответ – я поправил пост, читай его еще раз. У Docker проблемы с безопасностью. И еще он рут просит там, где вполне без него можно обойтись.
UPD.
По поводу Docker – на его основе целую ОСь запилили, кому интересно можете посмотреть. RancherOS[link5]. Кстати, примечательна еще тем, что от systemd отказалась – собственная система инициализации.

Гость (26/02/2015 00:46)   
Этот комментарий[link6] должен быть в каждом топике с велосипедостроительством на тему chroot'а.
— unknown (26/02/2015 09:45)   
Тем более, chroot для большого иксового приложения.
Гость (26/02/2015 11:25)   
велосипедостроительством на тему chroot'а

Не велосипедостроительство, а по факту стандартная практика повышения безопасности сетевых приложений. Большинство популярных серверов имеет опции, помогающие переходу в chroot, примеры – Apache, MySQL, Unbound, Stunnel, Squid, Privoxy и т.д.

Торбраузер в chroot более защищён в следующих отношениях

1. Злоумышленник лишён возможности исследовать систему на наличие уязвимостей (опасные разрешения файлов из PATH, каталоги с правом на запись и т.д.) и записывать в неё троянские программы.

2. Недоступны системные утилиты, облегчающие задачу п.1

3. Ограничена возможность идентификации "железа" системы. Наиболее опасный в этом отношении каталог /sys исключён из chroot, но некоторую информацию можно извлечь из /proc. Если выяснить какие конкретно файлы /proc нужны для работы торбраузера, можно разрешить доступ только к ним, хотя с ходу это выяснить не удалось. Но это не концептульный недостаток, а погрешность реализации.

Тем более, chroot для большого иксового приложения

Консольное или графическое, принципиальной разницы нет.

Хорошая статья: Best Practices for UNIX chroot() Operations[link7]
Гость (26/02/2015 17:07)   

Стандартная распространённая практика кулхацкерства, никто не спорит. Тяжело переосмысливать то, к чему привык, да ещё тогда, когда массы до этого не дозрели и продолжают жужжать тебе в ухо «делай как мы». Только вот приходят потом серьёзные дяди и объясняют, что миллионы мух очень сильно ошибаются, мухам больно [1][link8], [2][link9], [3][link10]. Стоит ещё вспонить, что там с дисковым шифрованием творилось до тех пор, пока им занимались кулхацкеры, причём всё официально ж было, в ядре и всё такое.
Гость (26/02/2015 17:42)   
Если вы "серьёзный дядя", то объясните. Выше приведёно три довода в пользу chroot, и пока опровержений или альтернатив не последовало. Последний ваш пост вообще ни о чём, одни понты и никакой конкретики.
Гость (26/02/2015 18:18)   

Равно как и ваше детсадовское переливание из пустого в порожнее.


Всё объяснено по ссылкам. Потом это обсуждалось ещё много где, включая SELinux-топик[link11]. Гарантировать выход из чрута нельзя, а надеяться на то, что зловред будет туп и не сможет это сделать — самоуспокоение. Хотите играть в прятки сам с собой — играйте, пусть одни кулхацкеры придумывают «защиту», а другие её «обходят»:

Ой-ой-ой. Как только узнали элитный способ обхода nonexec так тут же побежали дырки все залатали. Ну ничего, для вас есть еще один способ обхода nonexec

Про чрут то же самое можно сказать.
Гость (26/02/2015 19:27)   
Всё объяснено по ссылкам

Какое отношение ваши ссылки имеют к chroot? Первая про /dev/urandom, вторая EncFS, третья eCryptFS. До этого была ссылка на unknowna, где он в свою очередь ссылался ещё на одного авторитета. Или это вид троллинга? Если будете продолжать "обсуждение" в таком же духе, нет смысла его поддерживать.
Гость (26/02/2015 19:52)   

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

стандартная практика повышения безопасности сетевых приложений

примеры – Apache, MySQL, Unbound, Stunnel, Squid, Privoxy и т.д.

MsChap[link12], знаете ли, тоже стандарт.


А что, применимость фактов зависит от того, кто их озвучивает, поэтому на авторитеты ссылаться может только сам авторитет? Или вы ожидаете, как ZAS, что с вами тут имеют право спорить только топовые мировые авторитеты и только с апелляцией к своему личному опыту? Ответ на этот случай unknown уже дал[link13]. Считаете себя умнее всех — продолжайте, а здесь консенсус в том, что чрут для безопасности — в лучшем случае паллиатив, в худшем — плацебо.
Гость (26/02/2015 21:00)   
имеют право спорить

Мне не нужен спор, интересно только предметное обсуждение. Но с вами действительно получается спор со стандартным набором демагогических оборотов – необоснованные аналогии, психологическая оценка собеседника и т.п. Я так понял, вы просто посты набиваете, не буду вам дальше мешать.
Гость (26/02/2015 23:03)   
Хорошо, unknown[link14]'у тогда тоже не мешайте, он[link6], каки я, просто посты набивает. ☺

Ссылки
[link1] https://mxr.mozilla.org/mozilla-esr31/source/security/nss/lib/freebl/unix_rand.c#818

[link2] https://mxr.mozilla.org/mozilla-esr31/source/security/nss/lib/freebl/unix_rand.c#888

[link3] https://www.pgpru.com/forum/unixlike/virtualizacijaakiqubes?show_comments=1&p=1#Comment88420

[link4] https://www.pgpru.com/forum/offtopik/kompjjuterdljasekretnogointernetaiibdljarossijjskoukrainskojjdruzhby

[link5] https://github.com/rancherio/os

[link6] http://www.pgpru.com/comment34713

[link7] http://www.unixwiz.net/techtips/chroot-practices.html

[link8] http://www.pgpru.com/comment87878

[link9] http://www.pgpru.com/novosti/2014/vrezuljtateauditaencfsvyjavleno11slabyhmestvorganizaciiprocessashifrovanija

[link10] http://www.pgpru.com/novosti/2014/rezuljtatyauditabezopasnostiecryptfs

[link11] http://www.pgpru.com/forum/unixlike/selinuxapparmoridrsistemybezopasnosti

[link12] http://www.pgpru.com/novosti/2012/okonchateljnyjjvzlommschapbystrajadeshifrovkamicrosoftvpniwep2

[link13] http://www.pgpru.com/comment86028

[link14] http://www.pgpru.com/comment88901