환경: Windows7 64bit, Apache2.2.25


윈도우는 IIS를 이용해서 webdav서버를 구성할수있다.

그런데 내가 설정을못하는건지 아무리 건드려봐도 접속부분에서 오류가 생긴다.

(로컬네트워크에선 괜찮지만 외부접속이라든지 스마트폰에서 접속시 비정상작동..) 또한 왠지 윈도우가 무거워지는거같으며, 나처럼 각 폴더마다 사용자권한을 부여해주려면 계정을 건드려줘야해서 불편했다.


그래서 찾아보던중 친숙한 아파치웹서버를 이용해서 WebDAV를 손쉽게 구축할수 있고, 너무나 깔끔하게 접속이 잘된다.



일단 아파치를 다운받아 설치가 다되있다고 가정하고 포스팅함.

( C:\Apache2.2 디렉토리에 설치했다고 가정)


1. LockDB설정을 위해 C:\Apache2.2\var 폴더 생성

2. conf/httpd.conf 를 편집해 

    webdav구동에 필요한 모듈을 주석해제처리함.

LoadModule auth_digest_module modules/mod_auth_digest.so

LoadModule dav_module modules/mod_dav.so

LoadModule dav_fs_module modules/mod_dav_fs.so

LoadModule dav_lock_module modules/mod_dav_lock.so

.....

Include conf/extra/httpd-dav.conf

.....


3. 사용자 추가

커맨드(cmd)명령창 C:\apache2.2 디렉토리 위치에서..

apache2.2> bin\htdigest -c 파일명 AuthName 아이디


사용예)  bin\htdigest.exe -c WEBDAV_USER WEBDAV_LUUAZ luuaz

- AuthName은 httpd-dav.conf설정할때 필요하며, 로그인시 표시됨.(이름표붙인다고 생각하면됨)

-  -c옵션은 최초생성할때옵션이다. 두번째아이디생성부터 -c옵션을 붙이면안되며, 

   붙일시 기존에 생성했던 아이디는 다 없어집니다.

- 암호변경: -c옵션을 제거하고 동일한 명령을 내리면 암호를 변경함.


4. 그룹 추가

* 그룹은 메모장이나 에디터로 수동으로 생성하면 된다.

  (ex: WEBDAV_GROUP으로 생성)


admins: luuaz

users: simpsons tvg test


- admins와 users의 그룹을 만들고 각사용자를 그룹으로 추가함.(구분자는 공백)



5. conf/extra/httpd-dav.conf 설정

* 이 예제는 H드라이브를 /home으로 지정합니다.

* admins그룹은 읽기/쓰기/수정권한을 모두주며 그외는 읽기권한만 줍니다.


# Alias를 설정합니다. H드라이브를  /home으로 연결합니다.

Alias /home "H:/"  


<Directory "F:/">

Dav On


Order Allow,Deny

# 내부네트워크에서만 공유할시

# Allow from 192.168.0.0/16 127.0.0.1  형식으로!

Allow from all


# AuthType은 Digest인증으로 변경하고 AuthName으로 webdav이름을 설정합니다.

AuthType Digest

AuthName WEBDAV_LUUAZ


# 이전단계에서 생성한 user와 group파일경로를 설정합니다.

AuthUserFile "C:/Apache2.2/WEBDAV_USER"

AuthGroupFile "C:/Apache2.2/WEBDAV_GROUP"

AuthDigestProvider file

# FollowSymLinks는 리눅스에 심볼릭링크용으로 사용하며 (윈도우는 뭔짓을해도 사용불가, 사용할수 있는 방법이 있으면 알려주세요)

Options FollowSymLinks Indexes

# !!읽기 권한설정!! 읽기권한을 설정합니다.

<Limit HEAD GET OPTIONS PROPFIND>

# Require valid-user로 하면 사용가능한 유저에게 모두 부여합니다.

Require user luuaz

</Limit>


# 쓰기권한설정!! admins그룹만 허용합니다.

# 아래 Limit부분은 예제용이며

# <LimitExcept HEAD GET OPTIONS PROPFIND>과 동일합니다.

<Limit POST MKCOL PUT DELETE LOCK UNLOCK COPY MOVE PROPPATCH>

Require group admins

</Limit>

</Directory>



6. Apache Monitor에서 재시작.






참고사항!


1. 포트 및 서버네임변경

* httpd.conf에서...

Listen 8822

...

ServerName 127.0.0.1:8822

...


2. 최상위경로 인덱스 막기.

* 보안을 위해 최상위경로(/)의 파일인덱스권한을 없앤다.

* httpd.conf -> <Directory /> 에서...

Options에있는 Indexes 제거


3. 파일인덱스목록화면이 자세히보기가 아닌 이름만 나온다.

   자세히보기(이름,날짜,크기, 정렬 등등) 로 하려면

* httpd.conf에서 주석해제

Include conf/extra/httpd-autoindex.conf


기타 설정한게 많았지만, 나머지는 나중에 추가포스팅함.






SSL 보안접속 설정


1. Apache2.2/bin위치에서 cmd.

2. 입력

bin> openssl req -config ../conf/openssl.cnf -new -out test.csr -keyout test.pem


입력하면 아래처럼 패스워드와 인증서정보를 요구한다.

Loading 'screen' into random state - done

Generating a 1024 bit RSA private key

.....................................................++++++

...........................................++++++

writing new private key to 'foo.pem'

Enter PEM pass phrase: PASSWORD입력

Verifying - Enter PEM pass phrase: PASSWORD다시입력

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [AU]:KO

State or Province Name (full name) [Some-State]:SEOUL

Locality Name (eg, city) []:SEOUL

Organization Name (eg, company) [Internet Widgits Pty Ltd]:Luuaz

Organizational Unit Name (eg, section) []: 

Common Name (e.g. server FQDN or YOUR name) []:서버도메인(일치하지않으면 경고)

Email Address []:관리자이메일


Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []: 공백으로남겨둠

An optional company name []:공백으로남겨둠


3. 입력

bin> openssl rsa -in test.pem -out test.key

   ~~~~~~ 암호입력


4. 입력

bin> openssl x509 -in test.csr -out test.crt -req -signkey test.key -days 3650(유효기간은 마음대로~)


5. bin 디렉토리 아래에 

   test.crt, test.csr, test.key, test.pem 파일이 생성된다

   실제 필요한것은 test.crt와 test.key이다.

   추후에 더 인증을 할필요가 없으면 

   다른두개(test.csr, test.pem)은 지워도 된다.

   필요한 인증서는 conf에 위치로 복사한다.


6. httpd.conf에서 주석제거

LoadModule ssl_module modules/mod_ssl.so

.....

Include conf/extra/httpd-ssl.conf

.....


7. conf/extra/httpd-ssl.conf 편집

# 포트변경

Listen 8823

.....

# 인증서경로 설정

SSLCertificateFile "C:/Apache2.2/conf/luuaz.crt"

SSLCertificateKeyFile "C:/Apache2.2/conf/luuaz.key"



8. Apache2 재시작.


참고사항.

* 예제설정에서 HTTP는 8822, HTTPS는 8823포트로 설정을 하였는데

  HTTP포트로 접속시 강제로 HTTPS포트로 변경하려면 

  httpd.conf에 아래 설정을 입력한다.

  (또다른 설정도 있는데 테스트도안해보고 귀찮아서 패스~)

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteCond %{HTTPS} !on

RewriteRule .* https://%{SERVER_NAME}:8823%{REQUEST_URI} [R,L]

</IfModule>





끝. 



+ Recent posts