centos 환경에서 postgresql database 설치
1. OS 환경 확인
[root@localhost ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
OS check : centos 7 rhel fedora
2. 설치된 패키지 최신버전으로 업데이트
[root@localhost ~]# sudo yum update -y
릴리즈가 잦은 오픈소스이므로 패키지 버전이 낮아 발생하는 오류를 방지하기 위함입니다. 생략해도 설치는 무방합니다.
3. postgresql repository 추가
postgresql 10 버전 이상부터는 repository 설치가 필요합니다. 여기서는 11버전으로 설치합니다. (10버전과 방법 동일)
root 계정으로 실행)
[root@localhost ~]# yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11-2.noarch.rpm
(postgres 계정으로 실행시 관리자권한으로 실행 : sudo yum install ----) Y를 누르고 설치 진행합니다.
4. postgresql 설치
postgresql client와 server yum으로 설치합니다. 설치가 오래 걸리지는 않습니다.
[root@localhost ~]# yum -y install postgresql11-server postgresql11
5. 설치된 db 초기화
[root@localhost ~]# service postgresql-11 initdb
Initializing database ... OK
초기화가 제대로 진행되지 않는다면 폴더에 기본 생성된 setup 파일을 직접 접근하여 초기화 진행합니다.
[root@localhost ~]# /usr/pgsql-11/bin/postgresql-11-setup initdb
6. 설치된 postgresql 시스템에 등록
[root@localhost ~]# systemctl start postgresql-11
[root@localhost ~]# systemctl enable postgresql-11
실행 등록되었는지 확인)
[root@localhost ~]# systemctl list-unit-files
enabled service list 만 출력하려면 뒤에 --state=enabled 조건 추가하여 명령어 실행
7. bash_profile protocol 변경
su - postgres 로 접속하면 일단 보기에 안익숙하니 프로토콜을 변경해줍니다.
[root@localhost ~]# su - postgres
-bash-4.2$ vi .bash_profile
제일 하단에 다음과 같은 내용을 추가 해줍니다.
export PS1="[\u@\h \w]\\$ "
8. dbeaver 등 db tool 을 사용하여 로컬에서 원격으로 db서버에 접속하기 위해 방화벽 허용
[root@psql-db ~]# firewall-cmd --add-service=postgresql --permanent
success
[root@psql-db ~]# firewall-cmd --reload
success
9. 기본환경설정(외부접속을 위한 환경 변수 설정)
step1) postgresql의 conf file 설정
default 위치는 아래와 같습니다. 해당 위치로 들어가서 vi 편집기에서 환경변수를 설정해줍니다.
[root@localhost ~]# vi /var/lib/pgsql/11/data/postgresql.conf
initdb 명령이 정상적으로 실행되었다면 자동으로 conf file이 생성됩니다.
리스너 설정) listen_addresses = '*' 를 해당 파일 내용에 추가해줍니다.
step2) postgresql의 pg_hba.conf file 설정
[root@localhost ~]# vi /var/lib/pgsql/11/data/pg_hba.conf
remote 접속 허용 설정)
-- 암호를 아는 누구나 접속할 수 있게 하는 방식
# Accept from anywhere
host all all 0.0.0.0/0 md5
host all all 127.0.0.1/32 md5
-- 모든 접근을 허용하는 방식
host all all 127.0.0.1/32 trust
host all all 0.0.0.0/0 trust
md5(암호사용)이나 trust(모든 접근 허용)으로 접근 허용 설정 후 esc+wq! 로 vi 편집기 빠져나옵니다.
접근권한 환경설정에 대한 부가설명)
pg_hba.conf는 default로 data directory가 initdb 명령으로 초기화 될 때 설치됨
initdb에서 생성된 cluster folder (PGDATA)에 생성
pg_hba.conf는 Postgresql의 인증시스템관련 정보를 담고있는 설정파일로 설정방법이 간단하여 실제적인 계정 정보는 Postgresql의 catalog table(pg_user)에서 관리하고 접근 host나 데이터 전송방식, 암호화 전송방식에 대한 설정을 가지고 있습니다. 이런 이유로 계정 권한이나 패스워드 변경 등은 실시간 적용이 가능하나 접근자의 접근방식과 암호전달 방식에 대해서는 pg_ctl reload 또는 pg_ctl restart 명령어를 통해 daemon이 다시 pg_hba.conf 파일을 로드해야 합니다. 불법적인 접근에 대한 처리시 빠른 응답으로 Postgresql server 부담을 줄이기 위함으로 탄력적인 보안 방안을 제공한다고 볼 수 있습니다.
# TYPE DATABASE USER ADDRESS METHOD
host all all 0.0.0.0/0 trust
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication all peer
#host replication all 127.0.0.1/32 ident
host all all 127.0.0.1/32 trust
1) host type
접근자의 접근 위치와 통신 암호화 관련 설정 (local, host, hostssl, hostnossl 지원)
local : localhost가 아닌 Unix Domain Socket을 통한 접속에 해당
hostssl : ssl인증서를 통한 암호화통신만 지원, localhost, 127.0.0.1 형식의 TCP/IP접속에 해당
hostnossl : ssl접속은 불가능하며 TCP/IP 통신 지원
host나 hostssl로 설정한 상태에서 ssl기능을 사용하려면 Postgres compile시 --with-openssl 옵션을 주어야 하며, postgresql.conf에서 ssl=true로 설정을 해주어야 함
2) database name
특정 db에 대한 접속을 제한할 수 있으며 ' , (comma)' 문자로 여러개의 db 접근 제어가 가능. 모든 db에 대한 접근을 풀려면 all로 설정하고 만약 설정해야 할 db의 갯수가 많다면 @dblist.txt 식으로 설정하고 dblist.txt를 PGDATA로 설정한 폴더 안에 넣어두면 됨
3) User Name
계정 설정으로 database name과 마찬가지로 ' , (comma)'를 사용하여 구분 할 수 있고 @file_name 식으로 따로 파일을 만들어서 처리 가능. postgresql의 계정 그룹 catalog table인 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) service를 사용한 인증
step3) postgresql 재시작
[root@localhost ~]# systemctl restart postgresql-11
10. postgres 계정으로 접속 후 test
[root@psql-db ~]# su - postgres -c psql
수고하셨습니다^.^
'[DB] POSTGRESQL' 카테고리의 다른 글
[PostgreSQL] database 관리(생성/추가/삭제/변경) (0) | 2020.03.31 |
---|---|
[PostgreSQL] 계정/유저 관리 (0) | 2020.03.31 |
[PostgreSQL] 기본 조회 명령어 및 변수 선언, 설정 (0) | 2020.03.31 |
[PostgreSQL] 디렉토리 구조 및 환경 변수 파일 (0) | 2020.03.31 |
[PostgreSQL] Postgresql database 기본 구조 (0) | 2020.03.31 |