
是否可以限製程式僅存取特定目錄,例如執行維伯在 Fedora 上並強制它只能讀取下面的/home/username/.local/share/viber/exchange
目錄而不能讀取其他目錄?
我已經成功創建並運行維伯作為另一個user:group
(viber:viber
)。當我嘗試從 Viber 內部開啟屬於我或任何其他使用者的檔案時,它無法讀取它們。目標實現了,但部分實現了。現在,我偶然發現了另一個問題,那就是維伯僅適用於訊息,當我嘗試撥打電話時,它說它找不到麥克風或揚聲器?感覺我知道為什麼(我以我自己的身份運行 X Server(GNOME)並且維伯作為viber:viber
( user:group
) ) 但我不知道該如何讓維貝爾用戶在以我的名義運行 X 伺服器時使用麥克風和揚聲器?
可能是,我需要將viber
使用者新增到某個群組?也許 SELinux 有一些解決方法?如果是這樣,您能提供適當的政策範例嗎? :D
維伯看起來很棒,但它不是開源的,只有上帝知道,那個預編譯軟體的原始碼是什麼!
答案1
使用chroot
創建一個小根目錄包含/bin
、/usr
、等(取決於您的需求),將所有內容複製/lib
到此/tmp
新根,然後進入chroot
該目錄。
chroot
command 是一個非常古老的 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
或其他專有的虛擬化軟體...
但從那裡開始,共享目錄意味著某種(偽)網路服務…