상세 컨텐츠

본문 제목

Docker - version update

Doker

by 개발 일기92 2025. 12. 28. 14:51

본문

 

도커를 새로운 버전으로 업데이트 하는 다양한 이유(호환성, 기술지원, 최적화)등이 있지만 보안에 대한 얘기만 간단히 서술하려 한다.

 

  • Docker 보안

docker 최신 버전들은 보안 취약성에 대해 지속적으로 inspect되어 보안패치를 통해 잠재적 악용 최소화.

$docker info

 

Security Opions:

  apparmor

  seccomp

 

  1. apparmor - “이 컨테이너/프로세스는 이 파일·디바이스·기능만 써라” 를 강제하는 접근 제어 시스템
  • Linux LSM (Linux Security Module) 중 하나
  • Ubuntu 계열에서 기본 활성화
  • 프로그램 단위로 권한을 제한

SELinux랑 비슷하지만:

  • SELinux → 정책 복잡 / RedHat 계열
  • AppArmor → 경로 기반, 비교적 단순 / Ubuntu 계열

 AppArmor의 핵심 개념 - “무엇을 할 수 있는지”를 미리 정의

  • 접근 가능한 파일 경로
  • 네트워크 사용 여부
  • mount / ptrace / signal
  • capability 사용 여부

→ 허용되지 않은 동작은 즉시 차단

 Docker에서 AppArmor는 어떻게 쓰이나?

Docker는 컨테이너 시작 시 기본 AppArmor 프로파일을 적용함.

 
docker info Security Options: apparmor

→ 의미:

“Docker 컨테이너는 AppArmor 프로파일 하에서 실행 중이다”

기본 프로파일 이름:

docker-default
 

docker-default가 차단하는 대표적인 것들

/sys, /proc/sys 쓰기 커널 파라미터 변경 방지
mount 호스트 파일시스템 탈취 방지
ptrace 다른 프로세스 해킹 방지
raw socket 패킷 스니핑 방지

 

실제 예시 (컨테이너 안)

mount /dev/sda /mnt

→ 실패(AppArmor가 차단)

 
echo 1 > /proc/sys/kernel/sysrq

→  Permission denied

 

AppArmor 끄거나 바꾸면?

완전 비활성화 (위험)

 
docker run --security-opt apparmor=unconfined ...

커스텀 프로파일

 
docker run --security-opt apparmor=my-profile ...

보안 요구가 있는 운영 서버에선 비추천.


2. seccomp  - “이 컨테이너는 이 시스템 콜(syscall)만 써라” 를 강제하는 커널 레벨 필터

  • Linux 커널 기능
  • 프로세스가 호출 가능한 syscall을 제한
  • Docker는 BPF 필터 기반 seccomp 사용

 왜 syscall을 막아야 하나?

리눅스 프로그램은 전부 syscall로 커널에 요청함:

syscall위험성
mount 호스트 디스크 마운트
reboot 서버 재부팅
ptrace 프로세스 탈취
kexec_load 커널 교체
clone 특수 권한 프로세스 생성

컨테이너에서 이런 syscall 허용하면 XX

 

Docker의 기본 seccomp 정책

Docker는 기본적으로:

  • 약 300개 syscall 중
  • 위험한 약 60~70개 차단

 

기본적으로 차단되는 syscall 예시

syscall설명
mount 파일시스템 마운트
ptrace 프로세스 디버깅
kexec_load 커널 이미지 로드
reboot 시스템 재부팅
swapon 스왑 설정
setns 네임스페이스 탈취

실제 예시(컨테이너)

strace ls

→ 실패 (ptrace 관련 syscall 차단 때문)


Seccomp 설정 변경

비활성화 (매우 위험)

 
docker run --security-opt seccomp=unconfined ...

커스텀 정책

 
docker run --security-opt seccomp=profile.json ...

DB, JVM, 특수 드라이버 쓰는 경우에만 제한적으로 사용


  • Docker Update

ex)

#Docker stop
$docker stop <컨테이너name>

#삭제
$sudo apt -y remove docker-ce

# 설치
$sudo apt ~~

#Docker start
$docker start <컨테이너name>

# if 이전 버전 실행 중이던 컨테이너 start시 아래 에러가 뜬다면?
docker: Eroor response from daemon cgroups:cgroups mountpoint does not exist: unknown.

# cgroup path에 경로 생성 후 mount
$sudo mkdir /sys/fs/cgroups/systemd
$sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroups/systemd

 

'Doker' 카테고리의 다른 글

Docker - digest  (0) 2025.12.28
Docker - bridge network  (0) 2025.12.28
Docker - 볼륨 정리  (0) 2025.01.05
Docker - 설치 (ubuntu)  (1) 2024.06.07
Doker - 기본 개념  (1) 2024.04.11

관련글 더보기