我有一个通过Samba共享的文件夹和一个Docker容器,我想通过将它作为一个卷添加到Docker容器(是的,我知道这是不可移植的)来访问所述文件夹。
SELinux阻止容器访问该文件夹,因为该文件夹及其内容被标记为samba_share_t ,而不是svirt_sandbox_file_t
我知道smbd_t域可以访问一些SELinux标签(例如httpd_sys_content_t ,尽pipesesearch -s smbd_t --allow提供了一个完整的列表),但是svirt_sandbox_file_t不是其中的一个。
我看到了一些解决这个问题的方法:
通过networking访问容器中的samba共享(不需要在容器中安装samba,并且存在networking开销)
将文件夹及其内容svirt_sandbox_file_t为svirt_sandbox_file_t (防止Samba访问文件夹)
将该文件夹及其内容重新标记为public_content_rw_t (但也允许访问许多其他服务,我不想访问此文件夹)
创build一个策略,使svirt_lxc_net_t可以访问samba_share_t标签(由audit2allow生成,但可以让任何容器访问标记为samba_share_t的任何文件/文件夹)
我能想到的另一个select是用自己的标签创build自己的SELinuxangular色,只允许访问Samba和svirt(我以前没做过,但愿意尝试)。
我在这里错过了什么? 有没有更简单的方法来做到这一点?
我会去添加规则允许桑巴写入svirt_sandbox_file_t的路线。 既然你想让桑巴被允许上传内容到容器。 桑巴只需要读取内容,然后添加允许规则来实现这一点。
你应该能够设置合适的SELinux boolean, virt_sandbox_use_samba 。
setsebool -P virt_sandbox_use_samba 1
如果有人遇到同样的问题,我select了一个替代解决scheme,即允许smbd_t访问标有svirt_sandbox_file_t东西。 这是CentOS 7系统中samba_share_t的1:1拷贝。
# cat >samba_docker_policy.te<<EOF module samba_docker_policy 1.0; require { type smbd_t; type svirt_sandbox_file_t; class dir { ioctl read write create getattr setattr lock unlink link rename add_name remove_name reparent search rmdir open }; class lnk_file { ioctl read write create getattr setattr lock append unlink link rename }; class file { ioctl read write create getattr setattr lock append unlink link rename open }; class filesystem { getattr quotaget }; class fifo_file { ioctl read write create getattr setattr lock append unlink link rename open }; class sock_file { ioctl read write create getattr setattr lock append unlink link rename open }; } #============= svirt_sandbox_file_t ============== allow smbd_t svirt_sandbox_file_t : dir { ioctl read write create getattr setattr lock unlink link rename add_name remove_name reparent search rmdir open } ; allow smbd_t svirt_sandbox_file_t : lnk_file { ioctl read write create getattr setattr lock append unlink link rename } ; allow smbd_t svirt_sandbox_file_t : file { ioctl read write create getattr setattr lock append unlink link rename open } ; allow smbd_t svirt_sandbox_file_t : filesystem { getattr quotaget } ; allow smbd_t svirt_sandbox_file_t : fifo_file { ioctl read write create getattr setattr lock append unlink link rename open } ; allow smbd_t svirt_sandbox_file_t : sock_file { ioctl read write create getattr setattr lock append unlink link rename open } ; EOF # checkmodule -M -m -o samba_docker_policy.mod samba_docker_policy.te # semodule_package -o samba_docker_policy.pp -m samba_docker_policy.mod # semodule -i samba_docker_policy.pp