允許 Samba 和 Podman 在同一目錄上讀寫

允許 Samba 和 Podman 在同一目錄上讀寫

我是 SElinux 的新手,所以我不太了解如何使用它。我想使用 samba 共享(已配置並工作)運行 Fedora 伺服器並配置 podman 容器,掛載相同的目錄。但是當SElinux開啟時,容器無法存取掛載的目錄。關閉 SElinux ( setenforce 0) 可以「解決」這個問題。

所以目前我已經嘗試public_content_rw_t在該目錄上使用,但仍然不起作用。

# first try
$ semanage fcontext -a -t samba_share_t "/srv/downloads(/.*)?"
$ restorecon -Rv /srv/downloads

# second try
$ semanage fcontext -m -t public_content_rw_t "/srv/downloads(/.*)?"
$ restorecon -Rv /srv/downloads

在這兩種情況下,podman 容器都無法存取相同目錄。 SElinux 正在阻止它(日誌:)setroubleshoot[1232603]: SELinux is preventing java from write access on the directory /srv/downloads。例如使用:(使用 rwpodman exec -it $CONTAINER ls -l /downloads安裝/srv/downloads:/downloads)。

我想用 SElinux 運行我的伺服器。我需要配置什麼才能使兩個進程都能夠使用同一目錄?

答案1

由於剛接觸 SELinux,有更多工具可以幫助您解決這個問題,這是我上週剛發現的。一個起點是這裡。主要是audit.log和audit2why和audit2allow。我將enforce 設為0,通過audit.log cp /dev/null,運行失敗的命令(在許可模式下成功,但仍記錄在審核日誌中),然後保存日誌並按上面的連結進行分析。在過去的幾天裡,我使用這個過程為運行 python 子進程的 Flask/apache api 創建自訂策略。所以不是一個具體的答案,但這個過程應該能讓你找到一個解決方案,就像我一樣。

答案2

我們透過啟用該setsebool -P virt_use_samba標誌解決了這個問題。這似乎允許虛擬化實例(..和容器..)存取已安裝的磁碟機。

老問題,但我在互聯網上的一個位置找到了這個答案,最好將其傳播出去,以防它解決更多問題。

相關內容