아마 도커 명령어를 실행할 때마다 매번 sudo
를 입력하는 것이 다소 번거롭게 느껴지셨을 겁니다. 이는 기본적으로 도커 데몬(Docker Daemon)이 루트(root) 권한으로 실행되기 때문에, 일반 사용자 계정으로 도커를 제어하려면 관리자 권한을 획득하는 sudo
가 필요한 것입니다.
이번 글에서는 docker
그룹에 현재 사용자를 추가하여 sudo
없이 도커 명령어를 실행하는 방법과, 이 작업이 가지는 보안상 의미에 대해 정확히 알려드리겠습니다.
왜 sudo
를 생략하고 싶을까요?#
가장 큰 이유는 ‘편의성’ 입니다. 개발 과정에서 수없이 많은 docker
명령어를 입력하게 되는데, 이때마다 sudo
를 붙이는 것은 번거로울 뿐만 아니라 비밀번호를 반복적으로 입력해야 할 수도 있습니다. docker
그룹에 사용자를 추가하면 이러한 불편함을 해소하고, 마치 일반 명령어처럼 docker ps
, docker images
등을 바로 사용할 수 있습니다.
하지만 편의성에는 항상 뒤따르는 책임이 있습니다. 이 점을 염두에 두시고 다음 단계를 진행해 주십시오.
docker
그룹에 현재 사용자 추가하기#
리눅스에서 docker
그룹은 도커 엔진 설치 시 자동으로 생성됩니다. 우리는 이 그룹에 현재 로그인된 사용자를 포함시키기만 하면 됩니다.
docker
그룹에 사용자 추가#
터미널을 열고 다음 명령어를 입력하십시오. 이 명령어는 docker
라는 그룹(-G docker
)에 현재 사용자($USER
)를 추가(-a
)하는 명령어입니다. $USER
는 시스템에 현재 로그인된 사용자 이름으로 자동 치환되는 환경 변수입니다.
sudo usermod -aG docker $USER
변경 사항 시스템에 적용하기#
위 명령어를 실행했다고 해서 바로 sudo
없이 docker
명령어를 사용할 수 있는 것은 아닙니다. 그룹 변경 사항을 현재 사용자 세션에 적용하기 위해 시스템에서 로그아웃한 후 다시 로그인하거나, 시스템을 재부팅해야 합니다.
또는, 다음 명령어를 사용하여 새 그룹 멤버십을 즉시 활성화할 수도 있습니다.
newgrp docker
하지만 가장 확실하고 권장되는 방법은 로그아웃 후 다시 로그인하는 것입니다.
반드시 알아야 할 보안상 의미#
sudo
를 생략하는 편리함을 얻는 대신, 우리는 보안 측면에서 매우 중요한 권한을 사용자 계정에 부여하게 됩니다.
docker
그룹의 멤버가 된다는 것은, 사실상 시스템의 루트(root) 권한을 직접 얻는 것과 동일한 수준의 권한을 갖게 됨을 의미합니다. 왜냐하면 도커는 호스트 시스템과 파일을 공유하거나(-v
옵션), 호스트의 네트워크를 직접 사용하는 등 시스템 깊숙한 영역을 제어할 수 있기 때문입니다.
예를 들어, docker
그룹에 속한 사용자는 다음과 같은 명령어를 통해 호스트의 모든 파일에 접근할 수 있는 루트 셸(root shell)을 컨테이너 내부에 띄울 수 있습니다.
docker run -v /:/host -it --entrypoint /bin/bash ubuntu
이것이 의미하는 바는, 만약 여러분의 사용자 계정이 어떤 이유로든 탈취당한다면 공격자는 sudo
비밀번호 없이도 시스템 전체를 장악할 수 있다는 것입니다.
따라서 이 방법은 개인 개발용 컴퓨터나 보안이 통제된 신뢰할 수 있는 환경에서만 사용하시기를 강력히 권고합니다. 여러 사람이 함께 사용하는 프로덕션 서버나 중요한 시스템에서는 각별한 주의가 필요하며, sudo
를 사용하는 기본 정책을 유지하는 것이 더 안전할 수 있습니다.
적용 결과 확인하기#
시스템에 다시 로그인했다면, 이제 sudo
없이 도커 명령어가 잘 실행되는지 확인해볼 차례입니다. 터미널을 열고 다음 명령어를 입력해 보십시오.
docker ps
만약 “permission denied"와 같은 오류 메시지 없이 위와 같이 정상적으로 결과가 출력된다면, 모든 설정이 성공적으로 완료된 것입니다.
맺음말#
이제 여러분은 sudo
의 번거로움에서 벗어나 훨씬 편리하게 도커를 사용하실 수 있게 되었습니다. 하지만 오늘 함께 알아본 보안상의 의미를 항상 기억해 주시길 바랍니다. 기술의 편리함을 누리는 만큼, 그 기술이 시스템에 미치는 영향을 이해하고 책임감 있게 사용하는 자세는 좋은 개발자에게 반드시 필요한 덕목입니다.