我喜欢拍摄 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 重新标记后继续存在。