Docker에서 크롬 : CAP_SYS_ADMIN 대 권한? [닫은]

내 테스트 환경에서 Docker 내에서 chromedriver + chrome을 실행하고 있습니다.

최신 CoreOS 업그레이드까지 모든 것이 잘 작동했습니다.

다음은 작동하는 것으로 보이는 버전입니다.

VERSION=1185.5.0
VERSION_ID=1185.5.0
BUILD_ID=2016-12-07-0937

그리고 이것은 크롬이 코어 덤프를 일으키는 최신 버전입니다.

VERSION=1235.4.0
VERSION_ID=1235.4.0
BUILD_ID=2017-01-04-0450

변경 사항을 살펴보면도 커가 1.11.x에서 1.12.x로 업그레이드 setns()되어 컨테이너 내부의 호출 이 끊어졌습니다 . setns()Chrome에서 네임 스페이스를 만드는 데 사용됩니다.

다음은 예제 출력입니다.

jsosic-coreos-test-20161207 ~ # docker --version
Docker version 1.11.2, build bac3bae

이 상자의 한 컨테이너 내부에서 :

[root@2939f21ecfaa /]# /opt/google/chrome/google-chrome
[57:57:0107/015130:ERROR:browser_main_loop.cc(261)] Gtk: cannot open display:

이것은 새로운 버전이 그것을 깨뜨린 방법입니다.

jsosic-coreos-test-2017-01-04 ~ # docker --version
Docker version 1.12.3, build 34a2ead

[root@13ab34c36c82 /]# /opt/google/chrome/chrome
Failed to move to new namespace: PID namespaces supported,
  Network namespace supported,
  but failed: errno = Operation not permitted
Aborted (core dumped)

내가 찾은 것은 --cap-add=SYS_ADMIN또는 컨테이너를 시작하면 --privilegedChrome이 예상대로 작동 한다는 것입니다 .

이 두 스위치의 차이점은 무엇입니까? 어떤 기능을 사용할 수 --privileged있습니까?

setns()보안을 손상시키지 않고 컨테이너 내부를 허용 할 수 있습니까?



답변

AFAICS이 문서는 제안 컨테이너에 필요한 기능을 부여하기보다는 사용하여 --privileged스위치를. 권한 모드로 실행 하면 컨테이너에 모든 기능 이 부여됩니다 (문서가 최신 상태 인 경우 정확히 첫 번째 URL에 나열된 기능 ).

간단히 말해, 스위치 --cap-add=SYS_ADMIN와 비교하여 컨테이너에 더 작은 기능의 하위 집합을 컨테이너에 부여합니다 --privileged. Docker 설명서 (첫 번째 URL)의 예제는 필요할 때 SYS_ADMIN또는 NET_ADMIN기능을 추가하는 것을 선호하는 것 같습니다 .


답변

한 가지 차이점은 –privileged는 / dev 및 / sys를 RW로 마운트하고 SYS_ADMIN이 RO로 마운트하는 것입니다. 이는 권한있는 컨테이너가 시스템의 장치에 대한 모든 액세스 권한을 가지고 있음을 의미합니다. SYS_ADMIN은이를 제공하지 않습니다.


답변