강좌

HOME > 강좌 >
강좌| 리눅스 및 오픈소스에 관련된 강좌를 보실 수 있습니다.
 
특정페이지 암호걸기(페이지인증 htaccess,htpasswd)
조회 : 11,510  


1. 사용자인증이란?

2. 사용자인증을 위해 설정해야 할 것

3. .htaccess파일 만들기

4. 인증사용자의 ID와 패스워드 생성하기

5. 인증사용자 웹브라우즈로 확인하기

6. 보안에 주의할 사항


홈페이지제작을 해보신 분이나 웹사이트관리를 해보신 분이라면 홈페이지전체나 일부의 내용을 ID와 패스워드로 인증을 받은후에 접속할 수있도록 제작을 해보신 경험이 있으리라 생각합니다.

특히 상업적인 사이트나 고급회원에 대한 특별서비스등은 반드시 그런 서비스를 받을 만한 자격을 (인증창을 통하여)검증받은 후에 이용할 수 있도록 해야합니다.

이는 경제학의 고객 차별화와 관계가 있는 것입니다.

즉 100개의 페이지로 되어 있는 페이지에서 60개의 페이지는 일반방문자 누구나 볼 수 있도록 하고 나머지 40개의 페이지에 대해서는 특정권한(가입등의 절차를 거친 고객)을 가진 고객들에게만 서비스되는 정보라고 할 경우에 무료로 회원등록을 하게하여 이런 정보를 제공한다고 하면 아마도 일반방문자들은 회원등록을 하게될지 모릅니다.

이렇게 등록한 고객과 등록하지 않은 일반고객과의 서비스에 대한 차이를 두어 등록고객에게는 특별한 서비스를 받고 있다는 자부심을 줄 수있도록하여 고객유치를 할 수 있도록 하는 정책입니다.

이런 사용자 인증을 통한 특정페이지 접속허용은 요즘 한창 떠오르고 있는 유료정보와 CP등에서 활용이 될 수 있는 것입니다.

위의 설명처럼 전체 페이지중의 일부만을 사용자인증을 통해 접속을 허용할 수 있으며, 또한 홈페이지 전체를 처음부터 사용자 인증을 통해 접속을 허용하게 할 수도 있습니다.

단 한가지 주의 할 점은 유료로 운영을 할 경우에는 등록절차를 거쳐서 접속을 하게될 가입자들의 개인정보와 ID 및 Password등의 개인정보를 철저하게 보호해야 한다는 것입니다.

이런 보안을 위해서 쿠키를 이용하는 것과 아파치에서 제공하는 다른 인증모듈을 통해 해결할 수가 있습니다.

후자의 예를 든다면 텍스트파일 인증모듈(mod_auth), DBM인증모듈 (mod_auth_dbm), Berkeley DB 인증모듈(mod_auth_db), Anonymous 인증모듈(mod_auth_anon), PostgreSQL인증모듈등이 있습니다.

 

사용자 인증을 통해 접속을 허용하는 사이트를 운영하는 경우는 다음과 같은 웹사이트를 운용하려고 할 경우에 주로 쓰이고 있습니다.

  • 회원제로 운영하는 사이트
  • 특정그룹별로 접속을 허용하는 사이트
  • 일반에겐 공개페이지를 사내직원에겐 업무용페이지를 보여주는 사이트
  • 운영자용 페이지에 접속할 때


홈페이지 전체나 일부에 접근하려고 할 때에 다음과 같은 창이 뜨면서 ID와 패스워드를 입력하라는 창입니다.

 

사용자인증예


이런 인증작업을 하기 위해서 웹호스팅고객께서는 다음과 같은 작업을 하셔야합니다.

특정페이지에 사용자암호를 걸기 위해서는 세개의 파일이 필요합니다.

즉, .htaccess와 .htpasswd 그리고 htpasswd이 그것입니다.

 

  .htaccess  <- 점( . )주의

인증을 어떻게 할것인지에 대한 설정(인증방법 및 설정파일지정등)

직접만들어줘야함.(아래에서 설명됨)

 

  htpasswd

위의 .htaccess의 내용을 기준으로하여 인증할 ID와 패스워드를 만들어주는

