본문 바로가기
Linux/Pogoplug

포고플러그 시리즈4에 아치리눅스 사용하기 (9) - 아파치 웹서버에 WebDAV 설정하기

by 달토끼남편 2022. 10. 4.

[2013-08-09 업데이트]

내용 중에 권한설정 부분이 누락된 것이 있어서 급히 보충하였습니다.

특정디렉토리에서 읽기/쓰기가 가능하도록 설정하는 부분입니다.

2번 항목을 참고하세요.

 

 

 

웹서버도 설치를 했으므로 이제 원래 목적인 WebDAV를 지원하는 스마트폰 앱(nplayer 등)에서 동영상 등을 볼 수 있도록 WebDAV도 설정을 해보자.

 

WebDAV(Web Distributed Authoring and Versioning)은 NFS(Netwrok File System)나 SMB(Samba)같은 것을 대신해 웹상에서 읽기와 쓰기가 가능한 HTTP의 확장기능으로 웹상에서 파일전송이 가능하다.

 

※ 참고 : https://wiki.archlinux.org/index.php/WebDAV

             http://cafe.naver.com/pogolinux/1049

             http://tldp.org/HOWTO/Apache-WebDAV-LDAP-HOWTO/

 

 

0. WebDAV vs FTP

 

 

잠시 이해를 돕기 위해 WebDAV와 FTP의 차이점에 대해 인터넷 상의 글을 옮겨본다.

 

1. WebDAV는 하나의 TCP 연결을 사용하기 때문에 방화벽, NAT와 프록시 등을 우회하기 위한 설정이 쉽다.

2. 크기가 작은 파일들을 다량으로 전송할 때는 각각의 파일에 대한 연결을 만들 필요가 없기 때문에 FTP에 비해 조금 빠르다.

3. gzip 압축은 HTTP를 위한 표준이지만 FTP에서는 아니다. 

4. HTTP는 FTP에서는 정의되지 않은 다양한 인증방법이 있다. 예를 들어, NTLM과 Kerberos 인증은 HTTP와 FTP에서는 공용이지만 FTP에서는 서버와 클라이언트가 모두 사용하지 않는 한 이용이 어렵다. 

5. WebDAV는 부분 전송을 지원하고 FTP에서는 부분전송이 어렵다.

 

하지만 SFTP(SSH File Transfer Protocol)는 위에서 말한 WebDAV의 장점들 뿐 아니라 WebDAV보다 좀더 풍부한 특징들이 있어 관리자나 개발자들이 선호하는 경향이 있다. 

 

1. 설정하기

 

선행되어야 할 것은 HTTP 프로토콜을 이용하는 것이므로 당연히 웹서버(여기서는 아파치 서버)가 구축되어 있어야 한다.

아래 설치안내에서 아파치 서버 부분만 이용해도 된다.

 

포고플러그 시리즈4에 아치리눅스 사용하기 (8) - 아파치 웹서버+DB+PHP+phpMyAdmin 설치하기

 

 

httpd.conf를 열어 ServerRoot "/etc/httpd" 라고 되어 있는 부분 다음 정도에 아래 내용을 추가한 뒤 저장 후 빠져나온다.

 

nano /etc/httpd/conf/httpd.conf

 

 

#WebDAV

DAVLockDB /home/httpd/DAV/DAVLock

 
Alias /dav "[내 외장하드 경로]" 
 
<Directory "[내 외장하드 경로]">
  DAV On
  AllowOverride None
  Options Indexes FollowSymLinks
  IndexOptions NameWidth=* #웹브라우저에서 접속 시 긴 파일명 등도 제대로 보인다.
  Order allow,deny
  Allow from all
  AddDefaultCharset utf-8 #한글표시가 제대로 되도록 한다.
  IndexOptions Charset=utf-8 #한글표시가 제대로 되도록 한다.
