database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Tutorials 5853 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 5853
PostgreSQL 8 : pg_hda.conf - 보정중
작성자
조성준(openphp)
작성일
2005-01-30 00:38ⓒ
2005-01-30 20:09ⓜ
조회수
14,902

홈페이지 : http://www.openphp.com , http://www.openpython.com

 

안녕 하세요? 조성준 입니다.!

Warn: 실력이 미천하고 어설프니 도움이 않될수 있습니다.!

PostgreSQL의 인증관련(접근과 패스워드암호화 관련) 설정파일인 pg_hba.conf에 대해 설명합니다.

잠깐 ! : PostgreSQL의 pg_hba.conf 파일을 통해 외부접근에 대한 처리는 되도록
배재하는것이 좋습니다. 외부접근제어는 시스템 OS Kernel Level의

packet Filter(iptable,ipchain,pf,ip_f..)를 이용하는 것이 PostgreSQL로의 불법로그인으로 인한
PostgreSQL인증체크처리 부하라 던지 전체적인 성능에 이득이 됩니다.

이미Kernel단에서 해당 IP나 IP Block에 대해서 접근제어를 해주는 것인 전체적인 성능에 좋습니다.

- PG_HBA.conf -

pg_hba.conf는 PostgreSQL Host Base Authentication.의 약자로 initdb에서 생성된 클러스터 폴더(PGDATA)에
들어 있습니다. pg_hba.conf는 PostgreSQL의 인증 시스템관련 정보를 담고 있는 설정파일로 설정방법이
간단한편으로 실제적인 계정에 대한 정보는 PostgreSQL의 카탈로그 테이블인 pg_user 에서 관리하고

접근 Host나 Host의 테이타 전송방식과 암호화 전송방식에 대한 설정을 가지고 있다.
그런 이유로 계정에서 대한 권한이나 패스워드등의 변경은 실시간으로 적용이 가능하나 접근자의 접근방식과

암호전달 방식에 대해서는 pg_ctl reload나 pg_ctl restart를 통해 daemon이 다시 pg_hba.conf파일을
로드하게 해주어야 한다. 불편성이 있는듯 하지만. 불법 접근에 대한 처리시에 빠른 응답으로
PostgreSQL Server 부담을 줄이기 위함으로 최대한의 성능을 위한 것이다.


* 작성방법 *

[] : 로 불력화한 부분은 제외돼도 상관없다는 뜻입니다.

인용 또는 결과 :

HostType Databasename username [CIDR-addsredd or IP-Mask] Auth.-method [Auth.OPtion]

[root@good /root]$
_


* HostType *

    Host타입은 접근자의 접근 위치(Unix Domain Socket 또는 TCP/IP와 SSL TCP)와 통신의 암호화 관련 설정입니다.
    local , host , hostssl , hostnossl 을 지원한다.

    local은 자칫 locahost로 생각할수 있겠지만 local은 Unix Domain Socket을 통한
    접속에 해당하는 것으로 다소 해깔릴수 있으니 주의 하시기 바랍니다.

    잠깐! : 기존에 DB Application에서 PostgreSQL에 접속시 host 명을 주지 않으며,
    Unix Domain Socket으로 통신을하였으나 PostgreSQL 8.0이상부터는

    host=/tmp 또는 host=/tmp/.s.PGSQL.포트번호 로 접근을 하셔야만 pg_hba.conf에 설정한 local 설정에 해당됩니다.
    주의 하시기 바랍니다.

    hostssl은 ssl인증서를 통한 암호화 통신만 지원하면 localhost , 127.0.0.1 식의 즉 TCP/IP접속에 해당된다.

    hostnossl은 ssl 접속은 불가능 하며, TCP/IP통신을 지원합니다.

    host나 hostssl 로 설정한 상태에서 SSL기능을 사용하실려면 PostgreSQL 컴파일시
    --with-openssl 옵션을 주어야 하며,
    postgresql.confssl=true로 설정을 해주셔야만 합니다.
     


