控制声音权限,撤销对音频的访问

控制声音权限,撤销对音频的访问

我想控制使用声卡的权限。有设备“/dev/snd/*”,所有者是“root”,组是“audio”,权限是“660”。因此,我希望只有“audio”组中的用户才能使用声卡,但这行不通。我有一个用户“u1”,他不在“audio”组中,但他有访问权限!我发现访问是由 ACL 控制的,因此getfacl显示以下内容:

# file: timer
# owner: root
# group: audio
# flags: --t
user::rw-
user:u1:rw-
group::rw-
mask::rw-
other::---

即使我用 删除它,“user:u1:rw-”这一行也会神奇地再次出现setfacl

对我来说,似乎有一个 root 拥有的进程,它会自动向任何用户添加权限,而忽略“音频”组成员身份。

为何授予访问权限?如何撤销用户对声卡的访问权限?

答案1

检查系统

要启用 ACL,必须使用 acl 选项挂载文件系统。ACL
选项很可能已作为文件系统的默认挂载选项处于活动状态。
检查输入(将 sdXY 替换为正确的分区):

sudo tune2fs -l /dev/sdXY | grep "Default mount options"

输出应该是这样的:

Default mount options:    user_xattr acl

还要检查默认安装选项是否未被覆盖,如果被覆盖,您将在相关行中看到。输入noacl/proc/mounts

sudo cat /proc/mounts | grep noacl

如果需要,您可以使用 tune2fs -o option partion 命令设置文件系统的默认挂载选项,例如:

 tune2fs -o acl /dev/sdXY

使用 ACL:

修改 ACL 使用setfacl

setfacl -m "u:username:permissions

或者

setfacl -m "u:uid:permissions

例如,要撤销用户对声卡的访问权限,请输入:

setfacl -m "u:u1:---" /dev/snd/controlC0 

您可以轻松尝试是否有效,播放音轨,然后执行命令:如果声音中断,则表示命令已执行

您还可以使用以下命令检查权限是否已更改:

getfacl /dev/snd/controlC0 ( Control Interface /dev/snd/controlCX )

请参阅手册man aclman setfacl了解更多选项。

答案2

声音设备(和其他“座位”设备)的 ACL 由座位管理服务控制。对于 Ubuntu Xenial(16.04)及更早版本,此操作由 ConsoleKit 服务完成。对于更高版本,此操作由 systemd-logind 取代。这篇 Ubuntu 知识库文章解释了其中的原因

从技术上讲,您可以通过更改 udev 规则(seat从设备中删除“ ”)或使用 D-Bus API 从座位管理器设备数据库中删除设备(所有这些都来自 systemd-logind - 我不知道这与 ConsoleKit 有何关系),从座位定义中删除设备,但我想不出一种方法来阻止只有一个特定的登录本地用户访问设备,而其他本地登录用户可以访问设备。

相关内容