pg_hba.conf



pg_hba.conf

– PostgreSQL의 인증관련 설정 파일 ( HBA : host-based authentication 호스트 기반의 인증 약어 )

1) $PGDATA 에 존재. (클러스터홈)
2) PostgreSQL의 pg_hba.conf 파일을 통해 외부접근에 대한 처리는 되도록 배재하는것이 좋습니다.
pg_hba.conf 설정을 통하여 외부접근을 하게 되면, PostgreSQL 인증체크처리 부하가 발생하여 전체적인 성능에 부하가 걸릴 수 있기 때문에, OS단의 iptables에서 통제 하거나, 그 앞단에서 방화벽, 보안장비에서 통제하는 편이 좋습니다.
3) 설정은 간단하며, 접근 Host나 Host의 데이터 전송방식과 암호화 전송방식에 대한 설정을 가지고 있습니다.
4) 실제적인 계정에 대한 정보는 PostgreSQL의 카탈로그 테이블인 pg_user에서 관리하기 때문에 계정 권한, 패스워드 변경 등의 작업은 실시간 적용이 가능하나, 클라이언트의 접근 방식이나, 암호 전달 방식은 pg_ctl reload 또는, pg_ctl restart 명령을 통해 pg_hba.conf를 다시 로드해야 합니다. restart는 불편함이 있지만, 불법 접근에 대한 처리에 있어 빠른 응답으로 PostgreSQL 서버 부담을 줄이고, 최대한 성능을 끌어내기 위해 채택한 방법입니다.

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)서비스를 사용한 인증

 

– 설정 예제

# 로컬 시스템상의 모든 유저가 임의의 데이터베이스에
# 임의의 데이터베이스 유저명으로 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



You may also like...

1 Response

  1. 2019년 May 21일

    […] 클라이언트 서버의 PostgreSQL Master 노드로의 인증 방식에 대한 설정은 pg_hba.conf 포스팅을 참고하면 […]

Leave a Reply

Your email address will not be published. Required fields are marked *