2017-12-18 15 views
0

나는 현재 엔비디아 - 부두 노동자로 공식 Tensorflow 도커 컨테이너 (GPU)를 실행 :공식 Tensorflow Docker Image를 루트가 아닌 사용자로 실행하는 방법은 무엇입니까?

그러나, 나는에 대한 기본 사용자를 설정하는 방법을 찾을 수 없습니다 컨테이너. 이 컨테이너의 기본 사용자는 "루트"입니다. 이는 보안 상 위험하며 공유 폴더에 루트 액세스 권한을 부여하기 때문에 위험합니다.

내 호스트 컴퓨터가 "CNNareCute"사용자와 함께 실행된다고 가정하면 동일한 사용자로 내 컨테이너를 시작할 수있는 방법이 있습니까?

답변

1

Docker 컨테이너는 root으로 실행됩니다. 도커 실행 명령에 --user <user>을 전달하여 사용자를 무시할 수 있습니다. 그러나 컨테이너 프로세스가 컨테이너 내부에 루트 액세스가 필요한 경우 문제가 될 수 있습니다.

언급 한 보안 문제는 User Namespaces을 사용하는 도커에서 처리됩니다. Usernamespaces는 기본적으로 컨테이너의 사용자를 호스트의 다른 사용자 풀에 매핑합니다. 따라서 컨테이너의 루트 사용자를 호스트의 일반 사용자에 매핑하면 보안 문제를 완화해야합니다.

+0

사용자 네임 스페이스가 내 요구에 완벽하게 응답하는 것처럼 보입니다. "루트"를 "CNNareCute"사용자에 매핑하는 방법에 대한 아이디어가 있습니까? –

+1

https://success.docker.com/article/Introduction_to_User_Namespaces_in_Docker_Engine 및 https://www.jujens.eu/posts/en/2017/Jul/02/docker-userns-remap/와 같은 온라인 자습서가 많이 있습니다. 기본적으로 다시 매핑은 범위에서 수행되므로 cat/etc/passwd를 사용하여 사용자 CNNareCute의 uid를 찾고이를'/ etc/subuid' 예에서 범위의 시작으로 지정합니다. USER : : 65536'의 결과입니다. 그런 식으로 컨테이너 (루트)의 사용자 0은 호스트의 'CNNareCute' 사용자에 매핑됩니다 – yamenk

1

AFAIK, 도커 이미지는 기본적으로 root로 실행됩니다. 즉, 이미지를 기본으로 사용하는 모든 Docker 파일은 수정을 위해 농구를 뛰어 넘을 필요가 없습니다. Dockerfile에서 사용자 수정을 수행 할 수 있습니다 - 다른 Linux 상자에서와 마찬가지로 원하는 구성을 제공하는 것과 같습니다.

컨테이너에서 먼저 호스트에서 사용자를 (동적으로) 컨테이너에서 작성하지 않고 (동적으로) 사용할 수 없으므로 사실상 동일한 이름의 사용자가됩니다.

컨테이너에있는 명령과 ssh를 특정 사용자로 컨테이너에 실행할 수 있습니다.

그래서 짧은

docker exec --user www-data application_container_1 sh -c "php something"

, 당신은 당신이 원하는대로 사용자 설정 및 스크립트하지만 기본을 실행하는 데 사용할 수 있습니다 : 예를 들어, 다음과 같이 www-data 권한을 보유 실행 명령을 필요로하는 PHP 응용 프로그램이 실행된다 루트가되며 영향을 미칠 수도있는 제거하지 않는 한 존재합니다 ...