AppArmor - реализация способа ограничения процессов в linux, основанная на структурированном описании того, что программе позволено, а что нет.
Что такое firejail - реализация механизма песочницы, позволяющая изолировать процессы от основной системы.
В каком-то смысле firejail и apparmor дополняют друг друга и их можно использовать совместно
Установка AppArmorsudo pacman -S apparmor
Правим загрузку
sudo gedit /etc/default/grub
добавляем в GRUB_CMDLINE_LINUX_DEFAULT параметр lsm
GRUB_CMDLINE_LINUX_DEFAULT="lsm=landlock,lockdown,yama,apparmor,bpf ...
Обновляем загрузочную запись
sudo grub-mkconfig -o /boot/grub/grub.cfg
Включение в автозагрузку и запуск сервиса
sudo systemctl enable apparmor.service
sudo systemctl start apparmor.service
Уходим на перезагрузку
reboot
Проверяем статус AppArmor после загрузки системы
aa-enabled
AppArmor применяет к процессам ограничения на основе перечня правил, описывающих параметры доступа и сохраняемых в профилирующих файлах в каталоге /etc/apparmor.d
Профили AppArmor для часто используемых программ скачиваем по ссылке https://github.com/nibags/apparmor-profiles Распаковываем, переписываем в /etc/apparmor.d Файл профиля для программы /path/to/app будет иметь имя path.to.app Рассмотрим для примера firefox Тестовый режимsudo aa-complain /etc/apparmor.d/usr.bin.firefox
В тестовом режиме сначала парсер apparmor_parser
проверит правильность заполнения профиля.
На этом этапе парсер выдаст предупреждения, в которых указано имя файла, номер строки с ошибкой.
Часто встречаются следующие ошибки, допускаемые составителями профилей: используются отсутствующие файлы - удаляем такую строку, профиль ссылается сам на себя (бесконечная рекурсия) - удаляем и так далее, отсутствует слово profile перед путем к программе - дописываем, делается попытка описать профиль для другой программы внутри профиля - убираем целиком вложенный профиль и т.п.
Удобно вносить правки с помощью редактора gedit, т.е.sudo gedit /etc/apparmor.d/usr.bin.firefox
Запускаем заново.
sudo aa-complain /etc/apparmor.d/usr.bin.firefox
Если ошибок в описании правил не найдено и все включаемые файлы обработаны верно, то программа переводится в комплейн режим, который можно назвать тестовым.
Программа в комплейн режиме это тоже самое, что программа без защиты AppArmor, поскольку ограничения по существу не действуют.Запускаем программу, запускаем aa-status в терминале и видим, что добавленное приложение в тестовом режиме. В этом режиме программа может делать не разрешенные действия, и они будут журналироваться.
Путем анализа журнала можно подобрать ограничения для программы. Проверка того, что профиль подключенsudo apparmor_status | grep firefox
Проанализировать действия программы в тестовом и боевом режиме (enforce, когда подсистема appArmor запрещает делать все, что явно Вами не разрешено) можно так
1) Зачистим журнал
sudo journalctl --rotate
sudo journalctl --vacuum-time=1s
2) Запустим программу, выполним в ней действия, закроем ее.
Поищем по ключевому слову в журнале сообщения apparmor
journalctl -xe | grep "apparmor" | less
или если удобно работать с файлом
journalctl -xe | grep "apparmor" >> apparmor-log.txt
Применить ограничения действительным образом можно с помощью
sudo aa-enforce /etc/apparmor.d/usr.bin.firefox
О правилах подробно почитать можно в документе
https://en.opensuse.org/SDB:AppArmor_geeks
Если в enforce режиме программа падает, не запускается - наберитесь терпения, запустите ее из терминала, проверьте журнал apparmor, переведите программу в тестовый complain режим, внесите правки в профиль и попробуйте снова запустить приложение в enforce режиме. Часто причиной тому может стать доступ к вспомогательным библитекам.
Что делать, если профиля нет нигде в сети? Можно собрать с помощьюaa-genprof
и aa-logprof
Можно пойти другим путем - создать на базе профиля другой программы, отредактировав его.
Забрать профиль для telegram для enforce режима можно по
ссылке https://github.com/ArtNazarov/app_armor_telegram_profile,
( проверено на 3.7.3 telegram-desktop в Archlinux )
Установка firejail
sudo pacman -S firejail
Настройку можно выполнить командой
sudo firecfg
На примере хранилки паролей keepass, если нужно отобрать доступ программы к сети, запускаем программу с ключом net none
firejail --net=none keepassxc
Запуск firefox внутри firejail можно выполнить так
firejail firefox
В firejail есть так называемый приватный режим, с более жесткими ограничениями.
firejail --private firefox
Можно прописать путь, в котором будет временно
размещать файлы песочница.
firejail --private=~/temp firefox
Нужно понимать, что приватный режим самой песочницы не тоже самое, что приватный режим firefox. Чтобы сделать
запуск приватного сеанса firefox внутри приватного сеанса firejail, используем
firejail --private firefox --private-window
Список процессов в песочнице
firejail --list
или
firejail --top
Завершение приложения в песочнице по его PID (номеру процесса в системе)
firejail --shutdown=PID
Отмечу, что эквивалентом --net=none является ограничение deny network в AppArmor, также не забываем и возможности контроля доступа к сети с помощью фаервола ufw.
Настройка пунктов меню KDE
правая кнопка по Пуску, редактировать меню.
переходим к программе, основные параметры, команда.
Например, для firefox можно внести следующее
kdialog --msgbox "In firejail!" & firejail /usr/lib/firefox/firefox %u
kdialog нужен для предупреждения, что программу
запускают в песочнице.
Теги документа