Server & OS

웹서버 접속제한 설정하기 (.htaccess)

페이지 정보

본문

웹서버 접속제한 설정하기 (.htaccess) 2006-11-23 15:13:04
인터넷 사이트를 서핑하다보면 ID와 Password를 물어오면서 접속을 제한하는 페이지를 만난적이 있을 것이다. 이는 특정 페이지에 인증을 걸어 지정된 사용자가 아니면 페이지를 보여주지 않는 것으로 보안 및 홈페이지 관리를 위한 페이지 등에서 많이 사용하고 있는 방법이다.
오늘은 이러한 웹서버의 접속제한을 설정하는 방법에 대해 알아보도록 하자.
 
웹서버 접속제한?
앞서 말했듯이 특정 페이지에 인증을 걸어두어 지정된 사용자가 아닌 경우 웹페이지를 보여주지 않도록 설정하는 것을 말하는 것으로, Apache와 같은 웹서버에서는 .htaccess 라는 파일을 생성하여 설정할 수 있다.
접속제한을 설정하는 방벙을 간단히 요약하면 아래와 같다.
 
==========================
① .htaccess 파일 생성
② .htaccess 파일 설정
③ 사용자 및 패스워드 등록
④ 웹서버 재시작
==========================
 
① .htaccess 파일 생성
먼저 .htaccess 파일을 생성하도록 하자. 인증이 필요한 디렉터리로 이동하여 touch 명령을 통해 파일을 만든다.
아래 예제는 웹서비스의 기본 디렉터리인 /var/www/html 아래에 있는 관리자 페이지 디렉터리(admin)에 접속 제한을 설정한다는 가정하에서 작업한 예제이다.
=====================================================
# cd /var/www/html/admin
# touch .htaccess
# ls -al
=====================================================
※ 참고로 파일명앞에 점(.)이 붙는 다는 것은 "숨김속성"이 있는 파일임을 나타내므로, 일반적인 ls 명령으로는 파일 생성여부를 확인할 수 없다. ls명령에 -al 과 같은 옵션을 사용하여 파일의 생성여부를 확인하도록 하자.
 
② .htaccess 파일 설정
앞서 생성한 파일은 아무런 내용이 없는 빈 파일이므로 아래와 같은 내용을 입력하자.
# vi .htaccess
=====================================================
AuthName        "XXXX 관리자 페이지"
AuthType        Basic
AuthUserFile    /var/www/html/admin/.htpasswd
AuthGroupFile   /dev/null
ErrorDocument 401 "인증 실패!  당신은 인증된 사용자가 아닙니다."
<Limit GET POST>
  satisfy any
  order deny,allow
    deny from all
    allow from xxx.xxx.xxx.xxx
  require valid-user
</Limit>
=====================================================
- AuthName는 암호 인증창에 나타나는 설명을 적는 곳이다. 이곳에 적은 내용이 인증창에 문구로 나오게 된다.
- AuthType은 서버가 사용하는 인증방식을 말한다. Basic과 Digest의 2가지가 있으나 일반적으로 Basic을 사용한다.
- AuthUserFile는 .htpasswd 파일의 물리적인 경로를 지정해 준다. 여기서 .htpasswd 파일은 뒤에서 다룰 내용으로... 암호 인증창이 나타났을때 여기에 입력할 ID와 Password를 저장하고 있는 파일을 말한다.
  .htaccess에서는 사용자 인증을 요구해주고, 실질적인 사용자 인증은 .htpasswd 파일에서 확인하게 된다.
  .htpasswd는 다른 파일명을 사용해도 된다.
- AuthGroupFile는 그룹으로 인증확인을 할경우에 그룹인증파일명을 적는다.
- ErrorDocument는 인증 실패시 화면에 보여줄 문구를 지정한다. 또는 아래와 같이 미리 만들어둔 오류 페이지를 지정할 수도 있다.
  ErrorDocument 401 /admin/subscription.html
- Limit GET POST : 접근 제한을 지정하는 부분이다. 여기서는 GET 방식과 POST 방식의 접근만을 허용한다.
  satisfy any         : 여러 설정의 충족 여부를 나타내는 항목으로... 아래에 자세히 설명
  order deny,allow    ; 적용 순서를 나타내는 것으로 거부(deny) 이후에 허용(allow) 순으로 적용한다. (이후의 설정 내용을 참고하라.)
    deny from all       ; 모든 접속을 거부(deny) 한다.
    allow from ...      ; 지정된 IP로 부터의 접속을 허용한다.
  require valid-user  ; 인증된 사용자만의 접속을 허용한다. valid-user 대신 직접 ID를 명시하여 해당 ID만을 허용할 수도 있다.
 
※ satisfy는 all과 any를 지시자로 가질 수 있으며, 각 의미는 아래와 같다.
  satisfy all : allow from에서 허용된 IP와 require에서 정의된 사용자 모두가 맞아야만 접속 허용 (&& 개념)
  satisfy any : allow from에서 허용된 IP와 require에서 정의된 사용자 중 하나만 맞으면 접속 허용 (|| 개념)
 
위는 지시어를 모두 사용하였을 경우에 대한 예제로서, 아래와 같이 간단하게 만들수도 있다.
=====================================================
AuthName        "XXXX 관리자 페이지"
AuthType        Basic
AuthUserFile    /var/www/html/admin/.htpasswd
<Limit GET POST>
  order deny,allow
    deny from all
    allow from xxx.xxx.xxx.xxx
  require valid-user
</Limit>
=====================================================
 
③ 사용자 및 패스워드 등록
.htaccess 설정이 완료되었다면, htpasswd 명령을 이용하여 해당 디렉터리로 접근 가능한 사용자 계정 및 패스워드를 생성한다. 아래 예제는 admin 이라는 계정을 추가하는 내용으로 패스워드를 지정하는 부분까지 같이 이루어진다.
=====================================================
# htpasswd -c .htpasswd admin
  Adding password for admin.
  New password:  <비밀번호 입력>
  Re-type new password:  <비밀번호 입력 확인>
=====================================================
※ -c 옵션은 초기화 후 새롭게 생성할때 이용하는 옵션이다.
  처음 계정을 등록할때는 -c 옵션을 사용해주고, 그 이후에 추가로 계정을 등록하는 경우에는 -c 옵션 없이 사용해야 한다.
  -c 옵션을 사용하게 되면 앞서 등록한 계정은 없어지게 되므로 사용에 유의하자.
※ 사용자 비밀번호를 변경하고자 한다면 위의 htpasswd 명령을 한번더 사용해주면 해당 계정의 비밀번호가 바뀌게 된다.
※ 사용자 계정을 삭제하고자 한다면 .htpasswd 파일을 열어서 삭제하려는 사용자 계정이 기록된 라인(line)을 지워주면 된다.
 
④ 웹서버 재시작
자 이제 설정 및 사용자 등록이 완료되었으므로, 아래와 같은 명령으로 웹서버를 재시작하자.
# /etc/init.d/httpd restart
 
만약 소스설치를 한 경우라면, apache가 설치되어 있는 경로로 이동하여 bin 디렉터리 하단에 있는 apachectl 실행명령을 stop 및 start 하자.
 
이제 웹브라우저를 사용하여 admin 디렉터리 하단에 있는 웹페이지를 열어보도록 하자. 사용자 인증창이 정상적으로 나타나는가?

관련자료

등록된 댓글이 없습니다.
Today's proverb
결혼이란 단순히 만들어 놓은 행복의 요리를 먹는 것이 아니고, 이제부터 노력하여 행복의 요리를 둘이서 만들어 먹는 것이어야 한다. (피카이로)