是否可以使某个设备只能由某些程序访问?

是否可以使某个设备只能由某些程序访问?

我有一个设备(视频卡),我只需要两个程序(表示为路径,例如/usr/bin/myprogram)即可访问。

该设备有一个/dev文件(例如/dev/mydev1),但如果需要,我也可以使用其他参考(总线 ID、供应商/产品 ID 等)。

我可以做些什么(例如udev规则)来阻止任何程序访问,除了我指定的程序之外?

答案1

经典的 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具有“运行 shell”功能或某种其他方式供用户运行他们选择的其他程序,那么这些 shell/其他程序可能会继承vidcard组成员身份,除非myprogram被编程为采取措施删除由该用户授予的额外权限。在启动其他程序之前设置 gid 位(setregid()在 Linux 中)。

相关内容