Можно ли ограничить доступ программ только к определенному каталогу, например, для запуска Viber на Fedora и заставить его читать только в /home/username/.local/share/viber/exchange и без других каталогов?

Мне удалось создать и запустить Viber как другой user:group (viber:viber). Когда я пытаюсь открыть изнутри файлы Viber, которые принадлежат мне или любому другому пользователю, он не может их прочитать. Цель достигнута, но частично. Теперь я наткнулся на другую проблему, которая заключается в том, что Viber работает только с сообщениями, и когда я пытаюсь позвонить, он говорит, что не может найти ни микрофон, ни динамики? Мне кажется, что я знаю почему (я запускаю X Server (GNOME) под себя, а Viber - под именем viber:viber (user:group)), но я не уверен, как позволить пользователю viber использовать микрофон и динамики во время работы под моим X-сервером. название?

Может быть, мне нужно добавить пользователя viber в определенную группу? Возможно, есть некоторые обходные пути с SELinux? Если да, то не могли бы вы привести правильный пример политики? :D

Viber, кажется, великолепен, но он не с открытым исходным кодом, и только Бог знает, что находится в исходном коде этого предварительно скомпилированного программного обеспечения!

1 ответ1

2

Использование chroot

Создайте небольшой корневой каталог, содержащий /bin , /usr , /lib , /tmp и т.д. (В зависимости от ваших потребностей), скопируйте все свои вещи в этот новый корень , затем запустите chroot в этот каталог.

Команда chroot - очень старый инструмент Un * x, построенный именно в этом смысле.

Вы можете связать каталог в контейнере , используя mount --bind .

Взгляните на man chroot и man mount !

Маленькая попытка:

ldd /bin/bash 
    linux-vdso.so.1 =>  (0x00007fff3e4b5000)
    libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f06290a1000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f0628e9d000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0628b12000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f06292e8000)


sudo -s

Предупреждение оттуда!

mkdir /tmp/test/chrooted/lib64
cp -t /tmp/test/chrooted/lib/x86_64-linux-gnu/ \
    /lib/x86_64-linux-gnu/{libc.so.6,libdl.so.2,libtinfo.so.5}
cp -t /tmp/test/chrooted/lib64 /lib64/ld-linux-x86-64.so.2 
chroot /tmp/test/chrooted

Я в тюрьме!

ls
bash: ls: command not found

В ls нет команды /bin !

Используя openvz или lxc

Следующий шаг в легкой виртуализации - запустить один из openvz или lxc (или другой, может быть).

Эти инструменты делают ок. то же самое, что chroot , но использовать изолированное пространство имен ядра. Это позволяет вам симулировать сетевые интерфейсы или другие устройства и некоторые ограничения в отношении памяти, процессора и других ресурсов ...

При такой легкой виртуализации вы можете делиться каталогами таким же образом, как и с помощью chroot , используя mount --bind (или в openvz возможно, использование mount -t simfs может быть полезным).

Сильная виртуализация

Далее вы можете использовать kvm , xen или другое программное обеспечение для пропитальной виртализации ...

Но оттуда, общие каталоги подразумевают какую-то (псевдо) сетевую службу...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .