설문조사
PostgreSQL/PPAS 관련 듣고 싶은 교육은


총 게시물 73건, 최근 0 건
   

pg_hba.conf 상세설명

글쓴이 : 하늘소 날짜 : 2014-04-30 (수) 10:46 조회 : 84205
PostgreSQL의 인증관련 설정파일인 pg_hba.conf 파일에 대한 설명입니다.
 
: PostgreSQL pg_hba.conf 파일을 통해 외부접근에 대한 처리는 되도록 배재하는것이 좋습니다.
외부접근제어는 시스템 OS Kernel Level Packet Filter( iptable, ipchain...)를 이용하는 것이 PostgreSQL로의 불법로그인으로 인한 PostgreSQL 인증체크처리 부하라던지 전체적인 성능에 이득이 됩니다.
 
, Kernal단에서 해당 IP IP Block에 대해서 접근제어를 해주는 것이 전체적인 성능에 좋습니다.
 
 
 pg_hba.conf
디폴트 pg_hba.conf 파일은, 데이터 디렉토리가 initdb로 초기화될 때에 설치되며, initdb에서 생성된 클러스터 폴더(PGDATA)에 들어 있습니다.
( HBA : host-based authentication 호스트 기반의 인증 약어 )
pg_hba.confPostgreSQL의 인증시스템관련 정보를 담고 있는 설정파일로 설정방법이 간단한편으로 실제적인 계정에 대한 정보는 PostgreSQL의 카탈로그 테이블인 pg_user에서 관리하고 접근 Host Host의 데이터 전송방식과 암호화 전송방식에 대한 설정을 가지고 있다. 그런 이유로 계정에 대한 권한이나 패스워드등의 변경은 실시간으로 적용이 가능하나 접근자의 접근방식과 암호전달 방식에 대해서는 pg_ctl reloadpg_ctl restart를 통해 daemon이 다시 pg_hba.conf파일을 로드하게 해주어야 한다. 불편성이 있는듯 하지만, 불법접근에 대한 처리시에 빠른 응답으로 Postgres Server부담을 줄이기 위함으로 최대한의 성능을 위한 것입니다.
 
[ pg_hba.conf 내용 ]
# TYPE  DATABASE        USER            ADDRESS                 METHOD
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#host    replication     enterprisedb        127.0.0.1/32            md5
#host    replication     enterprisedb        ::1/128                 md5

 
 
 
 작업 방법
1.     Host Type
Host Type은 접근자의 접근위치와 통신의 암호화 관련 설정입니다.
local, host, hostssl, hostnossl을 지원합니다.
 
local은 자칫 localhost로 생각할 수 있겠지만, local Unix Domain Socket을 통한 접속에 해당되는 것으로 다소 햇갈릴수 있으니 주의 하시기 바랍니다.
 
데이터베이스의 백업 및 복구
 
hostssl ssl인증서를 통한 암호화 통신만 지원하며 localhost, 127.0.0.1식의 즉 TCP/IP접속에 해당된다.
hostnossl ssl접속은 불가능하며, TCP/IP통신을 지원합니다.
 
host hostssl로 설정한 상태에서 SSL기능을 사용하시려면 Postgres컴파일시 --with-openssl옵션을 주어야 하며, postgresql.conf ssl=true로 설정을 해주셔야만 합니다.
 
 
2.     Database Name
특정한 디비에 대한 접속을 제한할 수 있으며 ,(콤마)로 여러 개의 DB로 접근 제어가 가능합니다.  모든 DB에 대한 접근을 풀려면 all로 설정하시면 됩니다. 만약에 설정할 DB가 수십개라면 기재하기 불편하실경우 @dblist.txt 식으로 설정하고 dblist.txt PGDATA로 설정한 폴더의 안에 넣어 두시면됩니다.
 
3.     User Name
계정설정으로 ,(콤마)구분으로 할 수 있으며, Database @파일명 식으로 따로 파일을 만들어서 처리하실수도 있습니다. PostgreSQL의 계정 그룹 카탈로그 테이블인 pg_group 또는 create_group 명령으로 그룹을 만들어 계정들은 하위(SYSID)에 묶어두었을때는 +(플러스) 키를 붙인 그룹명으로 설정하면 해당 그룹에 대한 모든 접근이 가능해집니다.
 
4.     CIDR-ADDRESS or IP-Mask
IPv4 CIDR구분으로 해당 C Class에 대해 모두 접근처리를 할 경우는 : xxx.xxx.xxx.0/24
해당 IP에 대한 접근처리를 할 경우는 : xxx.xxx.xxx.xxx/32
 
