13.4.회원 전용 특정 디렉토리 만들기
사용자 인증을 통해 특정 회원만 사용할 수 있는 디렉토리를 만들 수 있습니다.
웹호스팅을 사용하는 도중 회원들만 볼 수 있는 문서나 디렉토리를 만들어야 할 때가 있습니다. 예를 들어 회원들의 주소록이나 사진 파일과 같이 외부인이 보면 안되는 문서를 홈페이지에 올려놓을 수 있습니다. 또는 유료 콘텐츠 사이트를 운영하면서 회비를 내는 회원들만 콘텐츠를 열람할 수 있게 만들고 싶습니다. 이런 경우 외부인이 접근을 막아야 합니다.
외부인의 접근을 막고 지정된 회원들만 사용할 수 있는 프로그램이 사용자 인증 프로그램입니다. 특정 문서를 보려고 할 때 사용자 인증 프로그램이 실행되면서 ID와 암호를 요구합니다.
사용자 인증을 하는 방법은 여러 가지가 있습니다. 첫 번째로 홈뱅킹 사용 때처럼 사용자 인증 프로그램을 사용자의 PC에 설치하는 방법입니다. 이는 번거로울 뿐만 아니라 기술적으로도 어려움이 많습니다. 두 번째로 회원 전용 게시판을 사용하는 겁니다. 요즘 나오는 게시판은 등록된 회원들만 열람할 수 있도록 설정하는 기능이 있습니다. 그렇지만 게시판의 열람은 제한할 수 있지만 특정 디렉토리 자체의 접근을 막을 수 없다는 단점이 있습니다. 세 번째는 특정 디렉토리에 암호를 거는 방법입니다. 이 방법은 특정 디렉토리 접근 자체를 차단할 수 있기 때문에 가장 효과적인 방법입니다.
pw 프로그램을 이용하면 특정 디렉토리 접근을 막을 수 있습니다.
특정 디렉토리 접근을 차단하는 방법에 사용하는 프로그램은 여러 가지입니다. 웹호스팅 업체에서 제공하는 프로그램을 사용할 수도 있고, 각종 공개용 프로그램을 사용할 수도 있습니다. 일단 이 책에서는 가장 쉽게 구할 수 있는 pw.tar 파일을 사용합니다.
pw.tar 파일을 자신의 홈페이지에 설치하면 pw가 설치된 디렉토리에 접근할 때 ID와 암호를 물어봅니다. 이때 ID와 암호를 제대로 입력하면 해당 디렉토리에 접근할 수 있어 모든 문서를 볼 수 있지만 암호를 입력하지 못한다면 접근 자체를 막아버립니다.

**사진: [로그인] 아이콘을 누르면 pw가 설치된 디렉토리 밑의 HTML 문서로 접속합니다.

**사진: pw 프로그램이 실행되면서 ID와 암호를 묻습니다.

**사진: 세 번 연속 암호를 틀리면 접근 실패 안내문이 표시됩니다.

**사진: ID와 암호가 맡으면 해당 디렉토리로 접속이 됩니다.
pw는 CGI 지원 디렉토리에 설치하며, pw/member 디렉토리 밑에 HTML 문서를 올려놓습니
다.
pw.tar 프로그램은 CGI 프로그램이므로 CGI를 지원하는 디렉토리에 설치해야 합니다. 그리고 접근을 막을 문서는 pw/member 디렉토리의 서브 디렉토리에 설치하면 됩니다.
pw.tar 프로그램을 설치하는 과정은 wwwboard 프로그램을 설치하는 과정과 비슷합니다.
[pw.tar] 설치 과정
1. pw.tar을 홈페이지 서버에 올립니다.
2. 압축을 풀어 설치합니다.
3. 환경 설정 파일을 만들어 올립니다.
4. 관리자 모드로 들어가 회원 ID를 등록합니다.
5. pw 서브 디렉토리에 HTML 문서를 올립니다.
프로그램을 서버에 올려 압축을 푸는 방법은 앞서 설명했으니 환경 설정 파일을 만드는 과정만 말씀 드리겠습니다.
pw/member 디렉토리에 있는 .htaccess 파일을 수정합니다.
pw 파일의 압축을 풀면 pw라는 디렉토리가 생기고, pw 디렉토리에는 member 디렉토리가 생깁니다. pw 디렉토리에는 주 프로그램 파일인 admin.cgi가 있습니다. 그리고 member 디렉토리에 .htaccess라는 파일과 .htgroup, .htpasswd라는 세 개의 파일이 있습니다. 여러분이 할 일은 이들 파일을 수정하는 일입니다.

