서버 프로그래머 로그 - Linux
서론 ¶
내가 컴퓨터 공부를 하며, 서버 관련된 내용을 처음 접했던건 2008년 정도로 기억한다. 당시에만 해도 사람들이 Linux 보다는 Unix를 엔터프라이즈 급으로 운영한다고 했던 기억이 난다. 관리성 때문에 Windows 서버도 많이 사용된다고 한 글들도 보았다.
물론 난 그 당시 중학생에 불과했기 때문에 엔터프라이즈가 어떻고 그런건 잘 몰랐다. 그냥 서버에는 Unix 를 많이 사용하는구나. Unix 중에서는 Solaris 가 유명하구나. Windows 가 서버에도 쓰이는구나. Linux는 상대적으로 잘 쓰이지 않는구나. 이 정도만 알았지, 그 이상은 잘 몰랐다.
2018년 현재, 서버 뿐만 아니라 임베디드 디바이스를 비롯한 클라이언트까지, 예전에 비해 굉장히 많은 부분이 Linux 화 되었다.
(ZDNet의 뉴스 에 의하면 퍼블릭 클라우드 워크로드의 90%, 세계 스마트폰의 82%, 임베디드 기기의 62%, 슈퍼 컴퓨터 시장의 99%가 Linux로 동작 한다고 한다. )
배포판 ¶
Linux 에는 많은 배포판이 있다. 모든 배포판은 Linux 를 사용하는 사람의 목적에 따라 내부 패키지가 구성되며, 서버에서는 주로 Redhat 계열의 배포판이 사용된다.
Redhat 계열의 배포판이란 Redhat 방식(RPM; Redhat Package Manager) 대로 소프트웨어 패키지를 배포하는 방식의 Linux 를 의미한다.
Redhat 계열의 배포판에는 다양한 파생이 있는데, 그 중에서 서버에 주로 사용되는 버전은 Redhat 에서 엔터프라이즈 지원을 해주는 Linux (RHEL; RedHat Enterprise Linux) 와 CentOS 가 있다.
Redhat 계열 Linux의 전체 목록은 다음을 참조하시길.
이름에서 알 수 있듯 RHEL은 Redhat 에서 엔터프라이즈를 지원해주는, 유료 Linux이다. 한편 CentOS 는 RHEL 과 가장 유사한 배포판의 Linux 이며, 오픈소스로 사용할 수 있다.
현재 대다수의 Linux 서버는 CentOS 를 이용하여 운영하며, 이후에 안정적으로 운영하기 위해 전문가의 지원이 필요할 경우 RHEL 로 전환하는 경우가 많다고 한다.
CentOS ¶
특징 ¶
CentOS 는 굉장히 보수적이며, 안정적인 운영체제이다. 기본 내장되는 패키지는 좀처럼 업데이트 되지 않는다. 따라서 프로그램이 타 Linux 배포판에 비해 안정적으로 동작할 수 있음을 신뢰할 수 있다.
또한 CentOS 는 커널 레벨에서 보안 지원(SELinux)이 된다. 따라서 더욱 낮은 비용으로 높은 보안을 이룰 수 있다.
물론 높은 보안을 이루기 위해 개발자가 더욱 고생해야 하는 것은 어쩔 수 없다.
CentOS 6, 7 ¶
2018년 4월 현재 기준으로 커뮤니티의 지원을 받고 있는 CentOS 버전은 6, 7이다. 기존에 운영하던 서비스가 CentOS 6에서 동작하는 경우가 아니면 반드시 CentOS 7 을 쓰는 것을 권유한다.
현재 (2018년 4월 18일) 기준으로 최신 버전의 CentOS 는 7.4 버전이다. 7.4 버전의 경우 2024년 6월 30일까지 지원받는다고 하니 걱정 없이 사용하도록 하자.
RPM과 YUM ¶
CentOS 는 RPM 을 이용하여 소프트웨어 패키지를 관리한다. rpm
명령어를 이용하여 <PACKAGE>.rpm
패키지 파일을 시스템에 설치한다.
한편 YUM 이라는 유틸리티가 있다. 이는 rpm
명령어를 더욱 사용하기 쉽게 해주는 도구이다. YUM 을 사용하는 이유는 RPM 에서 해결되지 않는 ‘의존성’ 문제를 해결하기 위함이다.
CentOS 7 에서는 특별한 경우를 제외하고는, 거의 모든 패키지를 YUM 으로 설치하거나 제거한다고 생각하면 된다. (특별한 경우란 YUM 을 쓸 수 없는 경우를 의미한다. 인터넷이 되지 않거나, 실수로 YUM 을 지워버렸거나 등등.)
SELinux ¶
CentOS 에는 SELinux가 내장되어 있다(커널 버전 2.6부터 내장). SELinux 는 시스템 내의 모든 사용자, 어플리케이션, 프로세스, 파일들의 권한을 정의한다. SELinux를 사용하는 시스템에서는 SELinux 에 정의되지 않은 권한으로 프로세스를 실행시킬 경우, 알수 없는 에러가 발생한다. 따라서 임의의 프로세스가 실행되는 것을 방지할 수 있다.
예시로는 다음과 같은 것들이 있다.
- mysql 설정 파일(/etc/my.cnf)은 mysqld_db_t 의 컨텍스트(파일 권한)를 가짐
- 악의의 해커가 mysql 설정 파일을 악의적인 my.cnf 파일로 변조시킬 경우, 컨텍스트에 의해 프로세스(mysqld)가 실행되지 않음
- Apache 웹 서버의 프로세스는 httpd_t 컨텍스트(프로세스 권한)를 가짐
- 임의의 Apache 웹 서버를 흉내내는 프로그램은 httpd_t 컨텍스트가 없는 경우 실행되지 않음
SELinux 에 대해 더 알고싶으신 분은 정광섭 님이 lesstif에 끝내주는 글을 작성하셨으니 참조하시길.