Server & OS

아파치 인증 (.htaccess htpasswd)

페이지 정보

본문

1. 사용자가 만드는 파일을 이용한 인증
이번 강좌는 웹페이지에 인증을 하는 법을 해보려 한다. 특정 page를 가보면(특히 s*x site) ID와 Passwd를 묻는 창을 본 경험을 한 적이 있을 것이다. 이 창은 cgi나 java가 아닌 apache web server자체의 인증절차와 root의 권한이 없는 사용자가 인증절차를 하는 방법에 의해 인증을 걸치게 되는 방법이다. 먼저 두번째의 root권한이 없는 사용자가 할수 있는 인증절차를 먼저 다루겠다. 이 방법은 .htaccess라는 file과 .htpasswd라는 file로서 인증 절차를 거치게 하는 것이다. 이 방법은 NCSA나 apache등의 web server demon에서 사용가능하며 보안이나 다른 이유로 인하여 httpd의 설정 file중 하나인 srm.conf file에서 AccessFileName을 .htaccess에서 다른 이름으로 바꾼 경우 바구어준 이름을 access file로 사용해야 한다. 또한 access.conf에서 보안을 걸려는 directory에 설정을 해놓았다면 AllowOverride를 None으로 두면 .htaccess file을 인식하지 못한다.

1. .htaccess file

먼저 vi나 pico로 .htaccess라는 file을 만든다. 이 파일은 vi나 pico같은 Unix또는 linux의 editer로 만드는 것이 좋다. script로 읽혀 지는 것이기 때문에 web server에서 Server Error를 유발할 수도 있다. 물론 아무 편집기로 만들어도 상관은 없지만 만약 다른 편집기로 작성을 한다면 Upload시에 꼭 아스키 모드로 올려야만 한다.
이 file에는 AuthUserFile과 AuthType, AuthName의 세가지의 지시자를 지정해야 한다. AuthGroupFile은 선택적이기 때문에 신경을 쓰지 않아도 상관없다.

아래는 .htaccess file의 예이다.

AuthUserFile /home/nude/cgi-bin/.htpasswd
AuthGroupFile /home/nude/cgi-bin/.htgroup
AuthName N.etwork U.sers of D.evelopment & E.ducations
AuthType Basic

<Limit GET POST>
require valid-user
</Limit>

AuthUserFile은 .htpasswd file의 물리적 경로를 써준다. 즉 인증을 하기위한 directory에 .htaccess와 .htpasswd가 있어야 한다는 말이다.


AuthName은 인증 창이 뜰때 그곳에 나타내는 인증 그룹 Name정도라고 생각하면 된다. 주의 할것은 apache 1.3 version부터는

AuthName "N.etwork U.sers of D.evelopment & E.ducations"

의 형식처럼 따옴표를 꼭 붙여 줘야만 한다. 따옴표를 빠뜨리면 Internal server error가 발생을 하게된다.

AuthType은 Server가 사용하는 인증방식을 결정하는데 Basic과 Digest 두개의 option이 있다. Basic은 표준 Unix 암호화 패스워드 체계를 사용하며 AuthUserFile 지시자를 사용한다. Digest는 더 안전한 MD5암호화를 사용하지만 대부분의 브라우져에서 지원을 안하므로 intranet에서나 사용이 된다.

<Limit GET POST> ~ </Limit> 부분에서는 접근 제한을 지정할 수 있다. 위의 예제에 나와 있는 require valid-user는 .htpasswd file에 등록되어 있는 user만 허락한다는 의미이다. 이외에도 telnet 접근을 막을 때 사용하는 hostallow나 hostdeny file과 같은 용도로 사용할 수도 있다. .htpasswd file에 등록된 user중에 210.124.24.*의 IP address나 netusers.net이라는 domain을 사용하는 host에서만 접속을 하게 하려면 아래의 예와 같이 하면 된다.

AuthUserFile /home/nude/cgi-bin/.htpasswd
AuthGroupFile /home/nude/cgi-bin/.htgroup
AuthName "N.etwork U.sers of D.evelopment & E.ducations"
AuthType Basic

<Limit GET POST>
order deny,allow
deny from all
allow from 210.124.24 or netusers.net
require valid-user
</Limit>

