[CentOS] Dokuwiki 보안을 위한 셋팅

사용환경

  • 운영체제 : CentOS 5.5 Final
  • 커널버전 : Linux 2.6.18-194.26.1.el5 i686 GNU/Linux
  • 웹서버버전 : httpd-2.2.3-43.el5
  • PHP버전 : php-5.1.6-27.el5
  • Dokuwiki 버전 : 2010-11-07 Stable(Anteater)

현재 넷북(HP mini110-1111TU)을 이용해서 서버를 구축하는 작업을 조금씩 하고 있습니다. 현재 wiki.simplism.kr 내에서 문서화를 동시에 작업을 하고 있는 관계로 조금 더디게 작업이 진행되고 있습니다.

01. 서버 삽질

처음에 FC13(페도라 13)으로 APM을 직접 소스코드에서 빌드를 하는 작업과 문서화를 진행하고 있었는 데, 추후에 유지보수를 생각하니 왠만하면 빌드를 하는 것이 아니라 바이너리 패키지를 사용하는 것이 현명할 것 같다는 생각이 들어서 다시 CentOS로 작업을 진행했습니다.

그마저도 NetInstall을 진행하려는데… 랜카드가 자동으로 잡히지 않는 관계로 결국 DVD로 설치한 이후에 랜카드 드라이버 패키지를 USB로 옮긴 이후에 설치를 진행했습니다. (결국… 그 전에 빌드작업을 진행하던 문서는 다 날려버렸습니다. 그 때문에 지지난주의 주말을 통째로 날렸었는데..ㅠ)

확실히 바이너리 패키지를 설치해서 서버를 구축하니 정말 순식간에 작업이 완료되었고, 작성해야하는 문서의 양도 엄청나게 줄어버려서 문서화 작업도 차근차근 진행 중입니다.

그리고 최근에 Stable버전을 발표한 페도라 14가 아닌 RHEL(레드햇 엔터프라이즈 리눅스)의 클론 버전인 CentOS를 이용하여 작업을 진행하였습니다.

02. dokuwiki 설치

제가 가장 많이 사용하는 웹 어플리케이션인 dokuwiki부터 설치를 진행했습니다. 워드프레스의 경우에는 두 번째로 많이 사용하고 있지만 현재 호스팅 중인 계정에서 작동하고 있으니 굳이 설치를 할 필요가 없더군요;; 위키의 경우에는 목적에 따라서 나눠서 사용하고 있기 때문에 설치를 해봤습니다.

설치 과정을 기록한 문서는 아래의 링크를 따라가시면 보실 수 있습니다.

<a href="http://wiki.simplism.kr/doku.php?id=linux:서버관리:redhat:centos_webserver:05_a_dokuwiki_install_doc" target="_blank"><strong>http://wiki.simplism.kr/doku.php?id=linux:서버관리:redhat:centos_webserver:05_a_dokuwiki_install_doc</strong></a>

03. 취약점

설치를 진행하던 중에 볼 수 있었던 보안관련된 문서를 혹시나 하고 체크를 해보니… 현재 서버의 셋팅으로는 보안에 취약할 수 밖에 없는 상태였습니다.

가장 큰 이유는 dokuwiki의 구조에 기반합니다. 위키피디아로 많이 사용하고 있는 MediaWiki의 경우에는 DBMS를 사용하지만, dokuwiki의 경우에는 wiki의 내용(Contents)을 웹계정의 txt파일로 보관하게 됩니다.

공개 위키의 경우에는 큰 관계가 없지만 만약에 비공개 위키로 운영할 경우에는 아래와 같은 방법으로 직접 접근이 가능합니다.

<strong>http://서버주소/위키설치디렉토리/data/pages/wiki/dokuwiki.txt</strong>

위의 경로로 강제로 접근했을 시에 내용이 웹브라우저에 출력이 된다면, 보안 상 좋지 않은 상태인 것입니다. 권한이 없는 사용자도 내용물을 유추해서 강제로 접근할 시에 막을 방법이 없는 것입니다.

