피드로 돌아가기
Unprivileged LXC + Docker: The runc Sysctl Permission Trap
Dev.toDev.to
Infrastructure

Unprivileged LXC 내 Docker의 sysctl 권한 충돌 해결 및 설정 계층 최적화

Unprivileged LXC + Docker: The runc Sysctl Permission Trap

Guatu2026년 5월 5일3advanced

Context

Proxmox 기반 Unprivileged LXC 내 Docker 환경에서 커널 파라미터 수정 시 발생하는 Permission denied 오류 분석. User Namespace 매핑으로 인해 컨테이너 내부 root 사용자가 호스트의 비특권 사용자(UID 100000)로 처리됨에 따른 커널 보안 제약 발생.

Technical Solution

  • runc가 수행하는 컨테이너 생성 단계의 sysctl 적용 시도를 포기하고 설정 계층을 상위로 이동
  • 호스트의 LXC 설정 파일(.conf)에 lxc.sysctl 지시어를 직접 정의하여 컨테이너 초기화 전 파라미터 주입
  • 전역 설정이 필요한 항목의 경우 호스트의 /etc/sysctl.conf에 정의하여 커널 레벨에서 제어
  • LXC pre-start hook을 활용해 /etc/sysctl.d/에 설정 파일을 동적으로 생성하는 구조 설계
  • Docker 데몬 재시작이 아닌 LXC 컨테이너 전체 재시작을 통한 커널 파라미터 런타임 반영

1. Unprivileged LXC 내 Docker 사용 시 `nesting=1`, `keyctl=1` 설정 확인

2. `sysctl` 수정 필요 시 컨테이너 내부가 아닌 Proxmox `.conf` 파일의 `lxc.sysctl` 옵션 검토

3. NFS 마운트 시 호스트와 컨테이너 간 UID mismatch(0 vs 100000) 여부 확인 및 ID 매핑 설정

4. 복잡한 권한 전쟁 방지를 위해 대규모 클러스터 전환 시 Bare-metal Kubernetes 도입 고려

원문 읽기