Samba と Podman が同じディレクトリで rw できるようにする

Samba と Podman が同じディレクトリで rw できるようにする

私は SElinux を初めて使うので、使い方がよくわかりません。samba 共有 (すでに構成済みで動作中) を使用して Fedora Server を実行し、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)。たとえば、次を使用します: ( rw でpodman exec -it $CONTAINER ls -l /downloadsマウント)。/srv/downloads:/downloads

SElinux でサーバーを実行したいのですが、両方のプロセスが同じディレクトリを使用できるようにするには、何を構成する必要がありますか?

答え1

SELinuxを初めて使う人のために、理解するのに役立つツールが他にもたくさんあります。私は先週、これを見つけました。出発点としては、ここ主に、audit2why とaudit2allow を使用したaudit.logです。setenforce を 0 に設定し、audit.log に対して cp /dev/null を実行し、失敗したコマンド (Permissive モードでは成功しますが、監査ログには記録されます) を実行し、ログを保存して、上記のリンクのように分析します。このプロセスを過去数日間使用して、python サブプロセスを実行する flask/apache api のカスタム ポリシーを作成しました。したがって、具体的な回答ではありませんが、このプロセスにより、私と同じように解決策にたどり着くことができます。

答え2

この問題はフラグを有効にすることで解決しましたsetsebool -P virt_use_samba。これにより、仮想化されたインスタンス (およびコンテナー) がマウントされたドライブにアクセスできるようになるようです。

古い質問ですが、この回答はインターネット上の 1 か所で見つけたので、より多くの問題が解決する可能性があるため、広めていただけると幸いです。

関連情報