允许 udisksctl 循环设置,无需对特定用户进行身份验证

允许 udisksctl 循环设置,无需对特定用户进行身份验证

我有一些测试来验证程序在磁盘空间不足的情况下的行为。以前,我曾经dd创建一个小文件,然后mkfs在其上创建一个文件系统,然后将sudo losetup其作为环回设备安装,然后运行我的测试(注意,/dev/full这里不合适:测试在一个目录,并且需要以空格开头,然后用完)。

但现在我正在进入 CI/CD 环境,在该环境中我没有任何sudo访问权限来运行测试的帐户,因此我需要一个替代方案。

我发现udisksctlloop-setup在我的系统上运行得很好,但是当我在 CI/CD 系统上运行它时,我仍然遇到授权错误:仔细阅读它需要用户登录,因此远程服务似乎不够。

虽然我无法获得完整的 sudo 访问权限,但我可能可以安装 polkit 异常以允许此帐户管理环回设备。我看到了/usr/share/polkit-1/actions/org.freedesktop.UDisks2.policy有关管理环回的各个部分,并且我已经阅读了许多SO问题,这些问题只是说编辑此文件并允许any,这可能不太好。

我无法弄清楚在这里要做什么,是否有某种方法可以将新文件添加到/etc/polkit-1/localuthority某个地方,例如,这将允许我指定特定用户可以管理环回设备sudo,而无需登录会话(即将到来)例如,通过 SSH,或者在本例中,从systemd具有User=设置的服务调用)?

或者这种测试这种情况的方法是否太复杂,人们会推荐其他更简单的方法?

答案1

首先我创建了一个包含以下内容的文件/etc/polkit-1/localauthority/50-local.d/55-storage.pkla

[Storage Permissions]
Identity=unix-group:disk
Action=org.freedesktop.udisks2.loop-setup;org.freedesktop.udisks2.filesystem-mount
ResultAny=yes

请注意,上面loop-setup允许您使用的loop-setuploop-free子命令udisksctl,而filesystem-mount允许您运行mountunmount

然后我做了:

usermod -aG disk someuser
systemctl restart polkit.service

现在,当someuser运行时udisksctl loop-setup -f my-iso.iso,它无需输入密码即可工作。我通过 SSH 完成所有这些工作。

这是在 Ubuntu 20.04 上进行的,因此其他发行版的具体步骤可能有所不同。

致谢这位超级用户的回答对于解决如何执行上述操作非常有帮助。

相关内容