[CentOS 6.x] APM컴파일 설치 방법 2. Apache 보안 설정

글쓴이 Engineer Myoa 날짜

apache의 기본설정은 사실상 많이 취약합니다.

개인적으로 운영한다면 큰 상관이 없지만 약간 규모가 있는 곳이라면 보안설정을 꼭 해야합니다.

 

보안이 높아지면 속도는 자연스레 떨어지고 작업에 대한 편의성도 떨어집니다.

sftp만 봐도 ftp에 비해 각 패킷마다 암호화과정을 거치기때문에 스트리밍에서 매우 낮은 속도를 보여줍니다.

균형을 맞추는것이 좋겠지만 저는 60:40 정도로 셋팅을 해두는 편입니다.

 

다음은 제가 아는 선에서 보안설정 하는 몇가지 방법을 소개해드리려 합니다.

※ 패키지 설치자분들과는 설정이 다를 수 있으며 패키지의 경우 /etc/httpd/httpd.conf를 편집하면 됩니다.

기본편집 파일경로는 /usr/local/apache/conf/httpd.conf입니다.

 

1.  데몬 실행 유저 변경

apache를 설치한 건 root권한을 획득한 상태고 이로써 데몬역시 root명의로 서비스됩니다.

문제는 apache는 외부통신을 목표로 설계된 소프트웨어이므로 서비스해주는 데몬에게 모든 권한을 위임해서는 안됩니다.

따라서 마스터 프로세스만 root 권한으로 실행되고 실제 웹을 distribute할 프로세스들은 fork해서 apache계정 권한으로 실행시킵니다.

 

$ vim /etc/passwd
// passwd파일은 편집전 cp로 백업본을 만들어 두시기 바랍니다.
// 초심자는 물론 엔지니어도 실수를 하는 경우가 있기 때문에 반드시 백업하세요.
apache:x:48:48:Apache:/var/www:/bin/bash
// 에서

// 아래와 같이 변경해주세요
apache:x:???:???:Apache:/var/www:/sbin/nologin


:wq
// 혹은
ZZ
// 로 저장합니다.

위처럼 변경하게되면 apache계정으로는 로그인을 할수가 없습니다. 다만 해당 계정의 권한설정에 맞게 daemon등을 서비스할 수는 있습니다.

 

$ vim /usr/local/apache/httpd.conf


User apache
Group apache # 또는 운영상 apache가 속해있는 여타그룹

nobody계정으로 설정하는 분들도 계시지만 옛날식 방법으로 알고있습니다.

prefork, mcm같은 멀티프로세스가 나오고부터는 fork로 프로세스를 동적으로 생성하기때문에 굳이 nobody계정을 선택할 필요가 없으며

서블릿같은 서버기반 페이지에서 동적으로 파일을 생성할 경우 owner권한에도 문제가 발생하여 운영에 문제가 생길수도 있습니다.

 

2. 불필요한 문서삭제, DocumentRoot설정

컴파일 설치시 테스트를 위해 기본적으로 탑재되는 문서들이 있습니다.

이 문서들은 취약점을 유도할 수 있고 주 운용되지 않는 페이지는 삭제하는것이 좋습니다.

$ rm /usr/local/apache/cgi-bin/* -f
// -f 옵션은 묻지않고 명령을 수행합니다.
// 폴더삭제를 제외하고는 사용하지 않는것이 좋으나 여기선 강의를위해 편의상 사용하였습니다.

# rm /usr/local/apache/htdocs/* -f
$ vim /usr/local/apache/httpd.conf


DocumentRoot "/var/www/html"
// 과 같이 운영상에 사용할 폴더를 지정해주세요.

 

3. VirtualHost 사용하기

httpd.conf에 직접 <VirtualHosts>를 사용해도 되지만 이는 관리상 매우 부적합합니다.

수정시에도 코드전체를 읽어야 하므로 효율적이지 못합니다.

그래서 apache 설정에서는 cpp분리 컴파일 기법처럼 외부 설정을 불러올 수 있도록 되어있습니다.

httpd.conf파일에 보면

# Include conf/extra/httpd-vhosts.conf

로 되어있는 부분의 #을 제거해주세요. (주석제거)

저장하고 나옵니다.

 

이제 extra폴더의 설정파일을 손볼 시간입니다.

$ vim /usr/local/apache/conf/extra/httpd-vhosts.conf
# <VirtualHost IP:Port>
<VirtualHost *:80> # 이 서버의 80번포트에 대해 다음과같이 설정합니다.

    ServerAdmin   관리자 이메일 # 입력하지 않아도 무방
    DocumentRoot 절대경로입력
    ServerName 이 서버를 알릴 이름을 지정해주세요.
    ErrorLog logs/err # 에러발생시 logs/err파일에 기록합니다.
    Options Indexes # 폴더경로를 입력했을때 파일을 보여줄지 여부
    # 반드시 설정해야합니다.
    <Directory 경로>
        Order allow, deny
        Allow from all
    </Directory>
</VirtualHost>

위와같이 수정해줍니다.

 

4. 에러페이지 설정

웹을 관리하다보면 404, 401, 400, 500 흔히 볼 수 있는 에러 코드입니다.

문제는 일반 에러페이지를 출력시 디버깅을 위해 서버 설정값이나 운영환경에 대한 정보가

노출될 우려가 있어 수동으로 에러페이지를 설정하면

아파치 기본 에러코드처리루틴을 피하고 해당 페이지로 이동시키기 때문에 보안을 한단계 높일 수 있습니다.

 

$ vim /usr/local/apache/conf/httpd.conf

.
.
.

ErrorDocument 400 경로/a.html
ErrorDocument 401 경로/b.html

위처럼 다른 에러코드에 대해서도 에러페이지를 설정해주면됩니다.

 

 

 

이 외에도 많은 보안설정이 있으나 현재 제가 사용하는 것중 가장 필요하다고 생각되는 몇가지를 적어보았습니다.

또한 FollowSymLinks같은 옵션은 보안적으로는 차단하는게 맞으나 워드프레스같이 여러 루트를 탐색하는 페이지의 경우에는 설정을 해줘야합니다. 이때는 Directory설정을 개별적으로 주어(기본 Document Root와는 다른) 해당 Directory에만 권한을 부여해주는 식으로 셋팅하면 됩니다.

 

3부 MariaDB 컴파일 설치에서 뵙겠습니다. 감사합니다.

카테고리: 개발노트

2개의 댓글

답글 남기기

Avatar placeholder

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다