명령어(유틸리티). 이 명령의 결과 아래의 .htpasswd라는 파일일 생성됨.

아파치웹서버를 사용하는 서버사용자는 기본적으로 사용할 수 있음.(즉, 서버에 존재함)

 

  .htpasswd    <- 점( . )주의

htpasswd라는 명령어의 결과 자동적으로 생성되며 인증받을 사용자의 ID와 패스워드가

저정될 파일. 물론 파일이름을 바꿔줄 수도 있음.

 

 

특정디렉토리에 대한 인증을 하기위해 고객분들이 하셔야할 작업내용과 절차는 다음과 같습니다.

  • ① 사용자인증을 할 디렉토리로 이동한다.
     
  • ② .htaccess파일의 내용을 작성한다.
     
  • ③ htpasswd 명령어(유틸리티)를 사용하여 허가할 사용자의 ID와 패스워드를 만든다.
    (htpasswd파일이 없을 경우에는 which등의 명령어를 사용하여 찾아본다.)
     
  • ④ 웹브라우즈를 통하여 사용자인증이 되는지 확인해 본다.

설명드린 바와같이 첫 번째 파일(.htaccess)은 직접 만들어 주셔야 하며 두 번째 파일(.htpasswd)은 세 번째 유틸리티(htpasswd)를 이용해서 만들어 주면 됩니다.

그리고 세 번째 파일은 Linux의 경우에 보통 /usr/bin에 존재하며 이 디렉토리는 일반적으로 계정사용자에게 path로 잡혀있으므로 고객께서는 그냥 사용가능합니다.

참고로 htpasswd파일의 위치를 찾지 못했을 경우에 다음과 같은 명령으로 위치를 확인할 수 있습니다.

passwd유틸리티 위치확인

 

일반사용자의 경우에는 다음과 같이 which 나 whereis로 확인가능하며,

만약 시스템관리자일 경우에는 find라는 명령어로 파일의 위치를 확인할 수 있습니다.

 

passwd유틸리티찾기

위의 명령어는 루트디렉토리(/)에서부터 htpasswd라는 파일(-name)을 찾아서 (find) 보여달라(-print)는 명령입니다. 위에서 출력된 결과는 /usr/bin에 있다는 것입니다.


.htaccess 파일은 저희웹호스팅에 가입하신 고객분들께서 직접 에디터(vi, 메모장등)를 이용해서 아래와 같이 만들어 주셔야 합니다.

텔넷으로 Linux나 UNIX시스템에 로그인 했다면 vi를 사용하고, vi 사용이 어려우신 분들은 PC에서 메모장을 열어서 만들어 주신후에 ftp client(Ws_ftp, Cute_ftp등)를 이용하여 서버에 있는 자기계정의 사용자인증할 특정디렉토리로 전송을 해 주셔야합니다.

이때 전송모드를 반드시 ASCII모드로 해주셔야 합니다.

.htaccess파일의 예가 아래에 있습니다.

고객여러분의 사용편의를 위하여 .htaccess파일의 작성예는 다음과 같으며,

아래의 파일내용중 AuthUserFile 내용만을 고객의 디렉토리위치대로만 바꿔주시면 됩니다.

 


 

● AuthName "메뉴얼랜드"

☞ 인증창의 이름으로 임의로 지정가능 하며 보통은 홈페이지이름을 적는다.
    고객께서는 고객의 회사이름이나 그룹이름, 홈페이지이름등을 적당히 적어주시면 됩니다. 

● AuthType Basic

☞ 인증타입은 일반적으로 Basic으로 한다.

● AuthUserFile /home/myid/www/.htpasswd

☞ htpasswd유틸리티를 실행할 경우 이 파일(.htpasswd)이 생성된다.
    위의 빨간글씨중 myid는 고객여러분의 ID를 적어주셔야합니다.
     

● AuthGroupFile /dev/null

☞ 그룹으로 인증확인을 할경우에 그룹인증파일명을 적는다.

☞ GET방식과 POST 방식의 접근만을 허용한다.

● require valid-user

☞ 인증된 사용자만이 접속을 허용한다

☞ 닫기


