환경: 저는 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-attach
chcon -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/dash
sda3
unconfined_u:object_r:unlabeled_t:s0
ls -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