Как запретить запись на диск для определенных программ в Linux?
Здравствуйте! Вопрос собственно в заголовке. Можно ли такое сделать? Например, возьмем для примера типичный образ *.AppImage. Он после запуска кеширует данные в cache, а настройки в config. Пробовал лишать образ прав на запись, но после запуска он все равно создает файлы в различных папках. Образ *.AppImage привел чисто для примера. Это может быть запуск любой программы.
Вы можете ограничить юзера, от имени которого запускается программа. Ограничения для самих программ реализуются в контейнерах, например, такая возможность есть во Flatpack https://askubuntu.com/questions/1086529/how-to-giv...
Damian Lewis, как простой вариант вы можете передать директории, которые в не хотите записывать данные другому пользователю (chown), например, root и также установить на неё права 700 (или можно даже одними правами ограничиться). Тогда ваш юзер без привелегий не сможет ничего туда записать. Такой подход весьма геморойный, + можно сломать что-нибудь. Лучше посмотрите на контейнеры. В тот же Flatpack много чего упаковано, на худой конец можно самостоятельно упаковать приложение.
Какая вообще цель в том, чтобы не давать приложению писать конфиги и кэш? Оно же вряд ли будет работать корректно.
gd, Насчет полного лишения прав на файлы/каталоги есть более уместный вариант вместо chown. Наз-ся chattr. Лишает полного доступа на всё даже для root. Просто искал вариант чтобы файлы вообще не создавались. Насчет *.AppImage я дважды написал, что это просто пример. Чисто для упрошения задачи. Лишать его прав на запись я не собираюсь. Это может быть к примеру запрет на сохранения файлов для офисной программы, менеджера заметок, чтобы новые записи не создавал. По сути замораживается весь процесс на какие либо изменения для определенной программы, если у него не будет возможности записи на диск.
А зачем тут контейнер? Приложение от конкретного пользователя запускать умеет сама система, и поэтому и в контейнере это работает. Контейнеры не дают никаких фич, которых нет без них, контейнер это просто слой изоляции. Ну вот как вы можете взять вещь и положить в пакет, и в общем-то ниче не изменится - также сможете её перекладывать, хранить и т.п.
Контейнеры не дают никаких фич, которых нет без них
Ну в общем-то дают довольно неплохой функционал для ограничения конкретных прав доступа в рамках работы программы в контейнере. У того же flatpack есть подобный функционал. Более того, есть неплохой менеджер для flatpack программ который наз-ся Flatseal. Вот здесь можете глянуть на скриншотах.
Да можно. В разных дистрибутива могут работать немного различающиеся механизмы контроля доступа selinux (redhat и основанные на нем) и AppArmor (debian, Ubuntu и соплеменики). С другой стороны, все реализуется почти на одних и тех же механизмах ядра.
Есть ещё отдельно castle grade Linux на rbacl от АНБ.