(Fedora) SELinux에서 자동으로 시작된 LXC 컨테이너에 연결할 수 없습니다.

(Fedora) SELinux에서 자동으로 시작된 LXC 컨테이너에 연결할 수 없습니다.

환경: 저는 LXC(2.0.6) 컨테이너와 SELinux가 활성화된 Fedora 24를 실행하고 있습니다.

질문lxc-attach: Linux 컨테이너를 설정하고 시작하는 것은 LXC의 자동 시작 기능( lxc.start.auto = 1구성 파일에서)으로 시작된 것을 제외하고는 모두 괜찮으며 컨테이너에 연결해도 마찬가지입니다.

연결할 수 없는 자동 시작 컨테이너의 경우 다시 lxc-stop연결한 lxc-start다음 lxc-attach컨테이너에 직접 연결할 수 있습니다.

내가 시도한 것:제안된 해결 방법을 확인했습니다.오류 보고서여기에는 dnf 컨테이너-selinux 확장 설치와 올바른 레이블( )을 include 에 container_runtime_exec_t추가하는 작업이 포함됩니다 . 가능한 해결 방법도 제안되었지만 아직 루트 파일 시스템의 기본 폴더 컨텍스트에 레이블을 추가하지 않았습니다. 모든 컨테이너의 ( )./usr/bin/lxc-*lxc-attachchcon -Rt container_var_lib_t /var/lib/lxc

산출: 수동으로 시작한 컨테이너에는 문제없이 ( )을 붙일 수 있는데 lxc-attach -n name_of_container, 시스템 시작 시 자동으로 시작되는 컨테이너에 붙이려고 하면 아래와 같이 터미널에 메시지가 뜹니다.

lxc-attach: attach.c: lxc_attach_run_shell: 1325 Permission denied - failed to exec shell

/var/log/audit/audit.log파일 에서 다음과 같은 메시지가 나타납니다.

type=AVC msg=audit(1484836169.882:2969): avc:  denied  { entrypoint } for  pid=7867 comm="lxc-attach" path="/bin/dash" dev="sda3" ino=10289 scontext=system_u:system_r:unconfined_service_t:s0 tcontext=unconfined_u:object_r:unlabeled_t:s0 tclass=file permissive=0

컨테이너를 실행하는 프로세스의 레이블( )을 찾으면 다음과 같은 결과를 ps -eZ | grep lxc얻습니다.

system_u:system_r:unconfined_service_t:s0 2794 ? 00:00:00 lxc-autostart

자동으로 시작된 컨테이너의 경우 다음을 사용합니다.

unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 6399 ? 00:00:00 lxc-start

수동으로 시작된 컨테이너의 경우.

내 질문:저는 SELinux를 처음 접했지만 위의 출력에서 ​​시스템 시작 후 컨테이너가 실행 중인 컨텍스트가 lxc-attach내가 실행 중인 컨텍스트와 매우 다르다는 것을 알 수 있습니다(이전 컨텍스트는 scontext=system_u:...현재 컨텍스트가 시작되는 동안 시작되었습니다). tcontext=unconfined_u:...위의 감사 에서 .log).

그렇기 때문에 누군가에게 설명을 요청해야 했습니다. 어떤 불일치로 인해 이 권한이 거부됩니까? 그리고: 이 문제를 고칠 수 있을까요?

답변1

이 사건 당시 귀하는 /bin/dash잘못된 selinux 컨텍스트와 연결되었거나 전혀 연결되지 않은 것 같습니다.

여기서 lxc-attach는 쉘을 실행할 수 없다고 불평합니다:

lxc-attach: attach.c: lxc_attach_run_shell: 1325 Permission denied - failed to exec shell

SELinux avc의 거부는 위의 내용을 확인하는 것 같습니다.

type=AVC msg=audit(1484836169.882:2969): avc:  denied  { entrypoint } for  pid=7867 comm="lxc-attach" path="/bin/dash" dev="sda3" ino=10289 scontext=system_u:system_r:unconfined_service_t:s0 tcontext=unconfined_u:object_r:unlabeled_t:s0 tclass=file permissive=0

위 사건에서 주목해야 할 몇 가지 사항이 있습니다.

대상 파일( ) 은 SELinux가 장애 조치 시나리오에 사용하는 특수 컨텍스트( ) path="/bin/dash"로 끝납니다 . tcontext=unconfined_u:object_r:unlabeled_t:s0이벤트 중에서 /bin/dash장치의 inode 10289에 있는 이벤트는 sda3잘못된 컨텍스트와 연결되어 있거나 컨텍스트가 전혀 없습니다.

장치의 inode 10289에서 컨텍스트를 시도해 보십시오 restorecon -RvF. 완료되면 컨텍스트가 다음이 아닌 다른 것으로 재설정되었는지 확인하세요./bin/dashsda3unconfined_u:object_r:unlabeled_t:s0ls -alZ

답변2

이것은 나에게 효과적입니다.

ausearch -c 'lxc-attach' --raw | audit2allow -M my-lxcattach

semodule -i my-lxcattach.pp
# or 
semodule -X 300 -i my-lxcattach.pp

여기에서 추출됨:https://bugzilla.redhat.com/show_bug.cgi?id=1405921

관련 정보