본문으로 바로가기

리눅스 웹서버 구축전 고민사항

category 리눅스/Linux 일반 2013. 5. 22. 17:45

웹서버를 구축하겠다고 마음먹은 이래로 몇가지 고민 사항에 직면하게 된다. 관련하여 각종 책자를 접하거나 검색을 통해 다양한 의견을 접하게 될터이다. 그에 대한 이야기다.

OS 선택의 고민

웹서버 구축을 위한 OS 마련이 그 첫번째 고민사항이다. 웹서버 구축에는 WindowsMAC, 그리고 리눅스(LINUX)계열의 OS를 사용할 수 있다. 각각의 장단점이 있지만 가장 많이 사용되는 웹서버는 리눅스와 윈도우 계열이다. 윈도우는 데스크탑으로도 가장 많이 사용되고 있기에 적응하는데 큰 무리가 없지만 역시나 유료라는 면과 서버구축시 필요한 시스템 사양이 큰 걸림돌이다. 이에 반해 리눅스는 무료라는 강점과 서비스에 필요한 시스템 사양이 낮다는 것이 장점이며, 한때 웹서버의 대부분을 리눅스계열이 점유했기에 관련 문서자료가 많다. 국내에서도 대부분의 웹서버 관련 책자는 리눅스를 기준으로 한다.

고로, 집에서 잠자고 있는 여분의 구형 PC에 웹서버를 구축하는 것은 아무래도 리눅스가 대세이다.

리눅스 배포판에 대한 고민

웹서버 구축에 필요한 OS를 리눅스로 선택하였다는 가정하에 리눅스에 대한 정보를 얻다 보면 처음 접하는 것이 리눅스 배포판이라는 개념이다. 이는 리눅스의 특이한 생태에 기이한 것으로, 오픈소스이기에 각각의 개발자들이 프로젝트를 발족하여 그를 개발진행하다보니 여러종류의 리눅스가 탄생하게 된 것이다. 리눅스의 기본 OS인 커널을 기반으로 그 위에 살을 붙이는 작업들은 개발자 개개인들의 방식대로 진행되어 많은 배포판이 존재하게 되었으며, 이중에서 데비안(Debian)계열의 우분투(Ubuntu)와 레드햇(RedHat)계열의 CentOS(센토스)가 주목할 만하다.

이 두가지 배포판들을 꼽는 이유는 많은 리눅스 관련 패키지들이 이 둘을 기본 지원한다는 전제하에 패키지를 제작한다는 것이다. 물론 기타 배포판들도 몇몇 수정을 거치거나 단순 설치만으로 사용할 수 있는 경우가 있지만 default로 지원하냐 아니냐는 언젠가 맞닥뜨릴지 모를 문제점을 내포하냐 아니냐라는 중요한 선택사항이 될 수도 있다.

우분투와 CentOS 두개만 두고 비교를 하자면 우분투는 데스크탑에 중점을 두고 개발중이고 여러가지 시도를 많이 하고 있는 개발진행이 활발한 프로젝트이기에 관련하여 겪을 수 밖에 없는 많은 에러를 내포하고 있다. 하지만 손수운 패키지들의 설치가 무엇보다 많은 사용자를 끌어들이는 장점을 가지고 있다. 이에 반해 CentOS는 RedHat 계열의 상용 서버 배포판인 RedHat Enterprise 를 무료로 사용할 수 있게 상업적인 내용을 배제한체 복제(clone)한 배포판이기에 안정성 부분은 가장 신뢰할만 하다. 또 한, 한때 리눅스 배포판중 가장 높은 점유율을 자랑했던 RedHat 계열은 관련 문서도 그 만큼 많이 찾을 수 있는 것이 장점이며, 아무래도 그 역사와 더불어 더 많은 서버관련 패키지를 찾아 볼 수 있다.

Ubuntu의 경우 패키지관리가 CentOS에 비해 최신의 버전으로 관리하기가 수월한 이점이 있다. CentOS의 경우 많이 사용하는 APM(Apache,PHP,MySQL)의 버전이 패키지관리자인 yum 명령으로 설치시 그 버전이 Ubuntu에 비해 버전이 낮아 최신의 패키지사용에 걸림돌이 될 수 있다. 물론 각종 패키지들을 소스설치를 통해 설치한다면 이를 극복할 수 있고, 많은 부분 이렇게 사용한다.

그래픽(GUI)모드와 텍스트(TUI)모드 선택의 고민

설치할 리눅스 배포판을 선택하였다면 리눅스의 사용환경을 선택해야 한다. 리눅스는 윈도우처럼 GUI 모드를 이용가능하나 서버구축을 위한 용도로 GUI 모드를 선택하는 것을 추천하진 않는다. GUI모드로 설치를 해도 정작 대부분의 리눅스 명령어는 터미널을 구동시켜 TUI 모드에서 작업하기에 리소스의 측면에선 낭비가 심하다고 볼 수 있다. CentOS 6.4 기준으로 설치시 X윈도우를 지원하는 데스크탑으로 설치를 하면 약 600mb의 메모리사용량을 점유하며 TUI만 지원하는 Minimal로 설치하면 약 80mb의 메모리 사용량을 볼 수 있다.