**사진: pw 디렉토리 안의 파일. admin.cgi가 주 프로그램입니다.

**사진: pw/member 디렉토리 안의 파일
admin.cgi의 앞 부분 수정하기
파일을 수정하려면 먼저 해당 파일을 FTP 프로그램을 이용해 자신의 PC로 전송받습니다. 그리고 윈도의 메모장을 이용해 해당 파일을 수정합니다.
먼저 admin.cgi에서 수정할 내용은 다음과 같습니다. 가장 중요한 것은 admin.cgi에서 경로를 설정하고 관리자 ID와 암호를 등록하는 것입니다. admin.cgi의 앞 부분을 다음과 같이 수정합니다. 좀더 자세한 것은 admin.cgi를 보면 ## 표시로 설명이 되어 있습니다. 따라서 admin.cgi 파일을 참고하면 됩니다.
[보기] admin.cgi에서 수정할 부분
#!/usr/bin/perl
$user_name = 'hangul';
$pass = '1234';
$location_of_cgi_lib = "./cgi-lib.pl";
$location_of_mail_lib = "./mail-lib.pl";
$script_owners_address ="informor\@informor.co.kr";
$mail_administrator = 1;
$location_of_members_list = "/home8/informor/public_html/pw/member";
$group_file = "\.htgroup";
$location_of_password_file = "/home8/informor/public_html/pw/member";
$pass_word_file = "\.htpasswd";
admin.cgi 내용 안에 도움말이 들어 있으니 참고하기 바랍니다.
user_name에는 관리자 ID를 기록합니다. 저는 'hangul'을 사용했습니다. pass는 관리자 암호입니다.
$script_owners_address 부분은 전자우편 주소를 적는 것인데 "informor\@informor.co.kr"처럼 @ 앞에 \ 기호가 붙는다는 점에 주의합니다.
$mail_administrator = 1; 로 설정하면 회원을 추가할 때마다 편지를 보내고, 0으로 설정하면 편지를 안보냅니다.
$location_of_members_list 에는 암호를 걸 디렉토리의 경로를 적어주면 됩니다. 여러분의 도메인 웹호스팅 서버에서 사용하는 경로를 적어주면 됩니다.
$location_of_password_file 역시 여러분의 경로를 적어주면 됩니다.
이하 내용은 수정하지 않아도 됩니다.
.htaccess 수정하기
.htaccess에서 수정할 내용은 다음과 같습니다.
[.htaccess 파일에서 고칠 내용]
AuthName "사용자 인증"
AuthType Basic
AuthUserFile /home/LoginID/public_html/userdir/.htpasswd
AuthGroupFile /dev/null
require valid-user
해당 파일에 들어갈 내용은 다음과 같습니다.
1. AuthName : 암호를 물을 때 화면에 표시되는 문장입니다. '암호' '회원용' '회원만 접근할 수 있습니다.' 등의 적당한 낱말을 사용하면 됩니다.
2. AuthUserFile : 사용자ID와 패스워드가 있는 경로와 파일을 지정합니다.
이때 경로는 반드시 절대경로로 표시해 주어야 합니다. 그리고 파일 이름은 .htpasswd라고 지정해야 합니다. AuthUserFile의 절대 경로는 알고 싶다면 해당 디렉토리에서 pwd 명령을 내리면 됩니다.
3. AuthGroupFile : 그룹파일인 .htgroup 파일의 경로를 지정합니다. 역시 절대 경로로 지정합니다.
4. AuthType : 수정할 필요 없이 보기와 같이 그대로 사용하면 됩니다.
실제로 .htaccess 파일의 내용을 살펴보겠습니다. 아래 보기는 www.x119.co.kr에서 사용하는 .htaccess 파일의 내용입니다. www.x119.co.kr은 index.html 파일이 있는 디렉토리에서 pw 압축을 풀었습니다. index.html 파일을 올리는 경로는 홈디렉토리 밑의 www 디렉토리로 서버의 루트에서 내려가는 절대 경로는 /home/hosting_users/hangul99/www/입니다. 따라서 .htaccess 파일이 있는 경로는 다음과 같습니다.
[보기]
/home/hosting_users/hangul99/www/pw/member/.htpasswd
이 경로는 .htaccess 파일 안에 제대로 적어주어야 합니다.
[보기1] .htaccess 파일을 고친 보기
AuthUserFile /home/hosting_users/hangul99/www/pw/member/.htpasswd
AuthGroupFile /home/hosting_users/hangul99/www/pw/member/.htgroup
AuthName "회원들만 접근가능합니다."
AuthType Basic
require group members

