서버 프로그래머 로그 - 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에 끝내주는 글을 작성하셨으니 참조하시길.