Process
是否可以讓某些程序獨占訪問設備?
我有一個設備(影片卡),我只需要兩個程序(表示為路徑,例如
/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 位。