설명
호스트의 민감한 디렉터리를 컨테이너에 직접 마운트하면 내부 프로세스가 파일 권한과 마운트 설정에 따라 호스트 파일을 읽거나 변경할 수 있습니다. 백업, 시스템 설정과 운영 데이터가 포함된 경로는 특히 주의해야 합니다.
바인드 마운트는 데이터 공유에 유용하지만, 불필요하게 넓은 경로를 연결하면 컨테이너 하나의 문제가 호스트 데이터의 유출이나 손상으로 이어질 수 있습니다.
잠재적 영향
- 컨테이너가 필요한 범위를 넘어 호스트의 기밀 파일에 접근할 수 있습니다.
- 쓰기가 허용된 마운트에서는 중요 데이터나 설정이 변경·삭제될 수 있습니다.
해결 방법
- 불필요한 호스트 경로 마운트를 제거하고 필요한 파일이나 전용 디렉터리로 범위를 좁히세요.
- 읽기만 필요하면 해당 마운트에
:ro또는 긴 문법의read_only: true를 적용하세요. 읽기 전용 설정도 정보 유출을 막지는 않습니다. - Docker named volume으로 분리할 때는 필요한 데이터 이전과 권한을 준비하고 백업·복구와 애플리케이션 동작을 검증하세요.
예시
backup-service는 실제 백업 이미지로 바꿔야 합니다. 두 예제는 서로 다른 저장 위치를 사용합니다.
변경 전
yaml
version: "3.9"
services:
backup:
image: backup-service
volumes:
- /var/lib/backup/data:/data
호스트의 백업 경로를 /data에 직접 연결합니다. 기본 읽기·쓰기 마운트이므로 프로세스의 파일 권한도 중요합니다.
변경 후
yaml
version: "3.9"
services:
backup:
image: backup-service
volumes:
- backup-data:/data
volumes:
backup-data:
별도의 named volume을 사용합니다. 기존 호스트 데이터가 자동으로 이전되지는 않으며, 볼륨에 저장한 데이터와 접근 권한도 보호해야 합니다.