Process

是否可以讓某些程序獨占訪問設備?

  • August 21, 2021

我有一個設備(影片卡),我只需要兩個程序(表示為路徑,例如/usr/bin/myprogram)即可訪問。

該設備有一個/dev文件(例如/dev/mydev1),但如果需要,我也可以使用其他參考(匯流排 ID、供應商/產品 ID 等)。

有什麼我可以做的(例如udev規則),阻止任何程序訪問,除了我指定的那些?

經典的 unix 解決方案是創建一個系統組(例如groupadd -r vidcard),然後將設備的權限設置為只允許 root 和該組的成員訪問它。在 Linux 中,這將採用 udev 規則的形式,/dev每次啟動時都會從頭開始重新生成。規則可能如下所示:

KERNEL=="mydev[0-9]*", MODE="0660", GROUP="vidcard"

最後,需要訪問的程序需要將它們的組所有者設置為vidcard並設置 setgid 位。所以:

chown root:vidcard /usr/bin/myprogram
chmod 2711 /usr/bin/myprogram  # this results in permissions -rwx--s--x

不應向普通使用者授予該vidcard組的成員資格。他們能夠獲得該會員資格的唯一方法是執行myprogram.

如果myprogram具有“執行外殼”功能或其他方式供使用者執行他們選擇的其他程序,那麼這些外殼/其他程序可以繼承vidcard組成員身份,除非myprogram被程式為採取措施放棄由在啟動其他程序(setregid()在 Linux 中)之前 setgid 位。

引用自:https://unix.stackexchange.com/questions/665605