webdav는 http를 확장하여 문서나 파일의 관리를 쉽게 하기 위해 만들어진 프로토콜이다. 그렇기에 http 포트로 서버에 접근을 한다. 물론 https도 가능하다.
필자가 사용하고 있는 개인 서버에도 webdav를 적용하기 위해 여러 글을 찾아봤는데 계속 적용이 되지 않아서 며칠동안 시도를 하다가 겨우 성공을 했다. 혹시 비슷한 상황이거나 새로 적용하려는 사람들에게 도움이 되고자 적용 방법을 정리해 보았다.
서버 환경 : Ubuntu 20.04 LTS, Apache2 (version 2.4.41)
webdav를 사용하기 위해서는 apache2와 관련 모드가 포함되어 있는 apache2-utils를 설치해야 한다.
sudo apt install apache2 apache2-utils
설치가 되었으면 webdav 모듈을 활성화 한다.
sudo a2enmod dav
sudo a2enmod dav_fs
sudo service apache2 restart
모듈 활성화 후 서버에 적용시키기 위해 apache를 재시작 한다.
※ 이전에 apache를 설치하여 사용하고 있는 사람은 autoindex를 활성화 시켜야 한다. webdav가 autoindex를 사용하기 때문이다. 필자는 이걸 모르고 괜히 apache만 계속 재설치 했었다. autoindex는 디렉토리 내용을 리스트로 보여주는 모듈이라 서버 보안에는 좋지 않기에 비활성화 했던것이 문제였다.
# autoindex를 비활성화 했을 경우 활성화
sudo a2enmod autoindex
모듈 활성화 후 webdav의 경로로 사용할 디렉토리를 정해야 한다. apache의 기본 경로를 사용해도 되고 외장하드를 연결해서 사용해도 된다. 최신 버전의 apache를 설치하면 기본 경로가 /var/www/html로 지정되어 있는데 이 경로에 webdav용 폴더를 만든다.
# apache 기본 경로에 webdav용 폴더 생성
sudo mkdir /var/www/html/webdav
폴더를 만들었다면 외부에서 접근이 가능하게 하기 위해서 소유권자를 변경해야 한다. 찾아보니 ubuntu 환경에서 apache가 접근하기 위해서는 www-data로 소유권자가 변경되어야 한다.
# webdav에 사용할 폴더 소유권자 변경
sudo chown www-data /var/www/html/webdav
외부에서 접근이 가능해 지면 제3자가 접근을 할 수도 있으니 보안을 위해 허락된 계정만 접근이 가능하도록 설정해야 한다. apache에서 제공하는 htpasswd를 사용하여 웹 서버 접근을 제한한다.
# 패스워드 파일 새로 생성
sudo htpasswd -c /etc/apache2/webdav.password 사용자이름
# 외부에서 수정할 수 없게 권한 설정
sudo chmod 640 /etc/apache2/webdav.password
# apache에서 password 파일에 접근 가능하게 소유자 변경
sudo chown root:www-data /etc/apache2/webdav.password
htpasswd로 /etc/apache2 경로에 webdav.password라는 이름으로 사용자 명과 패스워드를 저장하는 파일을 생성한다. 이 파일을 apache에 적용하면 저장된 사용자만 webdav 디렉토리에 접근이 가능하다.
password 파일의 소유자를 변경하지 않으면 apache에서 접근이 불가능해 사용자 인증을 할 수 없어 에러가 발생한다. apache의 에러 로그를 보면 파일에 접근할 수 없어서 에러가 발생했다고 기록되어 있다. 반드시 소유자를 변경해야 한다.
# apache에서 실행중인 사이트 정보 수정
sudo vi /etc/apache2/sites-available/000-default.conf
# <VirtualHost :80> 태그 안에 아래 내용 작성
# Alias '사용할 이름' '접근할 디렉토리 경로'
Alias /webdav /var/www/html/webdav
<Location /webdav>
DAV on
AuthType Basic
AuthName "webdav"
AuthUserFile /etc/apache2/webdav.password
Require valid-user
</Location>
<Directory /var/www/html/webdav>
DAV on
Options Indexes FollowSymLinks MultiViews
AllowOverride all
Order allow,deny
allow from all
</Directory>
이 글에서는 80포트에 작성을 하였지만 자신이 원하는 포트에 작성을 하여도 상관없다.
Alias는 일종의 별칭을 설정하는 것으로 apach는 기본적으로 루트 경로로 설정된 디렉토리만 접근이 가능하다. 그러나 Alias를 사용하면 루트 디렉토리에 있는 것처럼 사용할 수 있게 된다. 위의 구문은 /var/www/html/webdav 경로를 /webdav로 지정하여 사용한다는 의미다.
외장하드도 마찬가지로 외장하드가 연결된 경로를 입력하면 된다. ubuntu 20.04 데스크탑버전 기준으로 /media/계정이름 경로에 외장하드가 자동으로 마운트가 되었다.
https를 사용하고 있다면 https가 적용된 사이트에 작성을 하면 된다.
※ 2021-11-25 추가 내용
사용자 그룹별로 묶어서 인증을 해야 한다면 AuthGroupFile 옵션을 추가하면 된다. 우선 group file을 사용하기 위해 아파치 모듈을 활성화 한다.
# 웹 인증 그룹파일 사용하기 위한 모듈 활성화
sudo a2enmod authz_groupfile
그리고 그룹을 정의할 파일을 생성한다. 확장자도 필요없고 단순 텍스트 문서로 그룹명: 사용자명1 형태로 작성을 하면 된다.
# password 파일과 같은 경로에 그룹을 정의할 파일 생성
sudo vi /etc/apache2/authGroup
# 파일 내용 예시
# 그룹명: 사용자명1 사용자명2 형식으로 파일 작성
admin: admin1 admin2
user: user1 user2
그룹을 정의한 다음 webdav 경로 설정을 아래와 같이 적용한다.
<Location /webdav>
DAV on
AuthType Basic
AuthName "webdav"
#그룹 파일 경로
AuthGroupFile /etc/apache2/authGroup
AuthUserFile /etc/apache2/webdav.password
# 특정 그룹을 허용해야 하므로 아래와 같이 설정
Require group user
</Location>
Require 옵션에서 group으로 지정해야 인증 정보를 그룹별로 지정할 수 있다. group 뒤에는 접근을 허용할 그룹명을 적으면 된다. 복수의 그룹 설정도 가능하다.
작성을 한 후 변경된 내용을 적용하기 위해 apache를 재시작 한다.
sudo service apache2 restart
이제 브라우저를 통해 웹 서버에 접속을 하면 webdav 디렉토리의 내용이 보이게 된다. url을 입력때는 마지막에 Alias에서 지정한 별칭을 붙여야 한다. 만약 자신의 서버의 주소가 http://192.168.0.1이라면 http://192.168.0.1/webdav 로 접속을 해야 한다는 의미다.
'Ubuntu > Apache 웹서버' 카테고리의 다른 글
[Apache]GeoIP 사용하여 해외 접속 차단하기(+로그에 국가 출력) (0) | 2022.01.20 |
---|