</Directory>
[내 외장하드 경로]는 df -h 를 통해 확인할 수 있다.
나같은 경우는 FTP를 통해 파일을 업/다운로드하고 있어서 주로 사용하는 FTP 사용자의 디렉토리 경로를 설정해 주었다.
 
ex) /media/mypogo/nekojp
 
 
2. 디렉토리 생성 및 권한설정
 
이 부분이 조금 중요하다.
설정에 보면 DAVLockDB /home/httpd/DAV/DAVLock 이라는 부분이 있다.
DAV는 실제로 만들어주어야 하는 디렉토리다.
그리고 DAV 디렉토리의 소유권한을 아파치 서버 사용자(http)로 변경해야 한다.
프로세스를 확인해서 실제 아파치 서버가 어느 사용자로 실행되는지 확인해 보자.
 
 
ps -ef | grep httpd
 
 
root     29173     1  0 Aug08 ?        00:00:05 /usr/bin/httpd -k start
http     29174 29173  0 Aug08 ?        00:00:00 /usr/bin/httpd -k start
http     29175 29173  0 Aug08 ?        00:00:03 /usr/bin/httpd -k start
http     29176 29173  0 Aug08 ?        00:00:01 /usr/bin/httpd -k start
http     29177 29173  0 Aug08 ?        00:00:01 /usr/bin/httpd -k start
http     29178 29173  0 Aug08 ?        00:00:02 /usr/bin/httpd -k start
http     29179 29173  0 Aug08 ?        00:00:03 /usr/bin/httpd -k start
http     29180 29173  0 Aug08 ?        00:00:02 /usr/bin/httpd -k start
http     29183 29173  0 Aug08 ?        00:00:03 /usr/bin/httpd -k start
http     29184 29173  0 Aug08 ?        00:00:02 /usr/bin/httpd -k start
http     29185 29173  0 Aug08 ?        00:00:02 /usr/bin/httpd -k start
http     29186 29173  0 Aug08 ?        00:00:02 /usr/bin/httpd -k start
root     32606 32427  0 10:04 pts/0    00:00:00 grep httpd
위와 같이 http 사용자로 실행이 되고 있는 것을 확인할 수 있다.
 
그리고 DAVLockDB를 저정할 디렉토리를 생성한다. (이것은 설정과 관련된 부분이므로 자신이 원하는 경로에 생성해도 될 듯 싶다.)
 
 
mkdir -p /home/httpd/DAV
chown -R http:http /home/httpd/DAV #쓰기가 가능해진다.
ArchLinux의 설명에 보면 WebDAV를 위한 별도의 디렉토리를 만들게 되어있다.
우리는 위에서 외장하드를 통째로 WebDAV로 쓸 수 있도록 설정했다.
따라서, 외장하드의 특정 디렉토리에만 쓰기권한을 주는 것이 좋을 듯 싶다. (디렉토리 권한은 755)
 
mkdir -p [외장하드 경로]/dav
chmod -R 755 [외장하드 경로]/dav
chown -R nobody.nobody [외장하드 경로]/dav
 
systemctl restart httpd
 
위와 같이 하면, 브라우저로 접속했을 때 내 외장하드의 디렉토리들이 다 읽기가 가능해 지고, /dav 디렉토리에는 Windows용 프로그램인 NetDrive 등을 통해 쓰기까지 가능해진다. (Mac OSX에서는 여러 설정을 변경해봤지만 쓰기가 안되는 것 같다. 다른 방법이 있을 듯)
 
 
 
자, 한번 웹브라우저를 통해 접속을 해보자.
 
http://[내부 ip주소]/dav 또는 http://[내 도메인명]/dav (공유기의 DDNS를 통해 도메인을 만들 수 있다.)를 통해 접속하면 아래와 같은 화면이 나온다.
마치 웹브라우저에서 ftp로 접속했을 때와 유사한 화면이다.
(모자이크 부분은 이상한 디렉토리 아니니 상상은 금물...
)
 
 
 
