![如何将两个上下文分配给文件夹/文件以授予两个进程(snapper 和 samba)权限?](https://linux22.com/image/213847/%E5%A6%82%E4%BD%95%E5%B0%86%E4%B8%A4%E4%B8%AA%E4%B8%8A%E4%B8%8B%E6%96%87%E5%88%86%E9%85%8D%E7%BB%99%E6%96%87%E4%BB%B6%E5%A4%B9%2F%E6%96%87%E4%BB%B6%E4%BB%A5%E6%8E%88%E4%BA%88%E4%B8%A4%E4%B8%AA%E8%BF%9B%E7%A8%8B%EF%BC%88snapper%20%E5%92%8C%20samba%EF%BC%89%E6%9D%83%E9%99%90%EF%BC%9F.png)
我喜欢拍摄 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 重新标记后继续存在。