Server & OS

사용자 인증 - by .htaccess & .htpasswd

컨텐츠 정보

본문

password를 묻는 대화상자(dialogue box)는 cgi 나 java script으로 만든 것이 아닌 APACHE httpd Server 데몬과, 사용자가 만드는 두 개의 화일을 이용한 웹서버의 기본 인증 절차에 의한 것입니다.

이 두 개의 화일이름은 각각 .htaccess 화일과 .htpasswd 화일인데 그 화일들을 패스워드를 걸 페이지가 있는 디렉토리에 두면, 외부인이 브라우저로 그 디렉토리에 있는 화일들(HTML화일들)에 접근을 할 때, 패스워드를 묻는 대화상자를 내보내게 합니다.

그러므로 아래와 같은 방식으로 두 화일을 설치하면 특정페이지에 쉽게 패스워드를 설치 할 수 있습니다.

[.htaccess 화일 만들기]

password를 걸 디렉토리에 다음 내용의 화일을 pico나 vi로 만듭니다. 화일 이름은 .htaccess 로 합니다.(화일이름 맨앞에 .(쩜)이 들어갑니다.) 가능한한 unix/linux 의 에디터로 만드십시오. PC에서 아무 에디터로 작업하여 업로드해도 됩니다만, 반드시 아스키 모드로 업로드 하십시오. 이것은 웹서버(httpd)의 스크립트로 읽혀지므로 조금이라도 잘못 입력하면 Server Error가 납니다. 실행했을때 에러가 나는 경우는 대부분 이 경우입니다.
        AuthName        C.G.Kim
        AuthType        Basic
        AuthUserFile        /home1/BLUEHOUSE/cgklyk/public_html/test2/.htpasswd
        AuthGroupFile        /dev/null
        <Limit GET POST>
        require                valid-user
        </Limit>


위의 화일 내용 중에 AuthName 부분은 그 페이지를 나타낼 수 있는 적당한 이름을 씁니다. AuthUserFile 부분은 .htpasswd 화일의 디스크상 물리적 경로 를 씁니다. 나머지는 위와 똑같이 쓰면 됩니다.
[.htpasswd 화일 만들기]

이 화일을 만들기 위해서는 htpasswd라는 프로그램을 사용해야 하는데, 하이텔 인터넷서비스와 같은 대형 ISP에서는 그 프로그램을 보안상 일부러 지원하지 않습니다. 그래서 그 프로그램을 제가 다른 ftp에서 가져왔습니다. 여기를 왼쪽 마우스 버튼으로 누른 후 save as 명령을 사용하여 다운로드 받아서 자신의 디렉토리에 업로드 한후 unzip htpasswd.zip 의 명령으로 압축화일을 풀면 htpasswd 라는 실행화일이 생깁니다.
(리눅스(Linux) 용 htpasswd는 /usr/sbin 이나 /usr/bin 등의 디렉토리에 있습니다 만약 없으면 연락주십시오.)

업로드된 htpasswd 실행화일을 자신의 홈디렉토리나 혹은 실행할 디렉토리 (페스워드를 걸 디렉토리)에 둔 후,
htpasswd -c .htpasswd USER-NAME
라는 명령을 내립니다. 여기서 .htpasswd 화일은 처음 만드는 것이므로 반드시 -c 옵션을 줍니다. .htpasswd 는 사용자이름과 비밀번호를 저장하는 화일입니다. 이 화일의 이름은 마음대로 바꿀 수 있으나, 조심할 것은 .htaccess 화일에 있는 AuthUserFile 에 서 지정한 화일이름과 반드시 일치해야 하겠죠. USER-NAME은 등록할 자신의 사용자ID를 쓰면 됩니다. 그러면 USER-NAME의 사용자 의 패스워드를 묻고 그 패스워드를 입력하면, 다시 그 패스워드를 재입력하게 하여 확인합니다.

자, 이제 .htpasswd 화일이 만들어 졌습니다. 이제 부터는 그 디렉토리에 있는 페이지들(html화일들)을 브라우저에서 호출하면 비밀번호을 묻는 대화상자가 나타나고, 그곳에 .htpasswd에 입력되어 있는 아이디와 패스워드를 입력해야 통과하게 됩니다.

.htpasswd에 다른 사람들의 아이디와 패스워드를 추가하려면,

htpasswd .htpasswd USER-ID
로 입력하여 추가합니다. 여기서 USER-ID에는 추가하려는 아이디를 입력하고, .htpasswd 는 .htaccess화일의 AuthUserFile에서 지정한 화일이름입니다. (조심할 점은 한번 만들어진 .htpasswd화일에 -c 옵션을 넣으면 새로운 .htpasswd 화일이 만들어지면서 기존화일을 덮어쓰므로 절대 -c 옵션을 사용하면 안됩니다.)

위의 내용은 NCSA나 APACHE등의 httpd Server를 사용하는 곳에서 가능하며 (하이텔, KORNET 등), 만약 루트에서 보안을 위해 서버의 루트 config 디렉토리에 있는 srm.conf 화일의 내용중 AccessFilename 의 이름을 기정치인 .htaccess가 아닌 다른 이름으로 바꾼 경우에는 그것이 지정한 이름을 엑세스화일로 사용해야 합니다. 또한 access.conf 파일의 디렉토리 관련 지정에서 AllowOverride None 으로 둔 경우에도 .htaccess파일을 인식못하므로 사용할 수 없습니다.