5.     Authentication Method
이 부분은 실제적인 계정의 패스워드에 대한 서버로의 전송을 어떻게 할 것인가를 정하는 것입니다.
PostgreSQL Server Client와의 접속에는 처음 Client가 접속을 하게 되면 pg_hba.conf에 대해 검색해서 해당 접속에 대한 접근허용을 확인하고 확인이 되면 이 Auth.Method에 설정된 암호화 방식으로 패스워드를 전송하라고 응답메시지를 보내고 다시 Client Server로 로그인을 하게 되는 방식입니다.
trust : 패스워드 없이 접근 가능
reject : 거부
md5 : 패스워드를 md5로 암호화해서 전송
crypt : crypt로 암호화 해서 전송 Postgres 7.2이후부터는 사용 않함. (이전버전설정 호환용)
password : text로 패스워드를 전송하는 것.
krb4, krb5 : KerberOS V4, 5를 지원한다.
ident : 접속 ClientOS User이름을 확인하는 방법?
pam : PAM(Pluggable Authentication Modules)서비스를 사용한 인증
 

하늘소 2014-04-30 (수) 10:53
설정 예
# 로컬 시스템상의 모든 유저가 임의의 데이터베이스에
# 임의의 데이터베이스 유저명으로 Unix 도메인 소켓을 사용해 접속하는 것을 허가
# (로컬 접속에서는 디폴트).
#
# TYPE    DATABASE    USER        CIDR-ADDRESS          METHOD
  local    all            all                                  trust


# 로컬 loopback의 TCP/IP 접속을 사용하는 것은 위와 같다.
#
# TYPE    DATABASE    USER        CIDR-ADDRESS          METHOD
  host    all            all          127.0.0.1/32              trust   


# 분리된 netmask 열을 사용하고 있는 것을 제외하고 위와 같다.
# TYPE    DATABASE    USER        IP-ADDRESS    IP-MASK            METHOD
  host    all            all          127.0.0.1        255.255.255.255  trust


# IP주소 192.168. 93. x를 가지는 모든 호스트의 모든 유저가,
# ident가 그 접속에 대해 보고하는 것과 같은 유저명(전형적으로는 Unix 유저명)으로
# 데이터베이스 "postgres"에 접속하는 것을 허가.
#
# TYPE    DATABASE    USER        CIDR-ADDRESS          METHOD
  host    postgres    all        192.168.93.0/24      ident sameuser


# 유저의 패스워드가 올바르게 입력되었을 경우,
# 호스트 192.168. 12.10부터의 유저가 데이터베이스 "postgres"에 접속하는 것을 허가
#
# TYPE    DATABASE    USER        CIDR-ADDRESS          METHOD
  host    postgres      all          192.168.12.10/32      md5


# 선행하는 "host"행이 없으면, 이 2행에 의해 192.168. 54.1으로 접속 시도는
# 모두 거부(이 항목이 최초로 일치되기 때문에).
# 다만, 인터넷상의 다른 모든 장소로부터의 Kerberos 5 접속은 허가.
# 제로 마스크는, 호스트 IP주소의 비트를 고려하지 않고
# 어느 호스트라도 조합할 수 있는 것을 의미합니다.
#
# TYPE    DATABASE    USER        CIDR-ADDRESS          METHOD
host    all        all        192.168.54.1/32      reject
host    all        all        0.0.0.0/0            krb5


# 192.168. x.x 호스트로부터의 유저가, ident 검사를 통과하는 경우,
# 어느 데이터베이스라도 접속을 허가. 만약, 예를 들면, ident가 "bryanh"라고 인정해
# "bryanh"가 PostgreSQL의 유저 "guest1"로서
# 접속 요구를 내는 경우, "bryanh"는 "guest1"로 접속이 허가된다고 합니다.
# 맵 "omicron"에 대한 기재사항이 pg_ident.conf에 있으면 접속을 허가.
#
# TYPE    DATABASE    USER        CIDR-ADDRESS          METHOD
  host    all            all          192.168.0.0/16          ident omicron


# 로컬 접속에 대해서, 이하의 단 3행 밖에 기재가 없는 경우, 로컬 유저는
# 자신의 데이터베이스(데이터베이스 유저명과 같은 이름의 데이터베이스)에게만 접속 허가.
# 다만 관리자와 롤 "support"의 멤버는 모든 데이터베이스에 접속 가능.
# $PGDATA/admins 파일은 관리자의 리스트를 포함한다.
# 모든 경우에 패스워드가 필요.
#
# TYPE    DATABASE    USER        CIDR-ADDRESS          METHOD
local  sameuser      all                                        md5
local  all              @admins                                md5
local  all              +support                                md5


# 위의 마지막 2행은 1개의 행으로 정리하는 것이 가능.
local  all              @admins,+support                    md5

# 데이터베이스의 열에는 리스트나 파일명도 사용할 수 있지만, 그룹은 사용할 수 없다.
  local  db1,db2,@demodbs  all                              md5






참고자료
 http://blog.naver.com/PostView.nhn?blogId=jsyo0o&logNo=90152973412
 http://blog.naver.com/hensumen?Redirect=Log&logNo=150166273921
댓글주소
PostgresDBA 2014-04-30 (수) 20:07
잘봤습니다^^
댓글주소
   

postgresdba.com