credcheck는 PostgreSQL의 패스워드 보안을 강화하기 위해 사용하는 확장 모듈(Extension)이다. 중요한 점은 DB 재시작이 무조건 필요해서 운영하는 시스템에 적용하려면 다운타임이 발생한다는 것이다.
git에서 다운받을 수도 있지만, 인터넷 통신이 불가능한 사내망이라면 so 파일을 만들어내기 위해서 필요한 모든 의존성 패키지들을 RPM 파일로 전부 준비해야한다.(지옥이다!!) 그래서 credcheck.so 모듈로 이미 만들어진 RPM(완전체) 패키지를 다운받으면 정말 편하다.
1. RPM 패키지 설치하기
Redhat 8 / PG 14 기준으로 아래 링크에서 RPM을 다운한다. OS와 PG 버전을 맞게 찾아야한다.
알아서 Postgresql 라이브러리 폴더로 so 파일을 넣어주기에 라이브러리(ex: /usr/psql-14/lib/) 에서 RPM을 설치할 필요가 없다.
원래라면 git에서 zip 파일로 서버로 넣어서 한다면 소스 코드 컴파일을 통해서 so 파일을 생성해줘야해서 인터넷이 불가하다면 gcc, make 같은 빌드 도구와 devel 패키지가 필요하고 의존 패키지들을 전부 일일히 RPM 파일로 다운받아서 설치해줘야한다.
그 외 필요한 의존성 패키지들도 전부 설치해줘야한다...
https://download.postgresql.org/pub/repos/yum/14/redhat/rhel-8-x86_64/
Index of /pub/repos/yum/14/redhat/rhel-8-x86_64/
download.postgresql.org

rgel8.10이라고 적혀있으면 제작할때 8.10 환경에서 만들었다는 뜻이다. 그러나 8.6인 환경에서 설치하는데 문제가 없던걸로 봐서 마이너 버전의 호환은 가능한 모양이다.
sudo yum install -y ./credcheck_14-4.7-1PGDG.rhel8.10.x86_64.rpm
2. postgresql.conf의 위치를 찾아 config 파일을 수정한다.
# postgresql.conf 파일 경로를 찾는다.
SHOW config_file;
# config 파일안에서 해당 부분을 수정한다.
shared_preload_libraries = 'credcheck'
3. DB 재시작을 한다.
sudo systemctl restart postgresql-14
4. 모듈을 활성화하고 적용되었는지 확인한다.
# psql 접속 후
CREATE EXTENSION credcheck;
# 정상 적용 확인
SELECT * FROM pg_extension WHERE extname = 'credcheck';
5. 예외 적용
비밀번호 정책을 적용할 수 없는 시스템, 백업 계정 등에 예외처리가 가능하다.
ALTER SYSTEM SET credcheck.whitelist = 'admin, batch_user';
6. 규칙 설정
ALTER SYSTEM SET credcheck.password_length = 8; -- 8글자 이상
ALTER SYSTEM SET credcheck.password_complexity = 2; -- 영문/숫자/특수기호 중 2개 이상 조합
ALTER SYSTEM SET credcheck.password_age = 90; -- 90일 후 변경 권고
7. 설정 반영을 위해 서버 설정 리로드해야한다. (재시작 없이 반영 가능)
리로드하지 않으면 예외처리와 규칙 설정이 적용되지 않으니 필수로 꼭 해야한다.
SELECT pg_reload_conf();
8. 예외 및 규칙 설정 정상 확인
SHOW credcheck.password_length;
SHOW credcheck.password_complexity;
SHOW credcheck.password_age;
SHOW credcheck.whitelist;
📌 규칙을 적용한다고 기존에 이미 등록된 계정의 비밀번호가 변경되는것은 아니다. 새로 계정을 생성하거나 비밀번호 변경주기가 도래하여 비밀번호를 새로 바꿀 때 정책 체크를 시작한다.
📌 예외와 규칙을 변경할땐 DB 재시작이 필요하지 않지만, 모듈을 활성화하기 위해서는 DB 재시작이 필수적이다.