使用 setreuid() 和 setgid() 的应用程序中无法播放音频,但使用 sudo -u 命令可以播放音频

使用 setreuid() 和 setgid() 的应用程序中无法播放音频,但使用 sudo -u 命令可以播放音频

我有一个 Arch Linux 系统,其中配置了 alsa 和 pulseaudio。alsa 设置为使用 pulseaudio 默认设备。Pulseaudio 正在运行,在 127.0.0.1 上启用了 tcp 模块,并将 anonymous 设置为 true。系统有 2 个用户 user1(标准用户)和 user2(标准用户)。我已尝试过这speakertest两个用户,这两个用户都可以访问扬声器。

我有一个命令行音频播放器,在 user1 上运行良好。我编写了一个wrapper程序,它对 user2 执行setreuid()setregid(),然后exec()使用音频播放器播放音频文件。我wrapper为二进制文件提供了SUIDSGID权限sudo chmod 6555 wrapper

当我以用户 1 的身份正常运行音频播放器(不使用包装程序)时,我可以听到来自扬声器的音频。当我使用sudo -u user2 audioplay <file>用户 1 的 shell 正常运行音频播放器时,它也能正常工作。

然而,当我使用 user1 的 shell 中的包装器时wrapper <file>,扬声器中没有声音。包装器 exec() 播放器时出了什么问题?

令人惊讶的是,当我尝试时sudo -u user2 wrapper <file>,我能够再次听到音频......

相关内容