이제 htpasswd라는 명령어를 사용하여 인증받을 사용자를 생성하도록 하겠습니다.

즉 htpasswd라는 명령어를 사용하여 .htpasswd라는 파일을 만들어 줘야합니다.

이 파일(.htpasswd)에는 인증할 사용자의 ID와 패스워드리스트를 보관하고 있는 파일이며, 해당 페이지로 접근하려할 때 인증창이 뜬 후에 이 파일에 있는 ID와 패스워드를 맞게 입력하면 접속을 허용하게되고, 그렇지 않으면 접속허용을 하지않게 됩니다.

이 파일은 바로 앞에서 생성한 .htaccess파일내의 "AuthUserFile"항목에서 지정했던 파일과 같은 디렉토리 위치(/home/sspark/www)에 동일한 파일이름(.htpasswd)으로 존재해야 합니다.

이 파일의 위치가 정확히 지정되지 않아서 인증창이 뜨지 않는 경우가 많으므로 정확히 확인하도록 하십시요.

그럼 이제 .htpasswd 파일을 만들어 보겠습니다.

 

첫 인증사용자 등록하기


처음으로 사용자를 생성할때에는 반드시 -c옵션을 사용해야합니다.

-c 옵션은 한번만 사용하시고, 이후에는 옵션없이 그냥 사용하시면 됩니다.

만약 위의 명령의 결과가 "No such file or directory" 라면 이는 htpasswd명령어를 찾지 못하는 경우이며, which나 whereis등의 명령어로 확인 한 후에 path가 잡혀있지 않다면 절대경로로 명령어를 사용하셔야합니다.

예를 들어 파일의 위치가 /usr/sbin이라면 절대경로로 명령을 사용하는 경우의 예는 다음과 같습니다.

$ /usr/sbin/htpasswd -c .htpasswd webmaster

위의 명령어가 정상적으로 종료되었다면 .htpasswd파일이 생성되었을 것입니다. .

htpasswd파일은 점(.)으로 시작하는 숨겨진파일이므로 그냥 ls로는 볼수가 없습니다.

따라서 -a옵션과 함께 사용하셔야만 보실수가 있습니다.

아래의 예처럼 "ls -al"로 확인해야만 .htpasswd파일을 볼 수 있습니다.


.htpasswd 파일 내용확인

 

그리고 "cat .htpasswd"라는 명령어는 위에서 등록한 webmaster라는 사용자를 등록한후에 정상적으로 등록이 되어있는지를 확인하는 것입니다. 사용자를 등록할 때마다

.htpasswd 파일에는 ID와 암호화된 Password가 누적되어 입력됩니다.

암호는 cript()라는 함수를 사용하여 생성하게 됩니다.

이후에는 -c라는 옵션없이 htpasswd라는 명령어를 사용하여 사용자를 계속추가해 주시면됩니다.

사용자를 추가생성 할때에는 다음과 같은 형식으로 사용하면 됩니다.

형식 : htpasswd .htpasswd 등록할사용자ID

이런 형식으로 명령을 실행한 다음에는 아래의 예에서 보는 바와 같이 패스워드의 입력과 재확인을 하면 등록이 완료됩니다.



인증사용자 추가등록

위의 예는 sspark, minoz, hokiz 사용자 세명을 추가등록하였습니다.

이들 명령어를 잘 보시면 명령의 형식이 모두 동일하다는 것을 알 수 있습니다.

그리고 마지막에 cat으로 생성한 ID와 패스워드를 확인해 보았습니다.

자, 그럼 인증에 사용할 ID와 패스워드를 처음등록하는 방법과 추가로 등록하는 방법에 대해서 알아보았는데 한가지 궁금한 것이 생겼습니다.

원하는 자기의 고객이 사용하는 패스워드를 여러 가지 이유로 인하여 바꿔달라고 요구할 수 있습니다.

사용자의 패스워드변경은 어떻게 하면될까요?

대답은 의외로 시시합니다.

바로 앞에서 사용자를 추가하는 방법그대로 해주시면됩니다.

단 패스워드를 입력할 때 사용중인 기존의 패스워드 대신 원하는 패스워드를 입력하면됩니다.

아래의 예를 보십시요.


인증사용자 암호변경

