※ PostgreSQL: credcheck.
안녕하세요. 듀스트림입니다.
보안 요구 조건에 따라 DBMS에서도 Password 정책을 설정해야 할 때가 있습니다.
기본으로 제공되는 passowrdcheck의 경우 정말 단순한 기능만을 지원하기 때문에 더 강력한 보안 기능이 필요할 때 사용하는 확장 기능인 credcheck에 대해 알아보겠습니다.
1. credcheck?
credcheck는 PostgreSQL에서 사용자의 비밀번호 및 계정 생성 시 복잡도, 재사용, 만료, 인증 실패 제어 등의 고급 정책을 적용할 수 있게 해주는 Extension입니다. (PostgreSQL 12 이상 지원)
vs passwordcheck
항목 | passwordcheck | credcheck |
제공 방식 | 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 | 사용자명에 비밀번호 포함 허용 여부 | false | true/false |
username_ignore_case | 대소문자 무시 여부 | false | true/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 | 비밀번호 오류 시 로그 금지 | true | true/false |
max_auth_failure | 인증 실패 허용 횟수(0=비활성) | 0 | 정수 |
auth_failure_cache_size | 인증 실패 기록 캐시 수 | 1024 | 정수 |
reset_superuser | superuser BAN 초기화 여부 | false | true/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;

오늘은 여기까지~
'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 |