PostgreSQL

PostgreSQL: credcheck

dewstream 2025. 6. 17. 08:00
728x90

※ PostgreSQL: credcheck.
 
안녕하세요. 듀스트림입니다.
 
보안 요구 조건에 따라 DBMS에서도 Password 정책을 설정해야 할 때가 있습니다.
 
기본으로 제공되는 passowrdcheck의 경우 정말 단순한 기능만을 지원하기 때문에 더 강력한 보안 기능이 필요할 때 사용하는 확장 기능인 credcheck에 대해 알아보겠습니다.


1. credcheck?

credcheck는 PostgreSQL에서 사용자의 비밀번호 및 계정 생성 시 복잡도, 재사용, 만료, 인증 실패 제어 등의 고급 정책을 적용할 수 있게 해주는 Extension입니다. (PostgreSQL 12 이상 지원)


vs passwordcheck

항목passwordcheckcredcheck
제공 방식PostgreSQL 내장 (contrib)외부 확장
설치 용이성기본 제공(../contrib)추가 설치 필요
비밀번호 복잡도 검사✅ (정밀도가 훨씬 높음)
사용자명 규칙 검사
비밀번호 재사용 금지
비밀번호 만료 정책
로그인 실패 차단/BAN
인증 지연
설정 방식코드 수정GUC 매개변수로 유연 설정
보안 수준상대적 낮음상대적 높음
  • 간단한 비밀번호 복잡도 검사만 필요하신 경우 passwordcheck를 사용하셔도 무방합니다.

2. credcheck 설치 방법

▸ 패키지 설치

dnf install dnf-plugins-core -y
dnf config-manager --set-enabled powertools
dnf install cracklib-devel -y

 
▸ 소스 코드 다운로드

Release Version 3.0 · HexaCluster/credcheck

2024-12-31 - Version 3.0.0 This release adds a new feature to exclude a list of users from being banned and fixes bugs reported by users since last release. Fix ban count with ssl. Fix compilation...

github.com

 
▸ 서버에 업로드 후 압축 해제

# PostgreSQL OS User로 수행
tar -zxvf credcheck-3.0.tar.gz

cd credcheck-3.0

 
 
▸ make & make install

# 필요시 권한 부여
chmod -R u+w /postgres/lib
chmod -R u+w /postgres/share/extension

# make & make install
make && make install

# 권한 원복
chmod -R 755 /postgres/lib
chmod -R 755 /postgres/share/extension

 
▸ postgresql.conf 설정

# postgresql.conf에 아래 내용 추가

shared_preload_libraries = 'credcheck'

 
▸ PostgreSQL 재시작

# shared_preload_libraries 등록을 위해 재시작
pg_ctl restart

 
▸ extension 생성

CREATE EXTENSION credcheck;

3. 파라미터

파라미터설명기본값설정 가능 값
username_min_length사용자명 최소 문자 수4≥1
username_min_special최소 특수문자 수1≥0
username_min_digit최소 숫자 수1≥0
username_min_upper최소 대문자 수2≥0
username_min_lower최소 소문자 수1≥0
username_min_repeat연속 반복 허용 최대2≥1
username_contain포함 필수 문자열문자열 리스트
username_not_contain포함 금지 문자열문자열 리스트
username_contain_password사용자명에 비밀번호 포함 허용 여부falsetrue/false
username_ignore_case대소문자 무시 여부falsetrue/false
whitelist검사 제외 사용자 목록''콤마로 구분된 사용자명
password_min_length비밀번호 최소 길이4≥1
password_min_special/digit/upper/lower각 특성 최소 개수1 / 1 / 1 / 1≥0
password_min_repeat비밀번호 반복 문자 최대 허용2≥1
password_contain_username비밀번호에 사용자명 포함 금지 여부false 
password_contain/not_contain포함/금지 문자열문자열
password_ignore_case검사 시 대소문자 무시false 
password_reuse_history최근 재사용 방지 개수0정수
password_reuse_interval재사용 금지 기간(일)0정수
password_valid_until최소 만료 기간(일)0정수
no_password_logging비밀번호 오류 시 로그 금지truetrue/false
max_auth_failure인증 실패 허용 횟수(0=비활성)0정수
auth_failure_cache_size인증 실패 기록 캐시 수1024정수
reset_superusersuperuser BAN 초기화 여부falsetrue/false
auth_delay_ms인증 실패 후 지연(ms)0정수

4. 사용 예시

▸ 규칙 설정

ALTER SYSTEM SET credcheck.username_min_length = 5;
ALTER SYSTEM SET credcheck.password_min_length = 8;
ALTER SYSTEM SET credcheck.password_reuse_history = 1;
ALTER SYSTEM SET credcheck.max_auth_failure = 5;
ALTER SYSTEM SET credcheck.auth_delay_ms = 500;
ALTER SYSTEM SET credcheck.whitelist = 'postgres,admin';

 
▸ 사용자명 규칙 미달

 
▸ 비밀번호 규칙 미달

 
▸ 재사용 방지 테스트

 
▸ 내역은 View로 확인 가능

SELECT * FROM public.pg_password_history;

오늘은 여기까지~
 

728x90

'PostgreSQL' 카테고리의 다른 글

PostgreSQL: Partition  (4) 2025.06.26
PostgreSQL: Lock  (0) 2025.06.24
PostgreSQL: Disk I/O 및 WAL 흐름  (0) 2025.06.11
PostgreSQL: Streaming Replication  (0) 2025.06.10
PostgreSQL: ROLE  (4) 2025.06.09