* DataBase Name *

    특정한 디비에 대한 접속을 제한할수있으며 ,(콤마)로 여러개의 디비로 접근 제어가 가능합니다.
    모든 디비에 대한 접근을 풀려면 all로 설정하시면 됩니다.
    만약에 설정할 디비가 수십개라면 기재하기 불편하실경우
    @dblist.txt 식으로 설정하고 dblist.txt
    PGDATA로 설정한 폴더의 안에 넣어 두시면됩니다.


* username *

    계정설정으로 ,(콤마)구분으로 할수 있으며,Database의 @파일명 식으로 따로 파일을 만들어서 처리하실수도 있습니다.
    PostgreSQL의 계정 그룹 카탈로그 테이블인 pg_group 또는 create group 명령으로 그룹을 만들어 계정들은 하위(SYSID)에 묶어두었을때는
    +(플러스) 키를 붙인 그룹명으로 설정하면 해당 그룹에 대한 모든 접근이 가능해집니다.


* [CIDR-addsredd or IP-Mask] *

    이 부분으로 접근에 대한 IP나 IP Block을 차단하는것보다는 Kernel Level의 Packet filter로 막는것이 전체적인 성능향상에 도움이 됩니다.
    다만 다중사용(웹호스팅,ASP등)의 경우를 제외하고는 이부분 사용을 자재해주시기 바랍니다. PortgreSQL의 기본 Service Port는 5432입니다.

    IPv4 CIDR 구분으로
    해당 C Class에 대해 모두 접근처리를 할떄는 :
    xxxx.xxxx.xxxx.0/24
    해당 IP에 대한 접근처리를 하실떄는 :
    xxxx.xxxx.xxxx.xxxx/32

    위의 식으로 설정하시면 되면 아래 예제에서 좀더 자세히 알려드리겠습니다.


* Authentication Method *

    이 부분은 실제적인 계정의 패스워드에 대한 서버로의 전송을 어찌할것인가를 정하는것입니다.
    PostgreSQL Sever와 Client와의 접속에는 처음 Client가 접속을 하게 되면 pg_hba.conf에 대해 검색해서
    해당 접속에 대한 접근허용을 확인하고 확인이 되면 이 Auth.Method에 설정된 암호화 방식으로 패스워드를 전송하라고,
    응답메세지를 보내고 다시 CLient가 Server로 로그인을 하게 되는 방식입니다.

    인용 또는 결과 :

    trust : 패스워드 없이 접근 가능.주위할것은 local(Unix Domain Socket)이외에는 적극 비추천.!

    reject : 당돌히 거부.!!

    md5 : 패스워드를 md5로 암호화 해서 전송 (기본 적극 추천)

    crypt : cryppt 로 암호화 해서 전송 PostgreSQL 7.2 이후부터는 사용되지 않습니다.(이전 버전설정 호환용)

    password : 이건 그냥 text로 패스워드를 전송하는건데 사실 하느니 못합니다. 스니핑에 바로 보이니

    krb4,krb5 : KerberOS V4,5를 지원한다.

    ident : IDent Map방식은 추천드리지는 않습니다. 로그인후 접속유지되는 구조가 아닌경우는

    pam : PAM(Pluggable Authentication Modules) 서비스를 사용한 인증입니다.ident와 마찬가지로 비추

    [root@good /root]$
    _

위에서 설명드린것중 SSL,KerberOS와 Ident,Pam인증을 따로 다른 장에서 설명을 드리겠습니다. (현재 테스트중)
추천드리지않는 다고하나 이는 일반적인 평준화되어진 시스템에서는 비추천이지만 특정서비스에서는 필요한것이므로

테스트하여 완벽해지게 스스로 이해하고나면 올려드리겠습니다.(시간이 좀 나면요 ^^)
위중 TCP/IP를 통한 접속의 경우는 기본은 md5로 하시기 바랍니다. 최소한의 보안을 위해 md5를 쓰시기 바랍니다.



- pg_hba.conf 설정예제 -

인용 또는 결과 :

# TYPE DATABASE USER CIDR-ADDRESS METHOD
local all all trust

[root@good /root]$
_

설명 : local접속 즉 Unix Domain Socket을 통한 접속에 대해 모든 디비,유저에 대해서 패스워드 없이접근을 허용함

인용 또는 결과 :