엔터프라이즈(enterprise)서버에서는 .htaccess파일이 아니라 .nsconfig파일을 사용하며 위의 사항과 다릅니다. 다음과 같이 .nsconfig 파일을 작성해 줍니다.

 
  <Files *>
  RequireAuth userfile=/path/.nspasswd realm="Private Directory"
  </Files>
 
위에서 path는 .nspasswd 파일이 있는 물리적 경로입니다. .nspasswd파일은 위에서 언급한 .htpasswd과 같은 형태로 만들어 줍니다.

설치중에 생기는 에러

Server에러가 나는 경우
두 파일을 설치하여 브라우저로 해당 파일이 있는 디렉토리(혹은 파일)로 접근을 했을 때 Server Error가 나는 경우가 있습니다. 이것은 십중팔구 .htaccess 파일 이 잘못 작성된 경우입니다. 통상 PC에서 작성하면 눈에 보이지 않는 코드가 들어 가는 경우가 발생합니다. 이 경우에는 .htaccess파일을 새로 작성해 주십시오. 가장 좋은 것은 UNIX(혹은 LINUX)상에서 작성하는 것입니다.
설치를 했는데 인증이 되지 않고 바로 해당 페이지가 출력되는 경우

웹서버가 NCSA나 APACHE웹서버가 아닌 경우
srm.conf 파일에서 AccessFileName 의 값을 기정치인 .htaccess 가 아닌 경우
access.conf파일에서 해당 디렉토리 관련 지정에서 AllowOverride를 None으로 둔 경우
.htaccess 파일을 엉뚱한 디렉토리에 설치한 경우
설치를 하고 인증박스가 뜨는데 id와 password를 입력하니 인증이 잘못되었다고 나오는 경우
이것은 통상 .htpasswd 로 작성한 id와 password 가 아닌 경우이거나 아니면 .htaccess파일에서 AuthUserFile의 값을 잘못 입력한 경우입니다. 그 값이 정확하게 .htpasswd 파일이 있는 경로를 가리키는 지 다시 확인해 보십시오.

회원관리등의 경우 비 회원인 사람들이 인증이 실패했을때 회원 가입을 권유하는 메시지나 혹은 관련 문서를 내보내고 싶은 경우가 있습니다.
즉 인증 실패(Autnetication Failed)의 경우 Authentication Required란 멋대가리 없는 메시지 대신 다른 적당한 메시지를 보내거나 다른 url로 리디렉션하고 싶은 경우에는 이런 방법을 사용하면 됩니다.
여기서 언급하는 것은 웹서버 Apache 1.1 이상에서 지원되는 것으로 기존의 NCSA 1.3 이하버전에서는 그 메시지가 httpd내의 코딩에 포함되어 있었으므로 불가능하였습니다. 현재 NCSA 1.4 버전이상에서는 어떻게 되는지 명확하지 않으므로 NCSA의 경우라면 아래 사항을 참고한 후 NCSA사이트에 가서 확인해 보시는 것이 좋습니다. 다른 웹서버의 경우도 해당 사이트에서 확인해 보십시오.

먼저 .htaccess 파일을 사용하는 경우
이 경우에는 conf파일인 access.conf 파일에서 해당 디렉토리에 대한 Allowoverride 를 FileInfo 로 설정되어 있어야 합니다.
.htaccess 파일에 다음의 줄을 이전 줄에 추가해 줍니다.

ErrorDocument 401 "the text you want..

위의 경우 "는 text시작임을 나타내고 인증실패시 "를 제외한 text가 나타나게 됩니다. 그리고 중간에 있는 401은 인증실패에러번호입니다. 만약 다른 url로 리디렉션하고자하는 경우 (예를 들어 구독 신청을 받는다든지 아니면 회원가입을 권유하는 페이지로 리디렉션 하려면) 위의 줄을

ErrorDocument 401 /~yourID/subscription.html

위의 경우 인증절차가 실패하면 yourID란 계정의 subscription.html이 출력됩니다. 조심할 것은 위의 경로는 url이지 AuthUserFile의 경우 처럼 파일의 물리적 경로가 아니라는 것입니다.

만약 다른 시스템에 있는 url의 페이지로 리디렉션하려면
ErrorDocument 401 http://other.com/otherpage.html 의 형태가 됩니다.


srm.conf 파일을 사용하는 경우
이것은 시스템관리자가 접근할 수 있는 파일이므로 일반 계정을 사용하는 경우에는 해당되지 않습니다. 하지만 시스템관리자의 경우 이것을 사용하면 일관성있게 401에러 (Authehtication Failed Error) 를 한 메시지를 나타내거나 한 페이지로 리디렉션할 수 있습니다. 사용법은 위와 같습니다 srm.conf의 마지막에 위와 같이 적어줍니다.
메시지의 경우

ErrorDocument 401 "The text you want to show....

리디레션의 경우

ErrorDocument 401 /subscription.html

(위의 경우 htdocs 디렉토리에 위의 subscription.html이 존재하여야 합니다.)
srm.conf를 사용하는 경우에는 401에러뿐만 아니라 500이나 403, 404, 501 에러등도 위와 같이 redirection이 가능합니다.

관련자료

댓글 0
등록된 댓글이 없습니다.
Today's proverb
다른 누군가의 길을 밝혀 주기 위해 등불을 켜면 결국 자신의 길도 밝히는 것이 된다. (벤 스위트랜드)