![SELinux를 사용하여 여러 컨테이너 간에 호스트 디렉터리 공유](https://linux55.com/image/85911/SELinux%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%97%AC%EB%9F%AC%20%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%20%EA%B0%84%EC%97%90%20%ED%98%B8%EC%8A%A4%ED%8A%B8%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%20%EA%B3%B5%EC%9C%A0.png)
도커 컨테이너와 호스트 디렉터리를 공유하는 것은 일반적으로 간단합니다.
$ 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
과 명령 내의 차이점을 설명합니다 .:z
docker
TL;DR, 첫 번째( :Z
)는 다중 범주 보안(MCS) 레이블을 사용하는 것입니다. 이는 서로 다른 컨테이너에 대해 서로 다른 범주로 동일한 레이블을 만듭니다.
두 번째 항목( :z
)은 모든 컨테이너에 대해 동일한 레이블로 디렉터리에 레이블을 지정하며 동시에 경로에 액세스할 수 있어야 합니다.
그래도 도움이 되지 않으면 docker에서 얻은 AVC를 제공하세요. 그렇지 않으면 추측과 같습니다.