我有一些测试来验证程序在磁盘空间不足的情况下的行为。以前,我曾经dd
创建一个小文件,然后mkfs
在其上创建一个文件系统,然后将sudo losetup
其作为环回设备安装,然后运行我的测试(注意,/dev/full
这里不合适:测试在一个目录,并且需要以空格开头,然后用完)。
但现在我正在进入 CI/CD 环境,在该环境中我没有任何sudo
访问权限来运行测试的帐户,因此我需要一个替代方案。
我发现udisksctl
它loop-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-setup
和loop-free
子命令udisksctl
,而filesystem-mount
允许您运行mount
和unmount
。
然后我做了:
usermod -aG disk someuser
systemctl restart polkit.service
现在,当someuser
运行时udisksctl loop-setup -f my-iso.iso
,它无需输入密码即可工作。我通过 SSH 完成所有这些工作。
这是在 Ubuntu 20.04 上进行的,因此其他发行版的具体步骤可能有所不同。
致谢:这位超级用户的回答对于解决如何执行上述操作非常有帮助。