**사진: .htaccess 파일의 내용
.htgroup 파일에는 그룹 ID를 입력해야 하는데 다음과 같은 내용이 들어가면 됩니다. 'members: hangul'에서 hangul이 그룹 ID입니다.
[보기] .htgroup 파일의 내용
members: hangul
.htpasswd 파일을 만들어야 하며 텔넷이나 관리자 모드를 이용합니다.
.htpasswd 파일은 사용자 ID와 암호를 저장한 파일로 사용자가 안의 내용을 입력해 만들어야 합니다. .htpasswd 파일을 만드는 방법은 두 가지입니다. 첫 번째는 텔넷으로 접속해 직접 명령어를 입력해 사용자를 추가하는 방법입니다.
예를 들어 hangul이라는 ID를 관리자 ID로 사용할 것이므로 hangul ID를 제일 먼저 추가해야 합니다. 텔넷으로 접속해 pw/member 디렉토리에서 다음과 같은 명령을 내립니다.
[보기]
/usr/sbin/htpasswd -c .htpasswd hangul
이렇게 명령을 내리면 hangul이라는 ID를 추가시키기 위해 암호를 물어봅니다. 다음과 같은 문장이 표시됩니다. 이때 암호를 입력해주면 hangul이라는 사용자와 hangul이 사용할 암호가 입력됩니다.
-c 옵션은 맨 처음에 .htpasswd 파일을 생성할 때 한 번만 사용하면 됩니다.
[보기]
Adding user hangul
New password:
Re-type new password:
두 번째 사용자 추가 때부터는 -c 옵션을 사용하지 않습니다. 따라서 두 번째 사용자로 agadal을 추가하고 싶다면 다음과 같이 입력하면 됩니다.
[보기]
/usr/sbin/htpasswd .htpasswd agadal
이때 오류가 발생할 수 있는데 그 이유는 웹호스팅 업체에 따라서 /usr/sbin/htpasswd 경로가 틀릴 수 있기 때문입니다. 이런 경우에는 해당 웹호스팅 업체에 문의해야 합니다.
관리자 모드를 사용해 회원을 추가하는 것이 좋습니다.
.htpasswd에 사용자를 추가하는 두 번째 방법은 관리자 모드로 들어가 사용자를 추가하는 방법입니다. 관리자 모드로 들어가려면 admin.cgi를 실행시켜야 합니다. admin.cgi는 pw 디렉토리에 있습니다. 따라서 브라우저 주소란에 다음과 같이 주소를 입력하면 됩니다.
[형식]
자신의 도메인주소/pw/admin.cgi
[보기]
http://www.x119.co.kr/pw/admin.cgi

**사진: pw 디렉토리의 파일. admin.cgi가 주 프로그램입니다.
admin.cgi 프로그램을 이용해 회원 관리하기
다음 보기는 제가 관리하는 홈페이지 중의 하나로 admin.cgi로 접속해 회원을 추가하거나 삭제하는 경우입니다.
**따라하기:
(1) http://www.informor.co.kr/pw/admin.cgi를 입력해 관리자 모드로 접속합니다. 여러분은 여러분이 설치한 pw 프로그램의 주소를 입력합니다. 관리자 모드의 초기값은master와 12345입니다. 만약 admin.cgi를 통해 따로 ID를 등록했다면 등록한 내용을 사용하기 바랍니다.