여기서 약간 독특하게 id, password 또는 대역폭 접근중 하나만 통과하면 인증을 통과하게 하넌 법을 보겠다. 위의 경우에는 둘다 참이여야 하지만 이 경우는 둘중의 하나만 참이면 인증이 되는 것이다.

여기서 .htaccess에서 사용되는 새로운 지시자가 Satisfy를 설명한다. 이 지시자를 지정안했을 경우 Satisfy의 값은 default로 all 이 된다. 이 것은 위의 경우에 처럼 둘다 참이어야 인증이 되는 것이다. 그럼 둘중에 하나만 참 일경우 인증을 하기 위해서는 Satisfy의 값을 any로 지정을 한다. 그러면 id, password 나 지정된 대역폭에서 접근을 할경우 인증이 가능하게 되는 것이다. 아래의 예를 참 고하라.

Satisfy any
AuthUserFile /home/nude/cgi-bin/.htpasswd
AuthGroupFile /home/nude/cgi-bin/.htgroup
AuthName "N.etwork U.sers of D.evelopment & E.ducations"
AuthType Basic

<Limit GET POST>
order deny,allow
deny from all
allow from 210.124.24 or netusers.net
require valid-user
</Limit>

2. .htpasswd file 만들기

이 file은 /usr/bin/htpasswd 또는 /usr/sbin/htpasswd file을 이용해서 만든다. file의 이름을 .htpasswd로 할 필요는 없으나 만약 다른 이름을 사용한다면 .htaccess file의 AuthUserFile에 지정한 file이름과 동일하게 해 줘야 한다.
vi나 pico로 만든 또는 Upload를 한 내용이 없는 .htpasswd file을 password를 걸 directory에 위치시킨 후 아래의 명령을 실행을 한다.

htpasswd -c .htpasswd oops(User ID)

물론 여러분의 경우에는 root의 권한이 없기 때문에 자신의 directory로 /usr/sbin/htpasswd라는 file을 복사해 와야 한다. 그리고 .htpasswd file을 처음 만드는 것이기 때문에 반드시 -c option을 지정해야 한다.

3. .htpasswd file에 다른 user 추가하기

.htpasswd file에 다른 user의 ID와 password를 추가 하기 위해서는 아래의 명령을 수행한다. 주의 할 것은 한번 만들어진 .htpasswd file에 또 -c option을 주면 새로운 .htpasswd file을 생성하게 된다.

htpasswd .htpasswd toyer(User ID)

4. Error Message

인증시 server error가 나는 경우는 .htaccess file이 잘못 작성된 경우가 많다. vi나 pico가 아닌 다른 edit(Unix나 Linux의 edit가 아닌 것들)를 이용해서 만들어 Upload를 했을 경우 눈에 보이지 않는(vi에서 보면 ^M으로 나타나는) code가 들어가는 경우가 발생하는데 이것이 원인이 될수도 있다. 설치를 했는데 인증이 되지를 않고 해당 페이지가 바로 출력이 되는 경우는 /etc/httpd/conf/srm.conf file 또는 /usr/local/etc/httpd/conf/srm.conf file에서 AccessFileName의 이름이 .htaccess가 아닌 경우 또는 access.conf의 file에서 해당 디렉토리 관련 지정에서 AllowOverride를 None으로 둔 경우 이다.
인증 창이 뜨는데도 passwd가 적용이 안되는 경우에는 .htpasswd file을 다른 위치에 두었거나 .htaccess에서 경로 지정이 잘못 되었을 경우이다.

7. Enterprise Server

.htaccess file이 아니라 .nsconfig file을 사용하며 설정은 아래와 같이 하면 된다. 단 dynamic configuration 에서 디렉토리와 .nsconfig 파일, search 등을 설정을 해줘야 한다. 그렇지 않으면, .nsconfig file만 가지고는 소용이 없다. -박대권님 참조글 ^^

<Files *>
RequireAuth userfile=/home/nude/cgi-bn/.nspasswd realm="N.etwork U.sers of D.evelopment & E.ducations"
</Files>

관련자료

등록된 댓글이 없습니다.
Today's proverb
희망만 있으면 행복의 싹은 그곳에서 움튼다 (괴테)