Docker 사용자 그룹 권한 설정의 문제

Docker와 root 권한
도커(Docker)는 컨테이너 기반의 가상화 기술로, 전세계 개발자들로부터 큰 사랑을 받고 있습니다. 대부분의 개발자나 운영팀에서는 docker를 필수로 사용하고 있다고 해도 과언이 아닐 것입니다.
불과 몇년 전 어느 기사에서는 구글에서는 모든것이 도커 컨테이너로 돌아간다는 이야기도 있었을 정도로 도커는 현대 소프트웨어 개발 및 배포에 있어 핵심적인 역할을 하고 있습니다.
저는 도커를 꽤 오랫동안 사용하면서 여러 사람들의 권장 설정과 달리 sudo 명령어를 사용하여 도커를 실행해 왔습니다. 주변 개발자들이나 운영팀에서는 편의성을 위해 보통 도커 그룹에 사용자를 추가하여 sudo 없이 도커를 실행하는 방식을 권장하곤 했습니다.
도커 데몬은 기본적으로 root 사용자 소유의 유닉스 소켓에 바인딩되기 때문에, 일반 사용자 계정은 sudo를 통해서만 접근할 수 있습니다. 즉, 도커 데몬은 항상 (일반적으로) root 사용자로 실행되어야 합니다.
최근 돌풍을 일으키고 있는 OpenClaw를 도커 컨테이너에 격리시켜 설치해보았습니다. 그런데, 꽤 많은 사람들이 도커 권한과 관련되어 문제를 겪고 있는 것을 알게되었고, 상당수의 개발자 분들조차 도커가 특별한 설정을 하지 않았다면 root 권한으로 동작하고 있는 것을 모르고 있다는 것을 알게되었습니다.
이번 기회에 제가 왜 sudo를 사용하여 도커를 실행하는지, 그리고 일반적인 권장 설정을 따르지 않는 이유에 대해 설명해보고자 합니다.
일반적인 Docker 권장 설정을 따르지 말아야 하는 이유
많은 사람들이 도커를 실행할 때마다 sudo를 사용하는 것이 번거롭다고 느낍니다. 그래서 일반적으로 도커 그룹에 사용자를 추가하여 sudo 없이 도커를 실행할 수 있도록 설정하는 것을 권장하고 있으며, 공식 도커 문서에서도 이러한 방법을 안내하고 있습니다.
하지만, 이 방법은 보안상 심각한 위험을 초래할 수 있습니다. 도커 그룹에 속한 사용자는 도커 데몬에 대한 완전한 접근 권한을 가지게 되며, 이는 곧 시스템 전체에 대한 root 권한을 의미합니다.
저희는 일반적으로 보안을 위해 root 사용자를 피하고, 일반 사용자로 시스템에 접근하여 꼭 필요한 작업을 할 때만 sudo를 사용합니다. 일반적으로 권장하는 도커 그룹에 사용자를 추가하는 행위는 일반 사용자 계정을 root 권한과 동등하게 만들어 버리는 것과 같습니다.
Dan Walsh라는 리눅스 보안 전문가가 작성한 글에서 이 문제를 아주 명확하게 설명하고 있습니다. 도커 그룹에 속한 사용자는 도커 데몬을 통해 호스트 시스템의 파일 시스템에 접근할 수 있으며, 심지어 호스트의 root 권한을 획득할 수도 있습니다.
이 글이 10년전에 작성된 글임에도 불구하고, 여전히 도커 권한 설정과 관련된 문제는 현재진행형이라는 점이 놀랍습니다.
전통적으로 sudo 명령어는 특정 명령어에 대해 일시적으로 root 권한을 부여하는 안전한 방법으로 사용되어 왔습니다. 또한, sudo는 명령어 실행 로그를 남기기 때문에, 누가 언제 어떤 명령어를 실행했는지 추적할 수 있습니다.
반면, 도커 그룹에 사용자를 추가하는 것은 이러한 추적 기능을 제공하지 않으며, 도커 데몬에 대한 무제한 접근 권한을 부여합니다. 이는 보안 사고 발생 시 책임 소재를 명확히 하기 어렵게 만듭니다.
도커 공식 문서에서도 도커 그룹에 사용자를 추가하는 것이 보안 위험을 초래할 수 있음을 경고하고 있습니다.
대안1: Rootless Docker
저와 같은 입장을 가진 사람들이 많아서, 도커 커뮤니티에서는 최근에 Rootless Docker라는 기능을 도입했습니다. Rootless Docker는 도커 데몬과 컨테이너를 비루트(non-root) 사용자로 실행할 수 있도록 지원합니다. 이는 도커 데몬과 컨테이너가 호스트 시스템의 root 권한을 필요로 하지 않도록 하여 보안성을 크게 향상시킵니다.
하지만 실용적인 차원에서 보면, 네트워킹/포트 바인딩이나 일부 기능(특권 컨테이너 등)에서 제약이 생길 수 있고, 환경에 따라 세팅/운영 난이도가 급격하게 올라가기도 합니다.






