SELinuxラベルを再指定した後、PodmanでPodを実行しようとすると失敗します。
$ podman run -ti alpine
Error relocating /lib/ld-musl-x86_64.so.1: RELRO protection failed: No error information
Error relocating /bin/sh: RELRO protection failed: No error information
コンテンツを別の場所に移動した場合は、~/.local/share/containers
そこにリンクしてください。
$ ls -l ~/.local/share/containers
lrwxrwxrwx. 1 asdf asdf 32 Oct 13 2022 /home/asdf/.local/share/containers -> /x/y/z/containers/
監査ログにはAVC警告が記録されます。
答え1
根本原因
SELinuxのsemanage fcontext
データベースは物理パスを処理します[1]。別の場所に移動し~/.local/share/containers
(私の場合はディスク容量を管理するために)リンクを作成すると、実行restorecon
時に実際の場所に対応するラベルにリセットされます(最も可能ですdefault_t
)。
[2] を使って次のことを確認できます。
ls -Z ~/.local/share/containers/storage/overlay{,-images,-layers} | less
これらのファイルのSELinuxコンテキストは、以下を使用して元のルールを表示できますcontainer_ro_file_t
。semanage fcontext
# semanage fcontext -l | grep container | grep storage
/home/[^/]+/\.local/share/containers/storage/overlay(/.*)? all files unconfined_u:object_r:container_ro_file_t:s0
/home/[^/]+/\.local/share/containers/storage/overlay-images(/.*)? all files unconfined_u:object_r:container_ro_file_t:s0
/home/[^/]+/\.local/share/containers/storage/overlay-layers(/.*)? all files unconfined_u:object_r:container_ro_file_t:s0
/home/[^/]+/\.local/share/containers/storage/overlay2(/.*)? all files unconfined_u:object_r:container_ro_file_t:s0
/home/[^/]+/\.local/share/containers/storage/overlay2-images(/.*)? all files unconfined_u:object_r:container_ro_file_t:s0
/home/[^/]+/\.local/share/containers/storage/overlay2-layers(/.*)? all files unconfined_u:object_r:container_ro_file_t:s0
/home/[^/]+/\.local/share/containers/storage/volumes/[^/]*/.* all files unconfined_u:object_r:container_file_t:s0
固定する
各ルールをコピーして環境に合わせて調整する必要があります。たとえば、上記の最初の行は次のようになります。
semanage fcontext -a -t container_ro_file_t '/x/y/z/containers/storage/overlay(/.*)?'
もちろん、/x/y/z
環境の場所を置き換えて、元のルールごとにコマンドを実行してください。私のルールとは異なる可能性があるため、システムの元のルールを情報ソースとして使用する必要があります。
このvolumes
行は他の行と少し異なります。
すべてのルールが適用されたら、次を実行しますrestorecon
。
restorecon -Rv /x/y/z/containers/
これが最善か最も正確なアプローチであるかはわかりません。サポートされていない可能性があります。しかし、とにかく当初、そのリンクを作成するのはすでに逸脱です。それは私に効果的です:)
引用する
答え2
公開された回答(caxcaxcoatl提供)は正しいです。
より簡単な解決策を見つけました。
for item in $(ls -Z ~/.local/share/containers/storage/overlay{,-images,-layers} | grep home | sed 's/://g')
do
sudo restorecon -Rv ${item}
done