최저 연습 나는 컨테이너를 루트로 실행하지 마십시오. 많은 수의 Docker 이미지, 심지어 일부 공식 이미지는 이것을 무시하고 루트로 실행해야합니다. 조언은 일반적으로 응용 프로그램이 루트를 필요로하지 않고 Dockerfile
에 설정 한 루트가 아닌 사용자로 시작할 수 있도록 이미지를 설정해야한다는 것입니다. 이 충고조차도 몇 가지 이유로 가장 안전한 옵션은 아닙니다.
첫 번째는 USER username
이라고 말하고, username
은 분명히 root
이 아닙니다. 해당 이미지를 호스팅하는 플랫폼의 경우 응용 프로그램이 root
으로 실행되지 않는다고 실제로 보장하지는 않습니다. 이는 username
과 같은 명명 된 사용자가 uid
의 0
으로 컨테이너에 매핑되어 여전히 root
권한으로 실행될 수 있기 때문입니다. 플랫폼에서 이미지가 root
으로 실행되도록 설정되지 않았는지 제대로 확인하려면 username
대신 uid
을 사용해야합니다. 그것은 0
의 uid를 제외한 모든 것입니다.
두 번째 문제는 사용자의 Docker 서비스 인스턴스에서 특정 비 root
사용자로 실행하는 것이 좋을 수도 있지만 멀티 테넌트 환경을 고려할 때, 다른 사용자 또는 다른 응용 프로그램이 될 때가 아닙니다. 서로 다른 응용 프로그램이 어떤 식 으로든 서로 액세스 할 수 없도록하는 것이 중요합니다.
멀티 테넌트 환경에서 가장 안전한 방법은 특정 계정 또는 다른 프로젝트에서 다른 사용자가 소유 한 모든 응용 프로그램을 실행하는 것입니다. 이것이 가져 오기 한 이유는 영구 볼륨에 대한 데이터 액세스의 관점에서입니다. 모든 사용자가 동일한 사용자로 실행 중이 어서는 안되는 영구 볼륨에 액세스 할 수 있다면 다른 응용 프로그램의 데이터를 볼 수 있습니다.
기본적으로 OpenShift는 기본적으로 보안을 유지하기 위해 최고 수준의 보안으로 실행됩니다. 따라서 한 프로젝트의 응용 프로그램은 다른 사용자와 함께 다른 프로젝트의 응용 프로그램과 함께 실행됩니다.
보안 조치를 줄이고 적절한 권한이있는 경우이 정책을 무시할 수 있지만 수행중인 응용 프로그램의 위험 프로필이 낮을 때만 변경해야합니다. 즉, 당신은 인터넷에서 벗어난 임의의 Docker 이미지를 알지 못하고 루트로 실행되도록합니다. 당신은 기본을 무시하고 이미지가 사용자로 실행할 수 있습니다 말할 수
:
은 끝까지 읽고 특정 응용 프로그램 시작에 보안 컨텍스트 제약 조건을 변경하는 방법에 대한 자세한 내용은 Dockerfile
에서 선언하거나 필요한 경우 root
으로 실행합니다.
최고의 보안을 원한다면 Docker 이미지를 구성하여 특정 사용자가 아닌 모든 사용자로 실행할 수있는 더 좋은 방법입니다. 이 작업을 수행하는 방법에 대한
일반적인 지침은 다음과 같습니다
- 이 같은 응용 프로그램을 실행하는 컨테이너에 새 사용자 계정을 만듭니다. 이 계정의 기본 그룹을 그룹 ID
0
으로 설정하십시오. 즉, 해당 그룹은 root
이지만 사용자는 그렇지 않습니다. UNIX passwd
파일에 항목이없는 사용자로 실행중인 경우 UNIX가 그룹을 기본값으로 설정하는 그룹 ID 0
이어야합니다.
- 응용 프로그램이 읽기 액세스 권한이 필요한 모든 디렉토리/파일은 다른 사용자가 읽고 쓸 수 있어야하며 그룹
root
이 읽고 액세스 할 수 있어야합니다.
- 응용 프로그램에서 쓰기 액세스가 필요한 모든 디렉토리/파일은 그룹
root
에 의해 쓰기 가능해야합니다.
- 응용 프로그램에서 권한있는 포트를 바인딩 할 필요가 없습니다. 기술적으로는 Linux 기능을 사용하여 해결할 수 있지만 Docker 이미지 자동화 빌드와 같은 Docker 이미지 용 일부 빌드 시스템은 Linux 기능의 측면을 사용하는 사용자를 지원하지 않으므로 필요에 따라 이미지를 빌드 할 수 없습니다.
setcap
을 사용하십시오.
마지막으로, 당신은 레드햇에서 OpenShift 지역 (CDK)를 사용하는 경우, 또는 복합기 VM이 OpenShift 원산지를 들어,이 중 어느 것도 필요하지 않다는 것을 발견 할 것이다. 이러한 VM 이미지는 기본적으로 루트로 실행하려는 이미지까지 모든 이미지를 실행할 수있는 기능을 허용하도록 의도적으로 설정 되었기 때문입니다. 이는 다운로드 한 임의의 이미지를 시험해보기 쉽도록 제작되었지만, 프로덕션 시스템에서는 기본적으로 이미지를 루트 권한으로 실행하는 기능과 함께보다 안전한 방식으로 이미지를 실행하려고합니다.
루트로 컨테이너를 실행하는 것과 관련된 문제와 플랫폼에서 컨테이너를 임의의 사용자 ID로 컨테이너를 실행할 때 발생할 수있는 문제에 대해 자세히 알고 싶으면
에서 일련의 블로그 게시물을 살펴보십시오.
이 우수한 쓰기까지입니다, 감사합니다! –
도움이 더 필요하면 https://groups.google.com/forum/#!forum/openshift에서 OpenShift 용 Google 그룹을 사용하는 것이 가장 좋습니다. –