**사진: 초기 값은 master와 12345입니다.
(2) 암호가 틀리면 사용자가 틀리다고 안내문이 표시됩니다.

**사진: ID나 암호가 틀리면 나타나는 화면
(3) 관리자 ID와 암호를 제대로 입력합니다.

**사진: 관리자 ID와 암호를 입력합니다.
(4) 관리자 화면이 나타납니다. 여기에는 이미 등록된 사용자 목록이 표시됩니다. 암호는 전부 특수한 문자로 변환된 상태라 그냥 봐서는 암호를 알 수 없습니다.

**사진: 관리자 모드 화면
(5) 맨 아래로 화면을 스크롤하면 관리자 메뉴가 나타납니다.

**사진: 맨 아래에 있는 ID 관리 아이콘
(6) 회원 ID를 추가하려면 아이디와 암호를 입력하고 [ID 추가] 아이콘을 누르면 됩니다. 아이디로 agadal을 입력하고 암호로 12345678을 입력했습니다.

**사진: 아이디와 암호를 입력하고 [ID 추가] 아이콘을 누릅니다.
(7) agadal 회원의 등록을 알리는 안내문이 표시됩니다.

**사진: agadal ID가 추가되었다는 안내문
(8) 이번에는 조금 전에 추가된 agadal 회원의 ID를 삭제해보겠습니다. 아이디에 agadal을 입력하고 암호인 12345678을 입력하고 [ID 삭제] 아이콘을 누릅니다.

**사진: agadal ID와 암호를 입력하고 [ID 삭제] 아이콘을 누릅니다.
(9) agadal 회원의 삭제를 알리는 안내문이 표시됩니다.

**사진: agadal ID가 삭제되었다는 안내문
회원 암호를 기록해두어야 ID를 삭제할 수 있습니다.
이렇게 해서 회원 ID를 추가하거나 삭제하면 회원 관리가 끝납니다. 주의할 점은 회원의 암호가 암호화된 상태로 표시되므로 ID 삭제를 위해서는 회원을 추가할 때 사용한 암호를 잘 기록해두어야 한다는 점입니다.
회원 관리가 된 다음에 실제로 해당 홈페이지에 접속해보겠습니다.
**따라하기:
(1) 해당 홈페이지에 접속해 [로그인] 아이콘을 선택합니다.

**사진: [로그인] 아이콘을 누릅니다.
(2) 사용자 인증 디렉토리로 링크된 아이콘이라 사용자 ID와 암호를 묻는 화면이 나타납니다.

**사진: ID와 암호를 묻습니다.
(3) ID나 암호를 세 번 연속 틀리면 접속 실패를 알리는 오류 안내문이 표시됩니다.

**사진: 암호가 세 번 연속 틀리면 접속 실패합니다.
(4) 이번에는 제대로 된 ID와 암호를 입력합니다.

**사진: ID와 암호를 제대로 입력합니다.
(5) ID와 암호가 맞으면 암호가 걸린 디렉토리의 문서를 보여줍니다.

**사진: 링크된 문서와 디렉토리로 접속이 됩니다.
실제로 여러분이 pw 프로그램을 사용하느냐 여부는 중요하지 않습니다. 아마 여러분은 다른 형태로 사용자 인증 프로그램을 사용할 수 있을 겁니다. 그렇지만 어떤 프로그램을 선택하건 여러분 스스로 프로그램을 설치할 수 있다는 사실은 확인할 수 있습니다. 프로그램을 설치하는 도중에 많은 어려움이 있겠지만 질문하고 답을 얻는 과정을 통해 조금씩 홈페이지 관리 능력이 길러집니다.
책에는 한정된 지면 관계로 웹호스팅에 대한 모든 내용을 다 수록하지 못했습니다. 좀더 많은 내용은 강의나 홈페이지의 문서를 통해서 제공하도록 하겠습니다.