Docker/Podman Selinux Udica - ルートレスコンテナは、マップされたエントリポイントスクリプトからマウント/実行できません。

Docker/Podman Selinux Udica - ルートレスコンテナは、マップされたエントリポイントスクリプトからマウント/実行できません。

私は私のサーバーユーザーのルートレスdockercontainerとしてsteamcmdを使用したいと思います。ただし、steamcmdは通常/opt/steam/steamcmd/steamcmd.shの下に通常のユーザーとしてインストールする必要があります。

私はsteamcmd arksを使ってdocker / podmanコンテナを実行し、呼び出し元のユーザーIDを環境に渡すカスタムsteamcmd.shを作成しました。

デフォルトのエントリポイントスクリプトを/opt/steam/steamcmd/steamcmd.docker.sh(steamuser)というカスタムエントリポイントスクリプトに置き換えました。

コンテナをrootとして実行すると、すべてがうまく機能しますが、サーバーユーザーを使用しようとすると、「エラー:エラーステータスファイル:権限が拒否され/opt/steam/steamcmd/steamcmd.docker.shました:OCI権限が拒否されました」と表示されます。

私のselinuxはホストシステムで快適な状態にあります。だからログを確認してみると、次のようなメッセージが出ました。

Mai 06 02:13:48 host setroubleshoot[81420]: SELinux is preventing steamcmd.replace from read access on the file steamcmd.docker.sh.
                                                      If you believe that steamcmd.replac should be allowed read access on the steamcmd.docker.sh file by default.
                                                      # ausearch -c 'steamcmd.replace' --raw | audit2allow -M my-steamcmdreplace
                                                      # semodule -X 300 -i my-steamcmdreplace.pp

ファイルを作成しましたが、次のように表示されます。

module my-steamcmdreplace 1.0;

require {
    type container_t;
    type etc_t;
    class file entrypoint;
}

#============= container_t ==============
allow container_t etc_t:file entrypoint;

2番目のselinuxメッセージは次のとおりです。

Mai 05 01:30:29 host setroubleshoot[3763945]: SELinux is preventing /bin/dash from entrypoint access on the file /usr/bin/steamcmd.replace.
                                                        If you believe that dash should be allowed entrypoint access on the steamcmd.replace file by default.

モジュールを追加しましたが、何も変更されませんでした。そのため、udicaを使用してコンテナポリシーを作成しようとしました。ただし、実行中のコンテナでのみ機能するため、ルートで実行されているコンテナを使用しました。

次の内容で、udica生成モジュールにルールを手動で追加しました。

(block steamcmd
    (blockinherit container)
    (allow process process ( capability ( chown dac_override fowner fsetid kill net_bind_service setfcap setgid setpcap setuid sys_chroot ))) 

    (allow process usr_t ( dir ( getattr ioctl lock open read search ))) 
    (allow process usr_t ( file ( getattr ioctl lock open read ))) 
    (allow process usr_t ( sock_file ( getattr open read ))) 
    (allow process usr_t ( dir ( add_name create getattr ioctl lock open read remove_name rmdir search setattr write ))) 
    (allow process usr_t ( file ( append create getattr ioctl lock map open read rename setattr unlink write ))) 
    (allow process usr_t ( sock_file ( append getattr open read write ))) 
    (allow container_t etc_t (file (entrypoint)))
)

serveruserでコンテナを実行するコマンドは次のとおりです。

podman run --network=host --dns 8.8.8.8 --security-opt label=type:steamcmd.process -t --rm --entrypoint 'steamcmd.replace' --name steamcmd -v /opt/steam/steamcmd/steamcmd.docker.sh:/usr/bin/steamcmd.replace:z -v .:/data docker.io/steamcmd/steamcmd:latest +force_install_dir /data validate

その理由は何ですか?

関連情報