저의 경우도 위와 같이 접근을 해보니… 내용이 화면에 그냥 출력이 되어서 설치화면에서 연결되어 있는 링크를 참고(참고문서 2번)하여 취약점 보완작업을 진행하였습니다.

04. VirtualHost 설정

아파치 설정파일(/etc/httpd/conf/httpd.conf)에서 아래와 같은 부분을 찾아서 주석을 해제해줍니다.

#&lt;VirtualHost *:80&gt;
#    ServerAdmin webmaster@dummy-host.example.com
#    DocumentRoot /www/docs/dummy-host.example.com
#    ServerName dummy-host.example.com
#    ErrorLog logs/dummy-host.example.com-error_log
#    CustomLog logs/dummy-host.example.com-access_log common
#&lt;/VirtualHost&gt;

각 라인의 앞 부분의 우물정자(#)를 없애주면, 주석이 해제되고 해당 기능이 활성화됩니다.

&lt;VirtualHost *:80&gt;
    ServerAdmin root@localhost
    DocumentRoot /var/www/html
    ServerName simplism.iptime.org
    <strong>&lt;LocationMatch "/(data|conf|bin|inc)"&gt;
        Order allow,deny
        Deny from all
        Satisfy All
    &lt;/LocationMatch&gt;</strong>
&lt;/VirtualHost&gt;

그리고 위와 같이 변경해줍니다. LocationMatch를 이용해서 해당 디렉토리에 접근할 시에 Blocking하는 기능을 수행하도록 합니다.

그 후에 변경한 설정을 적용하기 위해서 설정파일이 정상인지 확인한 후에 아파치(httpd)를 재시작합니다.

<strong># /etc/init.d/httpd configtest
# /etc/init.d/httpd restart</strong>

이제 위에서 강제로 접근했던 경로로 접근했을 시에 아래와 같은 화면이 나온다면, 정상적으로 적용이 된 것입니다.

05. 대안

다른 방안으로는 각 디렉토리에 대한 접근을 제어할 수 있도록 .htaccess 파일을 사용이 가능하도록 설정하는 방법이 있습니다. 이와 같은 방법을 사용하게 되면 각 디렉토리 별로 접근을 제어할 수 있는 장점이 존재하는 반면에 성능이 저하된다는 단점이 있다고 합니다.(참고문서 2번참고) 제가 선택한 서버가 고성능의 서버라면 .htaccess를 이용할 수 있도록 서버를 설정하는 편이 설정에도 용이하고, 자유롭게 디렉토리별 접근제어를 할 수 있어서 좋지만 워낙 낮은 사양의 하드웨어(넷북…ㅠ^ㅠ)를 서버로 사용하고 있기에 조금의 서버성능의 저하를 가져올 수 있는 요인을 살려두고 싶진 않았습니다.

또 다른 방법으로는 위키내의 데이터파일들을 다른 경로로 변경하는 방법입니다. 기본 위치는 도쿠위키를 설치한 디렉토리의 data 디렉토리이지만, 해당 설정을 가지고 있는 파일을 편집한 뒤에 해당 위치로 변경하는 방법입니다. 이 방법도 적용할까 생각해봤지만, 문제는 추후에 유지보수에 어려움을 느낄 것 같아서 적용을 보류했습니다.

그 외의 방법들은 참고문서 2번을 참고하시면 되겠습니다.

06. 참고문서

  1. http://httpd.apache.org/docs/2.2/howto/htaccess.html
  2. http://www.dokuwiki.org/security
  3. 김태용, CentOS 리눅스 구축관리 실무, SU리눅스포털, 2007

Fatal error: Uncaught Exception: 12: REST API is deprecated for versions v2.1 and higher (12) thrown in /web/home/simplism/html/wordpress/wp-content/plugins/seo-facebook-comments/facebook/base_facebook.php on line 1273