[CentOS] 개별적인 웹디렉토리에 LocationMatch 설정

사용환경

  • 운영체제 : CentOS 5.5 Final
  • 커널버전 : Linux 2.6.18-194.26.1.el5 i686 GNU/Linux
  • 아파치버전 : httpd-2.2.3-43.el5.centos.3

01. 문제점

이전에 [CentOS] Dokuwiki 보안을 위한 셋팅이라는 포스트에서 VirtualHost와 LocationMatch를 이용해서 특정 디렉토리에 대한 직접적인 접근을 제한하는 포스팅을 올린 적이 있습니다.

이렇게 했던 이유는 .htaccess 파일을 이용해서 동적으로 접근을 제어하는 방식에는 성능의 저하가 있다는 문서를 보고서 성능저하를 최소화하기 위하여 VirtualHost와 LocationMatch라는 정적인 방법(변경할 시에는 설정파일을 변경하고 아파치 재시작)으로 성능저하를 막으면서 원하는 동작을 하도록(보안을 위한 셋팅) 설정했습니다.

그렇지만 이 방식에는 큰 문제가 있습니다.

만약에 해당 경로 하위에 있는 디렉토리 중에서 LocationMatch로 접근을 제한했던 디렉토리명과 동일한 이름을 가진 디렉토리가 있다면 원하지 않았지만 접근이 제한되어버리는 꼴입니다.

이번에 MediaWiki를 설치하면서 퍼미션의 문제가 아닌데 계속 설치가 제한되는 문제가 있어서 확인해보니… 설치를 진행할 때에 MediaWiki를 파일 내의 config 디렉토리에 접근이 필요하더군요… 문제는 이전에 LocationMatch로 접근을 제한해뒀으니 당연히 웹 상에서 접근이 되지 않았던 것입니다.

문제점 정리

너무 장황하게 설명했습니다. 아래에 간단하게 정리를 해봤습니다.

  1. 성능제한을 최소화하기 위해서 VirtualHost와 LocationMatch 설정
  2. MediaWiki 설치 시에 웹상에서 config 디렉토리 접근하려 시도할 시, 접근제한 (부작용… -_-;;;)
  3. 디렉토리 별로 LocationMatch 설정이 필요함.

해결법은 .htaccess를 이용하여 동적으로 디렉토리 접근제어가 가능하도록 설정하거나, LocationMatch를 디렉토리 별로 설정하는 방법입니다. 저의 경우에는 디렉토리 별로 LocationMatch를 설정하는 방법을 선택했습니다.

02. 기존 설정

아래는 httpd.conf 내에 기존에 설정했던 VirtualHost와 LocationMatch 설정입니다.

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

위의 경우에는 /var/www/html 하위의 모든 data, conf, bin, inc 디렉토리에는 웹상에서 직접적인 접근이 되지 않도록 설정된 것입니다. (근데… 지금 생각해보니 MediaWiki 설치 시에 접근하려는 디렉토리는 config였는데… conf로 제한했으니 config도 제한되나 보네요;;)

그래서 /var/www/html 내의 특정 디렉토리로 제한할 수 있을 것 같아서 적용해보니… 정상적으로 해당 디렉토리만 제한이 되길레 정리해서 올립니다.

03. 변경된 설정

LocationMatch의 설정에서 / 뒤에 제한할 디렉토리명을 추가로 기입해주시면 됩니다. directory_a와 directory_b 디렉토리 내부에서 LocationMatch로 접근을 제한할 디렉토리명을 추가로 적어주면 됩니다.

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

이렇게 하면 directory_a와 directory_b 하위의 data, conf, bin, inc 디렉토리의 접근만 제한됩니다. 그 상위의 디렉토리에 대해서는 접근제어가 적용되지 않으니… MediaWiki를 설치할 수 있도록 설정이 된 것입니다. 저의 경우에는 dokuwiki를 두 개를 설치해서 운영하고 있으므로, 위 처럼 중복으로 LocationMatch를 설정한 것입니다.

04. 설정적용

이제는 변경한 httpd.conf의 내용을 테스트하고, 적용할 차례입니다.

# /etc/init.d/httpd <strong>configtest</strong>
Syntax OK
# /etc/init.d/httpd <strong>restart </strong>
Stopping httpd:                                [  OK  ]
Starting httpd:                                 [  OK  ]

이제는 MediaWiki를 설치할 준비를 완료하였습니다.