是否可以限制程序仅访问特定目录,例如运行Viber在 Fedora 上并强制它只能读取下面/home/username/.local/share/viber/exchange
而不能读取其他目录?
我已经成功创建并运行Viber作为另一个user:group
(viber:viber
)。当我尝试从 Viber 内部打开属于我或任何其他用户的文件时,它无法读取它们。目标实现了,但只是部分实现。现在,我遇到了另一个问题,即Viber只适用于消息,当我尝试拨打电话时,它说找不到麦克风或扬声器?我觉得我知道原因(我以自己的身份运行 X Server(GNOME)并且Viber作为viber:viber
(user:group
)),但我不确定如何让维伯用户是否可以在我名下运行 X 服务器时使用麦克风和扬声器?
也许我需要将viber
用户添加到某个组?SELinux 可能有一些解决方法?如果是的话,您能提供适当的策略示例吗?:D
Viber看起来很棒,但它不是开源的,只有上帝知道,那个预编译软件的源代码上有什么!
答案1
使用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
,但使用隔离内核命名空间。这让您可以模拟网络接口或其他设备以及内存、CPU 和其他资源的一些限制……
这种轻度虚拟化,您可以以与使用相同的方式共享目录chroot
,通过使用mount --bind
(或者在openvz
使用下mount -t simfs
可能有用)。
强大的虚拟化
接下来您可以使用kvm
或xen
其他专有虚拟化软件......
但从那时起,共享目录就意味着某种(伪)网络服务...