후크와 메모리 조작을 통해 프로그램의 동작을 변경하는 .so 파일을 로드하는 Docker 컨테이너 내에서 실행되는 프로그램이 있습니다. SELinux는 이 동작을 차단하고 감사 로그에 다음 메시지를 표시합니다.
type=AVC msg=audit(1548166862.066:2419): avc: pid=11171 comm="myProgram" scontext=system_u:system_r:container_t:s0:c426,c629 tcontext=system_u:system_r:container_t:s0에 대해 { execheap } 거부됨: c426, c629 tclass=프로세스 권한=0
audit2allow
나는 이 특정 동작을 다른 곳에서 허용하고 싶지 않기 때문에(매우 위험할 수 있으므로) 이 작업을 수행하는 것을 매우 주저합니다 .
- 가능한 가장 안전한 방법으로 이러한 특정 동작을 허용하도록 SELinux에 어떻게 지시합니까?
- 나중에 동일한 프로그램을 실행하는 더 많은 Docker 컨테이너를 생성할 수 있는 방식으로 이를 수행할 수 있습니까?
답변1
audit2allow
execheap
유형 처리를 허용하는 규칙이 생성될 수 있습니다 container_t
. 언제든지 모듈을 먼저 생성하고 로드하기 전에 검사할 수 있습니다.
한 가지 가능한 문제는 이제 container_t
유형이 있는 모든 프로세스가 동일한 작업을 수행할 수 있다는 것입니다. 이를 방지하려면 고유한 사용자 정의 유형( container_t
템플릿 으로 사용)을 만들고 execheap
이 특수 유형만 허용할 수 있습니다.
이 블로그 게시물작성자: Dan Walsh가 이러한 사용자 지정 정책을 작성하는 방법을 설명합니다. 이를 결합하여 audit2allow
실제 규칙을 생성할 수도 있습니다. 기본 단계는 다음과 같습니다.
다음과 같은 기본 컨테이너 정책을 만듭니다
container_execheap
.policy_module(container_execheap, 1.0) virt_sandbox_domain_template(container_execheap_t)
virt_sandbox_domain_template
매크로는 새 유형을 생성container_execheap_t
하고 새 유형을 컨테이너 도메인으로 사용할 수 있도록 Docker 작업에 필요한 규칙을 생성합니다.정책 모듈을 컴파일하고 로드합니다(makefile을 포함하여 필요한 개발 파일은
selinux-policy-devel
패키지에서 제공되어야 함).make -f /usr/selinux/devel/Makefile container_execheap.pp semodule -i container_execheap.pp
새로운 유형을 권한 도메인으로 구성할 수 있습니다.
semanage permissive -a container_execheap_t
허용 도메인의 경우 AVC 거부가 기록되지만 규칙도 기록됩니다.아니요시행. 이렇게 하면 나중에 생성된 누락 규칙을 쉽게 사용할 수 있습니다
audit2allow
.다음과 같은 새로운 컨텍스트에서 컨테이너를 실행하세요.
docker run ... --security-opt label:type:container_execheap_t ...
예상되는 오류를 생성합니다. 그런 다음 실행
audit2allow
하여 이러한 작업을 허용하는 규칙을 생성합니다container_execheap_t
. 동일한 모듈.te
파일을 새 규칙으로 업데이트할 수 있습니다(버전 번호를 증가시키는 것을 기억하세요). 업데이트된 모듈을 컴파일하고 설치합니다.더 이상 오류가 생성되지 않으면 사용자 정의 컨테이너 유형을 다시 시행 모드로 전환합니다
semanage -d container_execheap
.