Apache HTTP Server Version 2.2

Apache > HTTP Server > Documentation > Version 2.2 > 모듈

#### Please note

This document refers to a legacy release (2.2) of Apache httpd. The active release (2.4) is documented here. If you have not already upgraded, please follow this link for more information.

You may follow this link to go to the current version of this document.

# 아파치 모듈 mod_dav

가능한 언어: en | ja | ko

이 문서는 최신판 번역이 아닙니다. 최근에 변경된 내용은 영어 문서를 참고하세요.

설명: | 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 프로토콜을 확장한 것이다.

### 주제

- WebDAV 사용하기
- 보안 문제
- 복잡한 설정

### 지시어들

### 참고

- `DavLockDB`
- `LimitXMLRequestBody`
- WebDAV 정보

- Comments

## WebDAV 사용하기

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

`Dav On`

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

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

`DavLockDB /usr/local/apache2/var/DavLock`

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

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를 기반으로 만들었다. 모듈에 대한 더 자세한 정보는 그 사이트를 참고하라.

## 보안 문제

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

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

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

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

## 복잡한 설정

일반적인 질문중 하나는 (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 클라이언트에서 스크립트를 수정할 수 있다.

## 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을 사용하지 마라. 그렇지 않으면 누구라도 서버를 통해 파일을 분배할 수 있게 된다.

## DavDepthInfinity 지시어

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

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

## DavMinTimeout 지시어

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

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

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

### 예제

`<Location /MSWord>
DavMinTimeout 600
</Location>`

가능한 언어: en | ja | ko

## Comments

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.