如何将两个上下文分配给文件夹/文件以授予两个进程(snapper 和 samba)权限?

如何将两个上下文分配给文件夹/文件以授予两个进程(snapper 和 samba)权限?

我喜欢拍摄 Btrfs 子卷的快照(mysubvol使用snapper)并.snapshots使用 samba 共享目录。我可以将samba_share_t上下文分配给.snapshots,然后就可以使用 samba 浏览它 - 但随后我无法拍摄快照。或者,我可以分配snapperd_data_t上下文并拍摄快照,但 samba 无法共享该目录。

如何将两个上下文分配给.snapshots或创建一个允许两者的通用上下文?可能的解决方案有哪些?解决方案应该能够在使用 重新标记后继续存在 restorecon -R -v .snapshots

chcon -t snapperd_data_t .snapshots
la -Z
# drwxr-xr-x. 1 root  root  system_u:object_r:snapperd_data_t:s0      38 Nov 25 20:00 .snapshots
# drwx------. 1 someuser someuser unconfined_u:object_r:samba_share_t:s0   298 Nov 24 15:33 mydata
snapper -c samba_share create # works
# new snapshot is created, but .snapshots is not browsable with samba...

chcon -t samba_share_t /home/samba/.snapshots/
la -Z 
# drwxr-xr-x. 1 root  root  system_u:object_r:samba_share_t:s0        42 Nov 25 20:45 .snapshots
# drwx------. 1 someuser someuser unconfined_u:object_r:samba_share_t:s0   298 Nov 24 15:33 mydata
snapper -c samba-timeline create 
# IO Error (mkdir failed errno:13 (Permission denied)).
# but .snapshots is browsable with samba
sudo ausearch -m avc -ts recent
# time->Fri Nov 25 20:47:57 2022
# type=AVC msg=audit(1669409277.513:2728): avc:  denied  { create } for  pid=9114 comm="snapperd" name="16" scontext=system_u:system_r:snapperd_t:s0 tcontext=system_u:object_r:samba_share_t:s0 tclass=dir permissive=0

我怎样才能同时拥有两者,既能够拍摄快照又能够使用 samba(并且 SELinux 处于活动状态)进行访问?

答案1

一种可能的解决方案是创建一个自定义类型,例如 samba_snapperd_data_t,它结合了 samba_share_t 和 snapperd_data_t 上下文。然后,您可以将该自定义类型分配给 .snapshots 目录,并且 samba 和 snapper 都可以访问它。该解决方案应该可以在使用restorecon -R -v .snapshots 重新标记后继续存在。

相关内容