세상은 넓고 리눅스 배포판은 많다.
우분투한국커뮤니티에서 활동을 하고 있어서 그런가, 개인적으로도 항상 리눅스 머신을 구축 할 때는 우분투를 사용하였고, 회사에서 개발하는 제품의 운영체제도 데비안에서 우분투로 변경하기도 하였다. 하지만 그때 그때 필요에 따라서 다양한 리눅스 배포판을 경험해보긴 하였다. Gentoo, Debian, CentOS 등 다양한 리눅스 배포판을 경험했었는데, 이번에 컨테이너 스터디에서 처음 접해본 리눅스 배포판이 있었다. 바로 Alpine Linux, 알파인 리눅스였다.
사실 책에서도 우분투를 기반으로 설명해주고 있었어서, 알파인 리눅스는 같이 스터디를 하는 스터디원들을 통해서 듣게되었다. 컨테이너(클라우드) 환경에서 많이 쓰이는 리눅스 배포판이라고만 들었고, 가벼운게 장점이라는 정도만 들었다. 자연스럽게 쿠버네티스에 구축하는 스터디 과제 역시 알파인 리눅스를 기반으로 하였는데, mysql을 직접 띄우려니 우분투와 같은 일반 배포판과는 다르게 내가 직접 해주어야 하는 것들이 많았다. 우분투 같은 경우, 패키지 매니저로 mysql만 설치해주고, 초기 패스워드 정도? 만 설정해주면 되었었는데, 알파인 같은 경우는 우분투에서 패키지 매니저가 해주었던 post-install 작업들을 내가 직접 해주어야 되었었다. 그렇다보니 '이 귀찮은걸 왜 쓰지...?'라는 생각이 들어 찾아보았고, 이렇게 글로 남기게 되었다.
알파인 리눅스의 소개글의 기반으로 작성하였다.
알파인 리눅스의 가장 큰 특징은 바로 이 '가볍다'이다. 커널을 제외한 용량이 8MB 라고 하는데, 확실히 우분투 등의 다른 리눅스 배포판과 비교했을 때 상대적으로 가벼운 것을 알 수 있다. 알파인 리눅스는 가볍게 만들기 위해서 다른 배포판들 대비 아래와 같은 차이점이 있다.
C 라이브러리를 Glibc가 아닌, Musl을 사용하였다.
Musl은 glibc나 uClibc 등과 비교했을때 크기, 정확도, 그리고 정적 링킹 지원 등을 장점으로 내세우고 있다.
비지박스(Busybox)를 사용하였다.
비지박스는 여러 유닉스 도구들(ls, cd, 등)을 한 실행파일로 제공하는 소프트웨어이다. 이 역시 각 도구별로 실행파일을 별도로 제공하는 것보다 용량 측면에서 더 이점이 있어서 채택 한 것으로 생각된다.
사실 처음에는 용량이 왜 그렇게 큰 장점으로 작용하는지 공감은 되지않았다. 현대에는 용량이 그렇게 큰 버든이 아니라고 생각했기 때문이다. 당장 삼성의 DDR4 램 가격이 1GB당 만원이 되지 않는 현대에서 용량증설은 큰 비용이 들지 않고, 손쉽게 가능했기 때문에 용량은 자원이 매우 제한적인 임베디드 시스템에서나 장점으로 여겨진다고 생각하였다.
하지만 클라우드 환경의 경우에는 용량이 적은것이 큰 장점이 될 수 있다고 한다. AWS나 Azure 등의 Public Cloud에서 제공하는 서비스를 사용하는 경우, 네트워크는 우리가 집에서 인터넷을 사용하는 것처럼 무제한으로 이용 할 수 있는 자원이 아니다. 네트워크 사용량에 따라서 과금이 되고, 많은 네트워크를 자원을 사용한다는 것은 곧 많은 비용을 내야한다는 것을 의미한다. 컨테이너 환경에서는 지속해서 배포가 이루어지고, 이 때 여러 이미지들을 받게 되는데, 당연히 이 과정에서 더 적은 네트워크 자원을 사용하여야 적은 비용을 사용할 수 있을 것이다.
알파인 리눅스에서 제공되는 모든 유저 레벨(User land)의 바이너리들은 PIE(Position Independent Executables)로 컴파일이 되어 Stack Smashing Protection이 되어있다고 한다. 또한 가벼운 OS를 지향하는 만큼 기본적으로 설치되어있는 프로그램 또한 적은 편이다. 그만큼 취약점이 생길 수 있는 포인트가 적다고도 볼 수 있을 것 같다.
PIE는 리눅스 환경에서의 메모리 보호기법으로, PIE를 사용하여 컴파일 된 실행파일은 ROP(Return Orientied Programming) 공격이 더 어렵다고 한다.
지난 2014년, ShellShock 취약점이 발견되었고, 공격 대상이 되었던 Bash가 기본적으로 설치되어있던 대부분의 리눅스 배포판은 이 취약점의 영향을 받았다. 하지만 Bash를 기본으로 설치하지 않는 알파인 리눅스는 이 취약점에 대한 영향이 없었다.
여러가지 조사를 해보았을 때, 용량과 보안성이 알파인 리눅스가 도커환경에서 선호되는 이유라고 생각된다. 비록 여러 단점을 가지고 있음에도 불구하고, 최소 컨테이너 환경에서는 알파인 리눅스를 기반으로 이미지를 만드는 것이 좋을 것 같다.