보안상의 이유로 GUI 애플리케이션을 보려는 Docker 컨테이너를 실행하려고 합니다.
저는 현재 두 가지 옵션 사이에 있습니다. 해당 트래픽을 X 서버로 전달해야 하는지(1) 아니면 컨테이너 내부에서 X 서버를 실행한 다음 연결해야 하는지(2) 잘 모르겠습니다.
현재 해결 방법은 (1)이지만 보안이 걱정됩니다. 컨테이너가 다음과 같이 호스트 서버에서 인증되었다고 가정합니다.
- 다른 응용 프로그램과 상호 작용할 때 마우스 및 키보드 입력을 잡습니다.
- 다른 창에 대한 정보를 쿼리할 수 있나요? 아니면 그들의 상태를 전혀 알고 있습니까?
편집: 위의 내용 중 하나라도 사실이라면 (2) 문제를 해결하시겠습니까?
답변1
예, 모든 X11 클라이언트는 디스플레이의 모든 창과 기타 모든 리소스에 대한 전체 액세스 권한을 갖습니다.
그들은 키보드와 마우스를 잡고 창과 픽스맵의 전체 내용을 얻을 수 있을 뿐만 아니라 (또는 그것들을 파괴할 수도 있습니다 ;-));서서히 나아가는XTEST 확장을 통한 키보드 및 마우스 입력.
X11 프로토콜은 순전히 협력적용으로 설계되었으며 좋은 클라이언트 동작을 가정합니다. 잘못 작성된 X11 응용 프로그램은 큰 혼란을 초래할 수 있으며, 그 중 다수는 실제로 그렇습니다(Java 응용 프로그램은 초대받지 않은 Focus를 제거하고 Firefox는 페이지를 업데이트할 때 맨 위로 팝업됩니다. 등).
컨테이너 내부에서 X 서버를 실행하고 연결합니다(2).
컨테이너 내부에서 실행 Xvfb
- 하드웨어에 액세스할 수 없는 X11 서버입니다. 또는 GUI 프로그램과 상호 작용하려면 Xephyr
[1]과 같이 중첩된 X11 서버를 사용할 수 있습니다. -auth
X11 서버는 다음을 허용합니다 .어느로컬 클라이언트가 이에 연결됩니다.