Apache HTTP Server Version 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 프로토콜을 확장한 것이다.
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를
사용안하도록 설정할 수 없음을 주의하라. 완전한
설정예는 위의 절을 참고하라.
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>