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