如何使 /run/media/* 上的 ACL 设置持久化?

cl-*_*box 5 fedora acl qemu virt-manager libvirt

我在 Fedora 25 Workstation 主机上以访客身份运行各种虚拟机。我将虚拟磁盘(以及所有其他个人资料)存储在第二个内置磁盘的不同独立分区上。virt-managerqemu用户身份运行虚拟机,为了引导磁盘,我需要执行:

sudo setfacl -R -m u:qemu:rwx /run/media/cl
Run Code Online (Sandbox Code Playgroud)

这让qemu用户可以使用这些虚拟磁盘来引导 VM。但是,如果我重新启动主机系统,ACL 设置将丢失,我必须再次运行该命令。当我使用 Ubuntu 系统作为主机时,该命令只需要运行一次,并且权限更改在后续重新启动后仍然有效。

如何让基于 Red Hat 的系统像 Ubuntu 一样在重新启动后记住修改后的 ACL 设置?

Q23*_*Q23 5

这是一个 hack,但您可以编写一个快速systemd服务来在启动时运行它,也许在/etc/systemd/system/set-qemu-acl.service.

[Unit]
 Description=QEMU ACL Hack
 Requires=local-fs.target
 After=local-fs.target

[Service]
 ExecStart=/usr/bin/setfacl -R -m u:qemu:rwx /run/media/cl

[Install]
 WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

然后,只需启用它。

sudo systemctl enable set-qemu-acl.service

您也可以在系统cron表中添加一行。

* * * * * root /usr/bin/getfacl /run/media/cl | grep 'user:qemu:rwx' || /usr/bin/setfacl -R -m u:qemu:rwx /run/media/cl

或者由于您是手动安装,包装脚本可以为您完成,也许/usr/local/bin/mount-acl.

#!/bin/sh
mount $1 $2
setfacl -R -m u:qemu:rwx $2
Run Code Online (Sandbox Code Playgroud)

然后,就sudo mount-acl /dev/partition /run/media/wherever可以带你去你想去的地方,不是吗?