SELinux를 사용하여 여러 컨테이너 간에 호스트 디렉터리 공유

SELinux를 사용하여 여러 컨테이너 간에 호스트 디렉터리 공유

도커 컨테이너와 호스트 디렉터리를 공유하는 것은 일반적으로 간단합니다.

$ docker create -v /path/to/hostdir:/path/inside/container --name conta ...

SELinux가 관련되면 상황이 더 복잡해집니다. 예를 들어 SELinux는 SELinux를 실행하는 동일한 도커 호스트(Fedora 23이기도 함)에서 Fedora 23 컨테이너를 실행합니다.

이 경우에는 분명히 docker에게 레이블을 다시 지정하도록 지시해야 합니다.

$ docker create -v /path/to/hostdir:/path/inside/container:Z --name conta ...

접미사가 없으면 :Z공유 호스트 디렉터리에서 파일을 읽거나 쓰려고 할 때 권한 거부 오류가 발생합니다. 모든 것이 :Z예상대로 작동합니다.

:Z그러나 호스트 디렉터리를 공유해야 하는 경우 메서드는 실패합니다.많은 종류의(SELinux 강제) 동시 컨테이너:

$ docker create -v /path/to/hostdir:/path/inside/container:Z --name conta ...
$ docker create -v /path/to/hostdir:/path/inside/container:Z --name contb ...

두 번째 명령 이후 "contb"는 호스트 디렉터리에 액세스할 수 있지만 "conta"는 더 이상 호스트 디렉터리에 액세스할 수 없습니다(권한 거부 오류).

docker의 두 번째 태그 다시 지정이 첫 번째 태그를 무효화하는 것 같습니다.

SELinux 시스템에서 이 문제를 해결하는 방법은 무엇입니까?

답변1

지금은 도커를 사용하지 않기 때문에 도움이 될지 확실하지 않지만 이러한 기술에 매우 가깝습니다.

가지다좋은 기사Dan Walsh는 명령 간의 차이점 :Z과 명령 내의 차이점을 설명합니다 .:zdocker

TL;DR, 첫 번째( :Z)는 다중 범주 보안(MCS) 레이블을 사용하는 것입니다. 이는 서로 다른 컨테이너에 대해 서로 다른 범주로 동일한 레이블을 만듭니다.

두 번째 항목( :z)은 모든 컨테이너에 대해 동일한 레이블로 디렉터리에 레이블을 지정하며 동시에 경로에 액세스할 수 있어야 합니다.

그래도 도움이 되지 않으면 docker에서 얻은 AVC를 제공하세요. 그렇지 않으면 추측과 같습니다.

관련 정보