Samba

SELinux 創建自定義角色

  • October 30, 2017

我有一個通過 Samba 共享的文件夾和一個 Docker 容器,我想通過將其作為卷添加到 Docker 容器中來訪問該文件夾(是的,我知道這不是可移植的)。

SELinux 阻止容器訪問該文件夾,因為該文件夾及其內容被標記為samba_share_t,而不是svirt_sandbox_file_t

我知道 smbd_t 域可以訪問許多 SELinux 標籤(例如httpd_sys_content_t,雖然sesearch -s smbd_t --allow提供了完整列表),但svirt_sandbox_file_t不是其中之一。

我看到了解決這個問題的幾種方法:

  • 通過網路從容器訪問 samba 共享(不可取,因為這需要在容器中安裝 samba,並且存在網路成本)
  • 將文件夾及其內容重新標記為svirt_sandbox_file_t(這會阻止 Samba 訪問該文件夾)
  • 將文件夾及其內容重新標記為public_content_rw_t(但這也可以訪問我不想訪問此文件夾的許多其他服務)
  • 創建一個策略以授予svirt_lxc_net_tsamba_share_t標籤的訪問權限(由 audit2allow 生成,但允許任何容器訪問標記為 samba_share_t 的任何文件/文件夾)

我能想到的另一個選擇是創建我自己的 SELinux 角色,它有自己的標籤,只允許訪問 Samba 和 svirt(我以前沒有做過,但願意嘗試)。

我在這裡錯過了什麼嗎?有沒有更簡單的方法來做到這一點?

我會去添加規則以允許 samba 寫入 svirt_sandbox_file_t 的路線。由於您希望允許 samba 將內容上傳到容器。samba 是否只需要讀取內容,然後只需添加允許規則即可。

您應該能夠設置適當的 SELinux 布爾值,virt_sandbox_use_samba.

setsebool -P virt_sandbox_use_samba 1

引用自:https://serverfault.com/questions/751589