mod_dav - Apache HTTP Server

Apache Server 2.0

<-

아파치 모듈 mod_dav

설명:Distributed Authoring and Versioning (WebDAV) 기능
상태:Extension
모듈명:dav_module
소스파일:mod_dav.c

요약

이 모듈은 아파치에 WebDAV ('Web-based Distributed Authoring and Versioning') class 1과 class 2 기능을 추가한다. WebDAV는 원격 웹서버의 자원과 콜렉션(collection)을 (역주; 콜렉션은 파일시스템의 디렉토리와 같은 개념이다) 만들고, 옮기고, 복사하고, 지울 수 있도록 HTTP 프로토콜을 확장한 것이다.

top

WebDAV 사용하기

mod_dav를 사용하려면 httpd.conf 파일에 아래과 같이 추가한다:

Dav On

그러면 mod_dav_fs 모듈이 구현하는 DAV 파일시스템 제공자(provider)를 사용한다. 그러므로 이 모듈도 서버에 같이 컴파일되있거나 LoadModule 지시어로 실행중에 읽어들여야 한다.

또, DAV 잠금(lock) 데이터베이스의 위치를 httpd.conf 파일의 전역 부분에 DavLockDB 지시어를 사용하여 지정해야 한다:

DavLockDB /usr/local/apache2/var/DavLock

아파치를 실행하는 UserGroup은 잠금 데이터베이스가 있는 디렉토리에 쓰기 권한을 가져야 한다.

DAV를 사용하는 위치에 접근을 제한하기위해 <Location> 지시어 안에 <Limit> 지시어를 사용할 수 있다. DAV 클라이언트가 한번의 요청에 보낼 수 있는 최대 바이트수를 제한하려면 LimitXMLRequestBody 지시어를 사용한다. "일반적인" LimitRequestBody 지시어는 DAV 요청과 관계없다.

전체 예제

DavLockDB /usr/local/apache2/var/DavLock

<Location /foo>
Dav On

AuthType Basic
AuthName DAV
AuthUserFile user.passwd

<LimitExcept GET OPTIONS>
require user admin
</LimitExcept>
</Location>

mod_dav는 Greg Stein이 만든 Apache 1.3용 mod_dav를 기반으로 만들었다. 모듈에 대한 더 자세한 정보는 그 사이트를 참고하라.

top

보안 문제

DAV를 사용하면 원격 클라이언트가 서버의 파일을 조작할 수 있기때문에, mod_dav를 사용하기 전에 서버가 안전한지 특별히 관심을 가져야 한다.

서버에서 DAV가 가능한 위치는 인증으로 보호해야 한다. HTTP Basic Authentication는 추천하지 않는다. 최소한 mod_auth_digest 모듈이 제공하는 HTTP Digest Authentication을 사용해야 한다. 거의 모든 WebDAV 클라이언트는 이 인증 방식을 지원한다. 아니면 SSL 연결에서 Basic Authentication을 사용할 수도 있다.

mod_dav가 파일을 조작하려면, 아파치를 실행하는 UserGroup은 해당 디렉토리와 파일에 쓰기 권한을 가져야 한다. 또, 새로 생성한 파일은 UserGroup이 소유하게 된다. 그래서 아무나 이 계정에 접근할 수 없도록 하라. DAV 저장소는 아파치만 접근할 수 있다고 가정한다. 아파치를 통하지않고 (예를 들어 FTP나 파일시스템 도구를 사용하여) 파일을 수정함을 허용하면 안된다.

mod_dav는 여러 서비스거부 공격의 대상이 될 수 있다. LimitXMLRequestBody 지시어를 사용하여 큰 DAV 요청을 읽을때 메모리량을 제한할 수 있다. DavDepthInfinity 지시어를 사용하여 많은 메모리를 소모하기위한 매우 큰 저장소의 PROPFIND 요청을 막을 수 있다. 단순히 클라이언트가 여러 큰 파일들로 디스크공간을 채우는 서비스거부 공격도 가능하다. 아파치에서 이를 막을 직접적인 방법은 없다. 그러므로 신뢰하지않는 사용자에게 DAV 접근을 허용하지 않도록하라.

top

복잡한 설정

일반적인 질문중 하나는 (PHP 스크립트, CGI 스크립트 등) 동적파일 작업을 위해 mod_dav를 사용하는 방법이다. 이는 GET 요청이 파일 내용을 다운로드하지 않고 항상 스크립트를 실행하므로 어렵다. 해결방법중 하나는 내용에 두개의 URL을 대응하는 것이다. 한 URL은 스크립트를 실행하고, 다른 URL로는 파일을 다운로드하여 DAV로 작업할 수 있다.

Alias /phparea /home/gstein/php_files
Alias /php-source /home/gstein/php_files
<Location /php-source> DAV On
ForceType text/plain
</Location>

이 설정에서 http://example.com/phparea는 PHP 스크립트의 결과를 보여주고, http://example.com/php-source로는 DAV 클라이언트에서 스크립트를 수정할 수 있다.

top

Dav 지시어

설명:WebDAV HTTP 메써드를 시작한다
문법:Dav On|Off|provider-name
기본값:Dav Off
사용장소:directory
상태:Extension
모듈:mod_dav

지정한 위치에서 WebDAV HTTP 메써드를 사용하려면 Dav 지시어를 사용한다:

<Location /foo>
Dav On
</Location>

On 값은 실제로 mod_dav_fs 모듈이 제공하는 기본 제공자인 filesystem의 별칭이다. 어떤 위치에서 DAV를 시작하면 하위공간에서 DAV를 사용안하도록 설정할 수 없음을 주의하라. 완전한 설정예는 위의 절을 참고하라.

서버를 안전하게 구성할때까지 WebDAV을 사용하지 마라. 그렇지 않으면 누구라도 서버를 통해 파일을 분배할 수 있게 된다.
top

DavDepthInfinity 지시어

설명:PROPFIND의 Depth: Infinity 요청을 허가한다
문법:DavDepthInfinity on|off
기본값:DavDepthInfinity off
사용장소:주서버설정, 가상호스트, directory
상태:Extension
모듈:mod_dav

DavDepthInfinity 지시어를 사용하면 'Depth: Infinity' 헤더를 가진 PROPFIND 요청을 허가한다. 이런 요청을 사용하여 서비스거부 공격이 가능하기 때문에 기본적으로 허용하지 않는다.

top

DavMinTimeout 지시어

설명:서버가 DAV 자원에 대해 유지할 잠금의 최소시간
문법:DavMinTimeout seconds
기본값:DavMinTimeout 0
사용장소:주서버설정, 가상호스트, directory
상태:Extension
모듈:mod_dav

클라이언트가 DAV 자원에 잠금(lock)을 요청할때 서버가 알아서 잠금을 제거할 수 있는 시간을 같이 알려줄 수 있다. 이 값은 단지 요청일뿐이며, 서버는 클라이언트가 요청한 값을 무시하고 클라이언트에게 임의의 시간을 알려줄 수 있다.

DavMinTimeout 지시어는 클라이언트에게 보낼 최소 잠금 시간을 (초단위) 지정한다. Microsoft Web Folders는 기본값으로 120 초를 사용한다. DavMinTimeout에 (600 초와 같이) 더 높은 값을 사용하면 클라이언트가 네트웍 지연때문에 잠금을 잃게되는 경우를 줄일 수 있다.

예제

<Location /MSWord>
DavMinTimeout 600
</Location>