htpasswd, htdigest - Apache HTTP authentication

htpasswd, htdigest command
For Apache HTTP authentication


htpasswd -> HTTP basic authentication
htdigest -> HTTP digest authentication
두 명령어는 거의 유사하나 basic 인증이냐 digest 인증이냐의 차이가 있다.

두 명령어 모두 사용자명과 암호 정보를 저장할 파일을 관리한다. (HTTP 인증용)
htdigest의 경우 추가로 영역(realm)을 기재해야 한다.

* 보안상 basic 인증보다는 digest 인증 사용 권장


1. htpasswd

(1) 파일 생성/수정

1
htpasswd -c 파일명 사용자명
cs



파일명 : file.txt / 사용자명 : user001 / 비밀번호 : 1234
->file.txt에 인증 정보가 생성된다.

- 만일 같은 사용자명을 입력하면 해당 사용자의 암호가 변경된다.
- 다른 사용자명을 입력하면 사용자 추가가 이루어진다.


(2) Apache에 적용(http.conf) 후 데몬 재실행

Directory 단위로 적용한다.

<Directory "폴더위치">
    AllowOverride AuthConfig

    AuthType Basic
    AuthName "메시지명"

    AuthUserFile 인증파일위치
    Require valid-user
</Directory>

* Require valid-user 항목이 없으면 Apache는 HTTP authentication을 진행하지 않는다.
* 기존에 AllowOverride 항목이 있으면, 그 항목 옆에 AuthConfig를 추가한다.


2. htdigest

(1) 파일 생성/수정

1
htdigest -c 파일명 realm 사용자명
cs


파일명 : file.txt / 사용자명 : user001 / 영역명(realm) : test / 비밀번호 : 1234
->file.txt에 인증 정보가 생성된다.

추가/삭제 원리는 htpasswd와 같음

(2) Apache에 적용(http.conf) 후 데몬 재실행

Directory 단위로 적용한다.
주의 : AuthName의 메시지명이 realm과 일치해야 한다
(#Comment-> 버그인지 아닌지 체크 필요)

<Directory "폴더위치">
    AllowOverride AuthConfig

    AuthType Digest
    AuthName "메시지명"
    AuthDigestDomain 폴더위치 host명

    AuthDigestProvider file
    AuthUserFile 인증파일위치
    Require valid-user
</Directory>

* host명 예시 : www.example.com (서비스하는 host명 기재)
Require valid-user 항목이 없으면 Apache는 HTTP authentication을 진행하지 않는다.
* 기존에 AllowOverride 항목이 있으면, 그 항목 옆에 AuthConfig를 추가한다.


3. 주의점

* HTTP basic authentication 은 취약한가?
https://security.stackexchange.com/questions/988/is-basic-auth-secure-if-done-over-https/990#990

즉, htpasswd는 HTTP basic authentication에 대한 이해, 해당 웹서비스의 구조 등을 종합적으로 판단하여 사용할 필요가 있다. (가급적 자제)


* 인증 파일들의 권한
- 644 root:root에서 아무런 문제 없이 돌아감(Amazon AMI / Apache 2.4 기준)
- 인증 파일들을 DocumentRoot 바깥에 둘 것(보안상)


* 테스트시
잘못된 값 입력시 웹서버에서 401 Unauthorized 에러를 리턴하는지 확인해야 함


* 호환성 문제
일부 버전이 낮은 브라우저에선 HTTP digest Authentication 사용이 불가능하다.

4. 실 사용 예시

Case #1
1
htpasswd -/var/www/.auth USER
cs

1
2
3
4
5
6
7
8
9
<Directory "/var/www/html/www">
    AllowOverride AuthConfig
 
    AuthType Basic
    AuthName "메시지명"
 
    AuthUserFile /var/www/.auth
    Require valid-user
</Directory>
cs


Case #2
1
htdigest -/var/www/.auth area USER
cs

1
2
3
4
5
6
7
8
9
10
11
<Directory "/var/www/html/www">
    AllowOverride AuthConfig
 
    AuthType Digest
    AuthName "area"
    AuthDigestDomain /var/www/html/www/ https://www.dwer.kr/
 
    AuthDigestProvider file
    AuthUserFile /var/www/.auth
    Require valid-user
</Directory>
cs


* http.conf 작성 완료 후 데몬을 재실행(restart) 한다.


[레퍼런스]
https://httpd.apache.org/docs/2.4/ko/programs/htpasswd.html
https://httpd.apache.org/docs/2.4/ko/programs/htdigest.html
https://httpd.apache.org/docs/2.4/mod/mod_auth_basic.html
https://httpd.apache.org/docs/2.4/mod/mod_auth_digest.html

댓글