자, 성공적으로 접속이 되고 외장하드의 내용도 보인다.
하지만 마지막 하단의 서버 정보가 노출되는게 좀 신경에 거슬리므로 보이지 않게 해주자.
#처리가 되어 있는 부분은 원래 옵션이다.
ctrl+w 찾기기능을 이용해 Full -> Prod, On->Off로 변경해 주자.
 
nano /etc/httpd/conf/extra/httpd-default.conf
 
 
#ServerTokens Full
ServerTokens Prod
 
#ServerSignature On
ServerSignature Off
 
 
systemctl restart httpd
다시한번 접속해 보면 하단의 서버정보가 보이지 않게 된다.
 
 
 
 
 
3. 인증하기
 
그런데 브라우저를 통해 접속하면 인증처리가 안되어 있어 바로 디렉토리가 보이는 단점이 있다.
plain 방식을 통해 인증처리를 해보자. (Wiki의 Authentication 부분에 digest 방식도 있으므로 원하는 것을 사용하면 된다.)
 
htpasswd -c /etc/httpd/conf/passwd webdav (webdav에는 원하는 사용자명을 넣으면 된다.)
※ 참고 : htpasswd를 처음 사용해서 파일을 만들 때만 -c 옵션을 사용하고 그 다음에 다른 사용자를 추가할 때는 -c 옵션없이 사용해야 한다.
 
 
 
 
httpd.conf 파일을 수정해야하는데 앞서 만든 부분에서 빨간색으로 표시된 부분을 추가한다.
그리고 httpd를 다시 시작하는 것도 잊지 말자.
 
nano /etc/httpd/conf/httpd.conf
 
 
<Directory "[내 외장하드 경로]">
  DAV On
  AllowOverride None
  Options Indexes FollowSymLinks
  IndexOptions NameWidth=*
  Order allow,deny
  Allow from all
  AddDefaultCharset utf-8
  IndexOptions Charset=utf-8
 AuthName "WebDAV"  (WebDAV는 원하는 문구로 수정가능)
 AuthType Basic (plain 인증방식에서는 Basic을 digest 인증방식에서는 Digest 사용) 
 AuthUserFile /etc/httpd/conf/passwd
 Require user webdav (앞서 만든 사용자명과 일치시켜준다.)
</Directory>
 
 
systemctl restart httpd
다시한번 접속해 보면 아래와 같이 인증을 요구하는 창이 나타난다.
앞서 만든 WebDAV 전용 사용자명과 패스워드를 입력하면 된다.
 
Require user 사용자명 대신에 Require valid-user 를 사용할 경우 해당 디렉토리에는 /etc/httpd/conf/passwd 파일에 등록된 사용자라면 누구나 접속이 가능해 진다.
 
 
 
 
 
 
nplayer에서 WebDAV에 설정해 주고 한번 접속해 보았다.
FTP로 접속했을 때보다 지연시간이 별로 없이 디렉토리의 목록 등을 보여주는 것 같다.
 
 
 
 
 
 
 
[2013-08-09 업데이트] 
 
Windows에서 WedDAV 디렉토리에 연결하려면 간단하게 NetDrive 라는 프로그램을 이용하면 된다.
 
 
 
Server Type을 WebDAV로 바꿔주고 각종 접속정보를 입력하면 된다.
(상단 Language 메뉴에서 한글로 메뉴를 바꿀 수도 있다.)
혹 접속 후에 한글이 제대로 보이지 않거나 한다면 해당 접속정보에서 Advanced를 눌러 Encoding 을 UTF8 등으로 바꿔주면 된다.
 
현재까지 테스트해 본 결과 WebDAV 디렉토리의 권한이 제대로 주어지면 읽기/쓰기가 모두 가능하다.
(다만 설정을 수차례 바꿔보아도 Mac OSX에서는 권한을 제대로 설정해도 쓰기가 안되는 현상이 있다.)