다른 사용자로 컨테이너 이미지를 실행하기 위한 모범 사례

다른 사용자로 컨테이너 이미지를 실행하기 위한 모범 사례

저는 Kubernetes를 사용하고 있으며 루트가 아닌 사용자로 컨테이너를 실행하고 싶습니다.

나만의 Dockerfile을 작성하는 경우 docker를 사용하여 useradd, chmod 777, 실행할 수 있습니다 --user <username>.

그러나 어떤 경우에는 편집해야 할 파일 목록이 chmod길고 알 수 없어 지루한 프로세스가 될 수 있으며 시간이 지남에 따라 변경될 수 있으며 런타임에만 발견되는 오류가 발생할 수 있습니다.

모범 사례가 있습니까? /var/log및 같은 폴더를 어떻게 처리하시겠습니까 /var/run? 한 가지 옵션은 touch/mkdir 을 사용하는 것입니다 setfacl.

가장 쉬운 방법은 chmod 777 -R /var/log.

777하지만 그렇게 하면 호스트의 컨테이너 액세스도 제공됩니까 ? 컨테이너에 한 가지 권한 세트가 있고 호스트에 다른 권한 세트가 있는 경우 어떻게 매핑됩니까?

답변1

사용하는 chmod 777것은 기본적으로 결코 올바른 해결책이 아닙니다. 권한을 올바르게 설정하는 방법을 알아보세요. 목표를 달성하려면 권한이 거의 항상 최소화되어야 합니다.

이를 수행하는 방법은 특정 이미지의 컨텍스트와 실행 중인 소프트웨어에 따라 크게 달라집니다.

하지만 그러면 컨테이너 777에도 호스트에 대한 액세스 권한이 부여됩니까?

권한을 변경하는 경로가 바인드 바인드 마운트인지 또는 될 것인지에 따라 다릅니다.

답변2

나는 이것이 내 질문과 관련이 있다는 것을 알았습니다.

오버레이 파일 시스템은 하위 디렉터리를 마운트한 다음 상위 디렉터리를 병합된 마운트 지점에 연결합니다. 프로세스가 병합된 디렉터리에 새 파일을 쓰면 새 파일이 상위 디렉터리에 기록됩니다. 프로세스가 하위 디렉터리의 기존 파일을 수정하면 커널은 하위 디렉터리의 파일을 상위 디렉터리로 복사하고 프로세스가 상위 디렉터리의 파일을 수정할 수 있도록 허용합니다.

따라서 chown오버레이(상위) 디렉터리는 호스트(하위) 디렉터리에 영향을 주지 않아야 합니다.

chmod 777하지만 다른 사용자가 호스트의 오버레이 파일 시스템에 액세스하도록 허용할 수는 있을 것 같습니다 .

관련 정보