보시는 바와 같이 사용자를 추가생성하는 방법과 사용중인 ID의 패스워드를 변경하는 방법은 동일하다는 것을 알 수 있습니다.




드디어 위에서 생성한 인증사용자를 웹브라우즈로 확인할 때가 왔습니다.

정상적으로 작업이 완료되었다면 해당 페이지로 접근하려고 할 때 다음과 같은 창이 뜰 것입니다.


인증창 확인

보이는 이 창에서 앞에서 등록한사용자의 ID와 패스워드를 입력하면 원하는 페이지로 들어갈 수가 있습니다.


만약 등록이 되어있지 않은 사용자나 등록된 사용자의 암호를 3회이상 잘못 입력했을 경우에는 access.conf 파일의 해당디렉토리 인증부분에 "ErrorDocument 401 "죄송합니다. 가입인증이 되지 않았습니다."와 같은 설정을 해 두었기 때문에 다음과 같은 에러메시지 창이 뜰 것입니다. 이런 간단한 메시지 뿐만아니라 html파일을 지정해서 에러 안내페이지로 사용할 수도 있습니다.

인증되지 않은 경우의 메시지창



htpasswd 유틸리트를 이용하여 사용자 인증을 하는 경우에 다음의 보안사항에 유념해야 합니다.

이 글을 쓰고 있는 이 순간 "보안사항"에 대해서 언급을 하는 것이 옳은 것이지, 아니면 옳지 않은 것인지에 대해서는 확신이 서질 않지만 이 부분에 대해서는 알만한 분들은 다들 알고 계실 것이라 생각합니다.

여기서 말씀드리는 보안이라는 것은 이 사용자인증에 대한 부분에 국한된 것이 아니라 모든 웹사이트의 공통적인 문제라고 할 수 있습니다.

다음의 웹브라우즈로 확인 가능한 다음의 웹브라우즈창 두 개를 잘 살펴보기시 바랍니다.


어떻습니까?

좀 전에 만들었던 .htaccess파일의 내용과 .htpasswd파일의 내용이 웹브라우즈에서 그대로 보이지 않습니까?

누구나 이런 것이 가능하다는 것은 아닙니다.

암호와 패스워드로 사용자 인증을 거친후에는 이렇게 확인이 가능하다는 것입이다.

즉, 인증을 거치고 난뒤에 "http:도메인/해당디렉토리/.htaccess" 이런식으로 웹에서 불러보면 .htaccess에 있는 인증옵션과 .htpasswd에 어떤 사용자들이 있는가를 볼 수 있다는 의미입니다.

물론 패스워드는 cript()라는 함수로 암호화 되어 있지만, 크랙(crack) 같은 툴(프로그램)을 사용하면 조금의 노력으로 패스워드를 알 수가 있기 때문에 위험하다고 할 수 있습니다.

그럼, 어떻게 하면 이런 낭패를 당하지 않게 할 수 있을까요?

방법은 두가지가 있습니다.

첫 번째 방법은 default로 지정된 .htpasswd 파일이름 대신에 다른 이름을 사용하는 것이고, 두 번째는 .htpasswd 파일을 사용자의 홈페이지 디렉토리의 이전디렉토리에 두면 이런 낭패쯤은 방지가능합니다.

웹호스팅서비스를 이용하는 고객의 예를 들어 본다면 다음과 같이 할 수 있습니다.

  • .htpasswd 파일 대신에 .kingpasswd를 사용한다.(임의지정가능)
  • /home/sspark/www 대신에 /home/sspark/pw/ 디렉토리에 .kingpasswd를 저장하여 사용한다.

계정가입자의 홈디렉토리가 /home/sspark/www이므로 웹으로 확인가능한 곳은 이디렉토리 이하가되므로 웹으로는 도저히 확인할 길이 없어지는 셈입니다.

자기가 운용 및 관리하는 사이트가 유료로 운용되고 있다면 이정도의 보안으로도 부족하지만 최소한의 보안을 하여 등록된 사용자를 보호하는 것이 사이트관리자의 기본의무가 아닐까합니다.

 



[원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=221


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기 이 글을 미투데이로 보내기

 
박성수
파파
헐렁고수