# TYPE DATABASE USER CIDR-ADDRESS METHOD
host all all 127.0.0.1/32 trust

[root@good /root]$
_

설명 : TCP/IP접근시 127.0.0.1에서 접근시 모든디비,모든유저로의 접근에 패스워드 필요없음


인용 또는 결과 :

# TYPE DATABASE USER CIDR-ADDRESS METHOD
host all all 127.0.0.1/32 trust

[root@good /root]$
_

설명 : TCP/IP접근시 127.0.0.1에서 접근시 모든디비,모든유저로의 접근에 패스워드 필요없음


인용 또는 결과 :

# TYPE DATABASE USER CIDR-ADDRESS METHOD
host all openphp 192.168.0.1/32 md5

[root@good /root]$
_

설명 : 192.168.0.1 IP에서 TCP/IP로 openphp계정으로 모든 디비에
대한 접근이 허용되며, md5로 패스워드를 암호화 하여야함

인용 또는 결과 :

# TYPE DATABASE USER CIDR-ADDRESS METHOD
host openphp,openpython openphp 192.168.0.1/32 md5

[root@good /root]$
_

설명 : 192.168.0.1 IP에서 TCP/IP로 openphp계정으로 openphp,openpython
디비에 대한 접근이 허용되며, md5로 패스워드를 암호화 하여야함

인용 또는 결과 :

# TYPE DATABASE USER CIDR-ADDRESS METHOD
host remotedb +remotegroup 0.0.0.0/0 md5

[root@good /root]$
_

설명 : 원격 어디서든지 remotegroup의 SYSID로 설정된 계정들로
remotedb로의 접근이 허용되며 패스워드는 md5로 패스워드 암호화 하여야함


위와 같이 간단히 설정예제를 알려드렸습니다.

좀더 많은 예제를 원하신면
http://borg.postgresql.org/docs/8.0/interactive/client-authentication.html#EXAMPLE-PG-HBA.CONF로 가보시기 바랍니다.

 

이 글에 대한 댓글이 총 2건 있습니다.

안그래도, 한국어로 된 이런 글이 필요했었는데,

작성하신다고 수고하셨네요.

 

덧붙일 부분은 ssl 관련인데요,

ssl 관련은 pg_hba.conf 와, postgresql.conf 설정만으로 해결나지 않습니다.

 

옛날 문서이지만,

http://database.sarang.net/index.php?inc=read&aid=5502&criteria=pgsql&subcrit=tutorials&id=&limit=20&keyword=&page=2

페이지를 참고하시고,

8.0 부분에서 또 바뀌었습니다.

이부분에 대한 이야기도 또 한번 자리를 내어해야겠네요.

 

김상기(ioseph)님이 2005-01-30 08:54에 작성한 댓글입니다.

 

ssl부분은 모르시는분들에게는 약간의 혼동이 있으시겠네요

다시 읽어 봤어야하는데 암튼 일단 8.0 문서로 링크수정을 하였구요.

 

ssl,Krb,Ident Map,pam에 대해서 테스트중인데 시간이 딸려서^^

암튼 지적감사합니다.^^

 

상기님 ssl인증자료 올라오기를 언능 기둥겨야겠네요 ^^;

조성준(openphp)님이 2005-01-30 20:07에 작성한 댓글입니다.
이 댓글은 2005-01-30 20:16에 마지막으로 수정되었습니다.
[Top]
No.
제목
작성자
작성일
조회
5878initdb 없이 template1 데이터베이스 새로 만들기
김상기
2005-02-08
11509
5870pg_restore 사용법 [1]
김상기
2005-02-04
24996
5854PostgreSQL 8 : Group,User관리
조성준
2005-01-30
25086
5853PostgreSQL 8 : pg_hda.conf - 보정중 [2]
조성준
2005-01-30
14902
5845PostgreSQL 8 : Install -한글부분수정 [3]
조성준
2005-01-28
30559
5834PostgreSQL 8 : PostgreSQL.conf 설정하기 [2]
조성준
2005-01-25
19586
5833PostgreSQL 8 : PITR [2]
조성준
2005-01-25
10064
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.057초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다