SELinux에서 runc를 컨테이너_t로 변환하는 방법은 무엇입니까?

SELinux에서 runc를 컨테이너_t로 변환하는 방법은 무엇입니까?

나는 언급하고있다이 페이지Fedora 36에서 다음의 간단한 지침을 따르십시오.

docker pull aflplusplus/aflplusplus:
docker run -ti -v /location/of/your/target:/src aflplusplus/aflplusplus

그러나 다음과 같은 SELinux 오류가 발생합니다.

SELinux is preventing runc:[2:INIT] from using the transition access on a process.

*****  Plugin catchall (100. confidence) suggests   **************************

If you believe that runc:[2:INIT] should be allowed transition access on processes labeled container_t by default.
Then you should report this as a bug.
You can generate a local policy module to allow this access.
Do
allow this access for now by executing:
# ausearch -c 'runc:[2:INIT]' --raw | audit2allow -M my-runc2INIT
# semodule -X 300 -i my-runc2INIT.pp

Additional Information:
Source Context                system_u:system_r:unconfined_service_t:s0
Target Context                system_u:system_r:container_t:s0:c149,c848
Target Objects                /usr/bin/bash [ process ]
Source                        runc:[2:INIT]
Source Path                   runc:[2:INIT]
Port                          <Unknown>
Host                          localhost.localdomain
Source RPM Packages           
Target RPM Packages           bash-5.2.15-1.fc36.x86_64
SELinux Policy RPM            selinux-policy-targeted-36.17-1.fc36.noarch
Local Policy RPM              selinux-policy-targeted-36.17-1.fc36.noarch
Selinux Enabled               True
Policy Type                   targeted
Enforcing Mode                Enforcing
Host Name                     localhost.localdomain
Platform                      Linux localhost.localdomain 6.1.13-100.fc36.x86_64
                              #1 SMP PREEMPT_DYNAMIC Wed Feb 22 18:13:06 UTC
                              2023 x86_64 x86_64
Alert Count                   1
First Seen                    2023-07-23 01:36:16 PDT
Last Seen                     2023-07-23 01:36:16 PDT
Local ID                      c389e11d-1f68-4433-b24e-27b54adbb8a9

Raw Audit Messages
type=AVC msg=audit(1690101376.101:6745): avc:  denied  { transition } for  pid=2847426 comm="runc:[2:INIT]" path="/usr/bin/bash" dev="overlay" ino=2172597 scontext=system_u:system_r:unconfined_service_t:s0 tcontext=system_u:system_r:container_t:s0:c149,c848 tclass=process permissive=0


Hash: runc:[2:INIT],unconfined_service_t,container_t,process,transition

이것을 어떻게 허용합니까? 나는 다음을 시도했습니다 :

sudo semanage fcontext -a -t container_t "/usr/bin/runc"
sudo semanage fcontext -a -t container_t "/usr/bin/bash"

또한 오류 메시지에서 임시 수정을 시도했지만 실패했습니다.

Failed to resolve allow statement at /var/lib/selinux/targeted/tmp/modules/200/container/cil:1245
Failed to resolve AST
semodule:  Failed!

Semanage 명령도 실패하고 다음을 제공합니다.

ValueError: Type container_t is invalid, must be a file or device type

다음을 출력하는 명령을 실행했습니다 rpm -qa|grep selinux|sort.

container-selinux-2.199.0-1.fc36.noarch
flatpak-selinux-1.12.7-5.fc36.noarch
libselinux-3.3-4.fc36.x86_64
libselinux-devel-3.3-4.fc36.x86_64
libselinux-utils-3.3-4.fc36.x86_64
python3-libselinux-3.3-4.fc36.x86_64
rpm-plugin-selinux-4.17.1-3.fc36.x86_64
selinux-policy-36.17-1.fc36.noarch
selinux-policy-targeted-36.17-1.fc36.noarch
snapd-selinux-2.57.6-2.fc36.noarch
tpm2-abrmd-selinux-2.3.1-5.fc36.noarch

답변1

unconfined_service_t시스템에서는 에서 로의 변환을 허용하는 방법을 알려 주었습니다 container_t. 인용한 메시지의 다음 부분을 참조하세요.

Do allow this access for now by executing:
# ausearch -c 'runc:[2:INIT]' --raw | audit2allow -M my-runc2INIT
# semodule -X 300 -i my-runc2INIT.pp

시작 부분은 #명령이 루트로 실행되어야 함을 나타냅니다. 이는 명령의 일부가 아니며 단순히 루트 명령 프롬프트를 나타냅니다. 전체 줄을 명령으로 복사하여 붙여 넣으면 쉘은 이를 #주석 기호로 해석하고 아무 작업도 수행하지 않습니다.

첫 번째 명령은 ausearch -c 'runc:[2:INIT]' --raw | audit2allow -M my-runc2INIT감사 로그에서 정확한 이벤트를 찾아 이를 제공하여 SELinux 규칙 모듈( 파일) audit2allow을 생성합니다 .my-runc2INITmy-runc2INIT.pp

두 번째 명령은 규칙 모듈을 설치하고 적용합니다.

나중에 맞춤 규칙을 삭제하려면 semodule -r my-runc2INIT삭제해야 합니다.

관련 정보