GUI 모드

TUI 모드

학습이 목표라면 GUI를 지원하는 데스크탑용으로 설치하고 이것저것 해보는 것도 좋을테고 최적화된 서버구축이 목표라면 Minimal 로 설치하여 필요한 패키지만 추가 설치하는 것이 좋을 것이다.

파티션 분배

디스크의 파티션분배에 대한 고찰은 아직 끝나지 않았다. 데스크탑과 서버의 용도별 구축도 다르다. 호스팅이 목적이라면 서버의 안정성과 확장성을 고려해야 된다. 보안 및 안정성과 관련하여 파티션을 분배하는 것은 견해가 갈리는 부분이기도 하다.

/home

/home 디렉토리는 일반적으로 사용자들의 데이터가 저장되는 곳이다. 웹서버를 구축하는 경우에 일반적으로 /home/사용자ID/public_html(www) 과 같이 구성된다. 이 부분을 별도의 파티션으로 구성하게 되면 백업하기 쉽고 사용자가 늘었을때 /home을 확장하기가 쉬워진다. 사용자당 사용용량을 제한하는 것은 quota를 사용하는데 이때 quota가 파티션및 디스크단위로 설정가능하기에 파티션이 분배되었을 경우 해당 계정의 사용제한을 세밀히 지정 할 수 있게 된다. 웹호스팅으로 사용할 경우 이 디렉토리에 많은 부분의 디스크용량이 할당되어야 할 것이다. 특히 일반적인 CMS 형태의 게시판들은 자료실 기능을 포함하고 있는데 /home/사용자ID/public_html/CMS게시판/자료실 과 같은 형태이므로 많은 데이터를 자료실로 이용하기 위해선 필수로 용량확보가 필요하다.

이 외에 XAMPPZpanel 같은 자동 설치형 웹서버를 구축하고자 한다면 기타 다른 디렉토리의 확장을 염두에 두어야 한다. 기본적으로 이러한 패키지들은 /var 혹은 /opt에 자동 설치되곤 하는데 물론 아파치설정에서 홈디렉토리의 경로를 수정할 수 있겠으나 워낙 많은 프로그램들이 엮인 패키지들이니 테스트를 해보지 않아 관련하여 에러사항이 있을지 없을지 모르겠다.

/usr/local

/usr 디렉토리는 윈도우와 비교하면 program file들과 같다. 일반적으로 필요한 패키지들을 직접 설치할때 설치 경로로 /usr/local/ 이사용되며 mysql을 소스로 설치할때 mysql의 DB 저장 위치를 정하게 되는데 /usr/local/mysql/data(var) 등과 같이지정한다. 그러므로 사용자들의 DB가 /usr/local/mysql/data/사용자DB 에 저장될 터 인데 DB만을 따로 사용량 제한을 위해서 파티션 분배가 필요하지 않을까 생각한다. 이 외에도 mysql 전용 quota가 개발되긴 했으나 관련 정보 접하기가 어렵고, /usr/local/mysql/data를 심볼릭링크를 이용해서 /home/사용자ID/dbs 와 같이 연결해서 사용하기도 한다.

/tmp

/tmp 디렉토리는 누구나 읽고 쓸 수 있는 공용디렉토리라는 특성 때문에 다른 디렉토리에 접근 권한을 가지지 못한 공격자들이 공격툴을 런칭하는 곳으로 자주 사용되는 곳이다. 리눅스에서는 특정파티션에 존재하는 프로그램들을 실행시키지 못하도록 제어할 수 있기에 별도의 파티션으로 구성하는 것이 추천된다.

  1. 서버 설치시 /tmp 폴더를 약 10GB(딱히 큰 파일을 다운로드하지 않으면 작아도 될듯 1Gb정도?)정도 할당한다.
  2. /etc/fstab 파일을 열어 변경

    /dev/sda3(파일파티션 알아서)    /tmp    ext4    loop,noexec,nosuid,rw 1 2
    

    noexec=실행금지, nosuid=루트권한금지, rw=읽고 쓰기만 허용

  3. var/tmp 폴더 삭제

    rm -rf /var/tmp
    
  4. /var/tmp를 심볼릭 링크를 이용해서 /tmp로 링크

    ln -s /tmp /var/tmp
    

/var

/var 디렉토리는 mail 과 log 등이 쌓이는 장소이기에 메일저장소가 꽉차거나 DDOS등의 공격으로 인해 log파일들이 로테이트 되기전에 용량이 꽉찰 경우 파티션이 나눠있지 않으면 시스템 전체가 다운되는 원인이 된다.

/swap

/swap 은 가상메모리 공간으로 시스템의 약 2배정도를 추천한다. 그러나 4Gb이상의 가상메모리는 추천하지 않고 시스템이 가상메모리를 사용하고 있다면 메모리가 부족한 것이니 하드웨어적으로 추가하는 것이 옳다. 약 2Gb정도 분배하자.

/

기타 따로 파티션이 분배되지 않은 공간들의 총합이 이 루트파티션으로 인해 결정된다. 고로 기본적으로 4~5Gb는 할당하고 앞으로 추가될 패키지들을 고려해서 설정해야 한다. 10Gb정도면 되지 않을까?