Как защитить некоторые файлы от приложения на уровне пользователя?

388
Tom

В многопользовательской системе Ubuntu, как я могу дать своим пользователям способ выполнять загруженные приложения таким образом, чтобы приложение не имело доступа ко всем файлам, кроме указанного белого списка (который отличается для каждого приложения), и который не ' t (сильно) увеличить системные ресурсы?

Некоторые пользователи скачивают и «устанавливают» (что означает распаковать в ~ / bin) множество приложений. Цель состоит в том, чтобы запустить эти приложения таким образом, чтобы эти приложения могли получить доступ только к указанным пользователем каталогам с конфигурацией конкретного приложения, рабочими данными и т. Д., Но не с ключами, личными фотографиями, внутренними данными других таких приложений и т. Д. Каждое Приложение должно иметь свой собственный белый список.

Но эти пользователи не могут ни изменять систему, ни получать доступ к файлам других пользователей. (Т.е. эти пользователи не должны получать права root. Они не администраторы.)

-1
Песочница ВСЕГДА имеет накладные расходы. Песочница требует некоторой формы виртуализации, что означает накладные расходы. Песочница в ее различных формах также, пожалуй, единственный способ сделать то, что вам нужно. music2myear 6 лет назад 0
Да, именно поэтому я написал "... не увеличивая (** сильно **) использование системных ресурсов ...". Поправьте меня, если я ошибаюсь, но песочница AFAIK не требует таких больших затрат, как виртуализация всей ОС. Чтобы привести лучший пример (или увидеть оригинальный вопрос, если вы можете получить доступ к истории редактирования), я хочу использовать его для некоторых повседневных приложений, таких как Skype - всего 10-20. Небольшие накладные расходы в этом подсчете (по сравнению с тысячами процессов) AFAIK, VirtualBox убьет систему. Tom 6 лет назад 0
I was going to suggest that you use different user accounts, but then I saw (in the revision history) that you have already considered that. It’s very low overhead. (1) You have to create the “sandbox” account, which takes a minute or two, but you need to do this only once. (Once per application, if you’re really paranoid, and you want each app in a separate sandbox, so they can’t interfere with each other.) (2) A few milliseconds to start the app with `su` or `sudo`. (You will probably want to define an alias or other wrapper to do this automatically.) G-Man 6 лет назад 0
Проблема (одна из проблем) заключается в том, что я не могу отвечать людям в Skype / Discord, и я не уведомляю Thunderbird, когда он запускается из другой учетной записи, отличной от моей текущей ... Даже если я переключаюсь с помощью ctrl + alt + FX и запустить еще один сеанс X с startx, уведомления и звуки (правильно) заблокированы, когда я нахожусь в другом терминале. Tom 6 лет назад 0
Не обращайте внимания на мой предыдущий коммит, я думаю, что я устал, это не имеет смысла, если вы предложите su / sudo. Это интересно, но довольно неудобно по разным причинам: синхронизация с Unison (с моим ноутбуком) и есть приложения, которым я доверяю чуть больше (например, midnight commander), которые должны иметь доступ к большей части данных ... Tom 6 лет назад 0

1 ответ на вопрос

0
xenoid

AppArmor, кажется, именно то, что вы ищете: из Википедии:

AppArmor («Application Armor») - это модуль безопасности ядра Linux, который позволяет системному администратору ограничивать возможности программ с помощью профилей для каждой программы. Профили могут предоставлять такие возможности, как доступ к сети, доступ к необработанным сокетам, а также разрешение на чтение, запись или выполнение файлов по соответствующим путям.

AppArmor является установкой по умолчанию в Ubuntu, и для некоторых приложений существуют профили (например, Firefox).

Существует Вика здесь . Вы можете просматривать профили, уже определенные в вашей системе ( etc/apparmor.d), но избегайте Firefox, который является более сложным, чем большинство.

