웹하드디스크 구현할 수 있고, FTP를 통하지 않고 HTTP 프토토콜을 통해 웹상의 파일을 송수신하고 수정, 삭제할 수 있는 WebDAV 설정과 사용 방법을 설명한다.
1. WebDAV란 무엇인가?
WebDAV는 Web-based Distributed Authoring and Versioning (웹기반 분산형 저작 및 버전관리)의 약자로 웹을 통하여 웹서버에 파일을 관리(목록 조회, 수정, 삭제, 이동 등)할 수 있는 확장된 HTTP 프로토콜을 말한다.
1) WebDAV 특징
- 파일 락킹(file locking) 지원 : 여러 명이 동시 접근이 가능한 웹에서 overwrite하는 것을 막는다. - XML을 사용하여 데이터를 교환 (물론 사용자는 XML을 몰라도 된다.) - 설정은 간단하지만 효과는 만점 - 쉬운 접근 제어 - 웹하드디스크 구현 가능
2) WebDAV에서 확장된 메소드(Method)
HEAD, GET, PUT, POST 등의 기본 HTTP 메소드 외에 WebDAV에는 확장된 다음 메소드들이 있다.
------------ ------------------------------------------------------------------------- 메소드 의 미 ------------ ------------------------------------------------------------------------- PROPFIND 리소스를 위한 속성을 검색한다. 즉, 웹의 파일 목록과 속성을 검색한다. PROPPATCH 하나의 리소스에 대한 속성을 변경한다. MKCOL 새로운 컬렉션(디렉토리, 폴더에 해당)을 만든다. COPY 리소스와 컬렉션을 복사한다. 파일 복사 MOVE 리소스와 컬렉션을 이동한다. 파일 이동 LOCK, UNLOCK 리소스에 overwrite 방지를 위한 락을 걸고 푼다. OPTIONS 서버가 지원하는 메소드를 출력한다. DELETE 리소스와 컬렉션을 삭제한다. 파일 삭제 ------------ -------------------------------------------------------------------------
# DAV의 파일락킹을 위한 Lock DB가 위치할 경로를 지정한다. # - /tmp/DavLock 이라고 설정할 때 /tmp 디렉토리에 DavLock DB 파일이 생성되는 것이다. # - 지정한 경로는 반드시 아파치 웹서버의 실행 user(보통 nobody, web, apache 등)가 # 쓰기 가능한 디렉토리여야 한다. DAVLockDB /tmp/DavLock
# /dav 디렉토리를 WebDAV 사용 가능한 디렉토리로 지정 # - /usr/local/apache/htdocs가 홈디렉토리 일 때 # /usr/local/apache/htdocs/dav 를 의미한다. # - 만약 홈디렉토리를 벗어난 곳에 위치한다면 Alias 지시자로 매핑을 해준다. # Alias /dav /home/truefeel/work # - 지정한 디렉토리는 웹서버 실행 user가 쓰기 가능한 권한이 있어야 # 수정, 삭제, 이동, 파일명 변경이 가능하다. <Location /dav> # WebDAV를 사용하겠다 DAV On
AllowOverride None Options None Order allow,deny Allow from all </Location>
위의 설정만 가지고도 '홈디렉토리/dav/' 는 WebDAV를 사용할 수 있는 환경이 된다. 제대로 동작하는지 도저히 못 참겠는 사람은 아파치 웹서버를 재실행하고 '4. WebDAV 클라이언트로 홈페이지 파일을 관리해보자.'으로 넘어가라!
한단계 높혀 해당 디렉토리 접속할 때 인증 과정을 거치고 특정 IP에서만 접속을 허용하도록 설정해보자. 아래 설정은 웹브라우저에서는 일반적인 형태와 동일하게 나타나지만 WebDAV 클라이언트를 통해 접속할 때는 192.168.123.0/24 IP에서만 접근이 가능하고 또한 로긴용 ID와 비밀번호를 물어보게 된다.
DAVLockDB /tmp/DavLock # DAV 파일락킹을 할 최소 시간을 지정한다. DAVMinTimeout 600
<Location /dav> DAV On
AllowOverride None Options None
# 아파치 인증 # - 인증용 사용자 파일의 위치는 /usr/local/apache/dav/.htpasswd 이다. 이 파일은 # 홈디렉토리(/usr/local/apache/htdocs) 밖에 두어 웹에서는 접근할 수 없도록 한다. # - WebDAV 확장용 매소드와 PUT, POST(이 또한 WebDAV에서 사용함)에 대해 적용된다. # - 192.168.123.0 ~ .255 이외의 곳에서는 WebDAV 접근이 불가능하다. # - 인증용 ID는 webdav이며 이 사용자의 비밀번호는 .htpasswd에 설정해둬야 한다. AuthName "WebDAV User" AuthType Basic AuthUserFile /usr/local/apache/dav/.htpasswd <Limit PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK> Order deny,allow Deny from all Allow from 192.168.123. Require user webdav </Limit> </Location>
인증용 파일을 생성해보자.
# mkdir /usr/local/apache/dav # htpasswd -c /usr/local/apache/dav/.htpasswd webdav New password: Re-type new password: Adding password for user webdav # chmod 701 /usr/local/apache/dav # chwon root:nobody /usr/local/apache/dav/.htpasswd # chmod 640 /usr/local/apache/dav/.htpasswd
# /usr/local/apache/bin/apachectl restart
4. WebDAV 클라이언트로 파일을 관리해보자.
WebDAV Client중에 SkunkDAV 클라이언트를 소개한다. 자바로 개발됐으며, 파일 목록 조회는 물론 자체 편집기가 포함되어 있어 웹상의 파일을 손쉽게 편집할 수 있다. 또한 간단한 이미지 뷰어가 내장되어 있다.
최신 jar 파일(현재 skunkdav-1.0.2.4.jar)을 받아온다. Java를 사용할 수 있는 환경하에서 다음과 같이 실행한다.
# java -jar skunkdav-1.0.2.4.jar
1) 접속화면
File -> Connect 를 선택하거나 Ctrl+D를 누르면 접속창이 나타난다.
Connect 버튼을 누른 후에 아무런 변화가 없다면 정상적으로 접속되지 않은 경우이니 접근 권한이 있는 것인지 또는 설정에 문제는 없는 것인지 httpd.conf와 access_log, error_log를 살펴보기 바란다.
2) 로긴
아파치 인증을 설정한 경우에 나타나며 ID와 비밀번호를 입력한다.
3) 파일 브라우징
- 정상적으로 연결이 되면 아래 화면과 같이 파일 목록을 조회할 수 있다. (로컬 파일이 아닌 원격 서버의 웹페이지에 있는 파일을 본 것이다.) - 오른쪽 버튼을 누르면 복사, 삭제, 이동, 이름변경, 파일 업로드, 다운로드를 할 수 있는 메뉴가 나온다. - 파일을 더블 클릭하면 파일 내용을 조회(편집화면으로 넘어감)하거나 이미지 파일이면 뷰어를 통해 볼 수 있다. - 사용할 때 주의할 것은 파일을 선택된 상태에서 Delete, Upload를 클릭하면 확인과정없이 삭제되고 업로드된다.
위의 화면에서 파일명 옆에 열쇠 모양이 보일 것이다. 바로 파일 락킹이 되었다는 표시이다. WebDAV 락 파일 DB가 생성됐는지 확인해보자.
# ls -l /tmp/Dav* -rw-r--r-- 1 nobody nobody 4096 4월 26 02:03 DavLock.dir -rw-r--r-- 1 nobody nobody 2048 4월 26 22:32 DavLock.pag
만약 DAVLockDB 지시자에서 설정한 디렉토리(위에서는 /tmp)가 웹 user가 쓸 수 없을 경우에는 아파치 error_log에는 다음과 같은 오류 메시지가 남는다.
[Mon Apr 21 21:41:40 2003] [error] [client 127.0.0.1] Could not LOCK /dav/index.html due to a failed precondition (e.g. other locks). [500, #0] [Mon Apr 21 21:41:40 2003] [error] [client 127.0.0.1] The locks could not be queried for verification against a possible "If:" header. [500, #0] [Mon Apr 21 21:41:40 2003] [error] [client 127.0.0.1] Could not open the lock database. [500, #400] [Mon Apr 21 21:41:40 2003] [error] [client 127.0.0.1] (13)Permission denied: Could not open property database. [500, #1]
4) 파일 편집
- 파일을 클릭했을 때 자동으로 편집 모드로 들어간다. - 수정 후 Ctrl+S를 누르면 바로 원격 웹서버에 저장된다. - HTML, Java, Python 등은 syntax highlighting 기능을 제공한다.
WebDAV 리눅스 파일시스템인 davfs2는 원격의 WebDAV 서버를 로컬에 마운트해서 사용하도록 해준다. 리눅스 커널의 Coda 파일시스템을 사용하므로 커널 컴파일시에 반드시 'Coda File system support' 를 Y 또는 M(모듈)으로 컴파일해야 한다.
로컬 파일처럼 사용할 수 있는 장점은 있으나 몇 가지 문제가 있다.
- ext3와 Coda 파일시스템간의 문제로 웹페이지가 ext3 파일시스템에 있을 때는 파일 수정, 삭제 등 변경 기능이 제대로 되지 않을 수 있다. - 파일 목록을 보기 위해 너무 많은 PROPFIND 매소드를 요청한다. (DoS 공격으로 오해할 수 있음) - 속도가 느리다. (truefeel의 개인적 견해)