Спасибо за ваш ответ. Не могли бы вы предоставить ссылки (или уточнить), как их использовать в user-space_? Когда я искал решение (до того, как создал этот вопрос), я столкнулся с AppArmor, однако _I не смог найти никакой информации_ об использовании его в пространстве пользователя. Tom 6 лет назад 0
На что ты опираешься, «используй это в пространстве пользователя»? Использовать это без привилегий root? Вам нужны только привилегии при настройке брони .... xenoid 6 лет назад 0
Да, довольно. Дело в том, что пробовать новые приложения (установленные в домашнем каталоге без необходимости суперпользователя) является довольно обычной частью моего рабочего процесса. Я пытаюсь избежать любого шага в качестве корня по соображениям безопасности. Tom 6 лет назад 0
Самый простой способ - это виртуальная коробка. Linux VBox не так уж и тяжел, особенно если вы берете легкий дистрибутив (Lubuntu или еще) и удаляете все, что бесполезно в Vbox. xenoid 6 лет назад 0
Учитывая то, что я написал о Virtual Box в оригинальном и отредактированном вопросе ... означает ли это, что ответ на мой вопрос "под этими ограничениями - нет пути"? Tom 6 лет назад 0
В вашем первоначальном вопросе не говорилось, что 1) вы не хотите использовать привилегированные права пользователя, и 2) что это будет для тестирования программного обеспечения (вместо того, чтобы запускать те же несколько приложений в защищенном режиме). xenoid 6 лет назад 0
@xenoid Я прошу прощения за это, и я не знаю, что с этим делать. Мой действительно первый (действительно первоначальный) вопрос постарался быть максимально понятным. Но это было помечено как «слишком широкое» без [объяснения] (https://meta.superuser.com/q/13311/943030), в чем именно заключается проблема. Поэтому я сократил его (то есть пропустил все детали и оставил самое основное ядро), но теперь мне нужно уточнить все аспекты, когда кто-то предлагает что-то, что не совсем работает с проблемой _actual_. И кстати. это не совсем о _testing_ приложениях, это больше о _using_ их. Например, я хочу изолировать Skype - всегда. Tom 6 лет назад 0
@xenoid Чтобы быть более точным в отношении _testing_ и _using_ приложений - я извиняюсь, когда я писал, что "пробовать новые приложения ... это довольно обычная часть моего рабочего процесса", я не совсем ясно дал себе понять. Я пытался сказать, что набор приложений, которые я использую для работы, постоянно меняется. Я столкнулся с новой проблемой. Попробуйте несколько приложений. Выберите тот, который лучше всего решает мою проблему, но я все еще хочу держать его изолированным (в большинстве случаев). Или некоторые приложения, которые я использую, устаревают. Например, в последнее время я действительно думаю о замене Dropbox. Tom 6 лет назад 0
@xenoid Дело в том, да, этот вопрос касается изоляции приложений, которые я _использую_ в повседневной работе. Но проблема в том, что набор приложений не постоянен. Очень простой пример: я играю в игры. Есть всегда новые игры. Таким образом, решение, которое я ищу, не должно требовать прав доступа root, потому что это то, что я делаю _регулярно_, и я (в целом) пытаюсь избежать рабочего процесса, который требует _absolute_, root-права для повседневной работы одного пользователя - меня. То, что я пытаюсь сделать, - это повлиять на одного пользователя, а не изменять систему. Tom 6 лет назад 0
@xenoid In other words, the problem which I'm trying to solve by avoiding using root privs is to avoid a system, which can be used _only if I'm constantly logged as root_. Like at Windows XP times where you _had_ to be an admin if you want actually use the system for most operations. But, of course, I'm absolutely OK with using root privs to actually install the SW or configure the system to allow me to isolate apps. Tom 6 лет назад 0
«* Но, конечно, я абсолютно согласен с использованием привилегированных привилегий root для фактической установки программного обеспечения или настройки системы, чтобы позволить мне изолировать приложения. *» Затем, как указано выше, apparmor требует наличия rootprivs для настройки, а не для каждого выполнения. приложения. xenoid 6 лет назад 0
@xenoid Когда - как обычный пользователь - я загружаю новую игру или приложение, устанавливаю его в ~ / bin /, позволяет ли мне настроить его для этого нового исполняемого файла без привилегий root? (Только для меня, один пользователь.) Tom 6 лет назад 0
@xenoid Btw. я действительно так трудно понять? Будучи не носителем английского языка, я действительно стараюсь писать простые предложения, сопереживать основным моментам, но, похоже, я действительно не могу объяснить свою точку зрения ... Tom 6 лет назад 0
@xenoid Хорошо, как насчет примера: в качестве пользователя root я устанавливаю сервер ssh и ssh (шаг №1). В качестве root я _конфигурирую_ ssh-сервер (порт, включить x-forwarding и т. Д.) (Шаг № 2). Затем, как _user_, я могу создавать новые ключи, добавлять открытые ключи, настраивать псевдонимы и т. Д. Другими словами, я могу _configure ssh в пользовательском пространстве без необходимости root privs_ (шаг # 3). Мне не нужен доступ к _everything_, чтобы просто сгенерировать ключ. Затем, как пользователь, я могу использовать ssh для подключения (шаг # 4). Итак, что я ищу, так это что-то вроде ** App Armor, которое позволяет мне настраивать ограничения приложений для меня, пользователя, как шаг № 3 - без полномочий root. Tom 6 лет назад 0
@xenoid Еще один способ взглянуть на мою проблему: я администратор многопользовательского ПК. Я хочу, чтобы некоторые пользователи могли загружать приложения из Интернета, настраивать решение, которое я ищу для того, что ограничивает доступ к приложению, и запускать приложение с настроенными ограничениями. Однако я не хочу, чтобы эти пользователи имели доступ к файлам других пользователей (в том числе всех, у кого есть эта возможность), я не хочу, чтобы эти пользователи могли изменять конфигурацию системы, и, безусловно, я не хочу, чтобы они быть в состоянии настроить решение, которое я ищу для других пользователей. Это то, что я пытаюсь решить. Tom 6 лет назад 0
Могу ли я предложить вам переработать свой первоначальный вопрос, чтобы включить всю эту информацию? xenoid 6 лет назад 0
@xenoid Хорошо, я приложил все усилия, чтобы отразить это в вопросе, не становясь слишком широким. Tom 6 лет назад 0