본문 바로가기

구형 시스템 전반에 적용 가능한 rpm DB 손상 및 설치 오류 원인과 복구

728x90

상황 요약: Red Hat Linux release 9 (Shrike)에서 wazuh-agent-4.13.1-1.i386.rpm 설치 시
V3 RSA/MD5 signature: NOKEY, rpmlib(FileDigests) <= 4.6.0-1 is needed 오류 발생.

대표 오류 예시와 즉시 판단 포인트

설치 불가(기능 미지원)

error: Failed dependencies:
  rpmlib(FileDigests) <= 4.6.0-1 is needed by ...
  • 원인: 시스템 rpm 자체가 너무 구형(RHL9의 rpm은 대개 4.2대, glibc 2.3대).
    최신 패키지의 메타데이터/해시/압축 포맷을 이해 못함.

서명/키 관련

warning: V3 RSA/MD5 signature: NOKEY, key ID 29111145
  • 원인: GPG 키 미설치. 부차적 문제이며, 위 ①번이 근본 원인일 때는 키를 넣어도 설치 불가.

압축 포맷/페이로드 미지원

rpm: rpmReadSignature failed ...
Payload is xz compressed
  • 원인: 구형 rpm은 xz/zstd 페이로드 미지원(주로 RHEL5 이하/구 rpm).

의존성 충돌

conflicts with file from package ...
  • 원인: 같은 경로에 파일 충돌, 이전 패키지 잔존 등.

rpm DB 손상/잠김(베르클리DB)

rpmdb: BDB0113 Thread/process ... failed
error: db4 error(-30969) from dbenv->open: DB_RUNRECOVERY: Fatal error, run database recovery
  • 원인: 비정상 종료/디스크 이슈/락파일(__db.*) 잔존/DB 자체 손상.

RHL9 + Wazuh 사례의 정석 결론

  • RHL9(2003~2004) 에서는 Wazuh 4.x 설치 불가
    (64비트/x86_64, glibc ≥ 2.17, rpm ≥ 4.6급 기능 요구. RHL9는 32비트·구 rpm/glibc).
  • 현실적 대안
    1. 에이전트리스 수집: syslog 포워딩, SSH 기반 Wazuh Agentless
    2. 중간 브리지 노드: RHL9 → 로컬 syslog → (지원 OS) 수집기 → Wazuh
    3. 장기적으로 OS 업그레이드(RHEL/Rocky/Alma 8+).

아래는 “설치가 가능한 환경”에서 흔히 마주치는 문제(키/의존성/rpmdb)를 완전 복구 가이드로 정리했습니다.
RHL9에는 일부 명령이 없을 수 있어, 대체 명령(예: db4_*)을 함께 표기합니다.

빠른 진단 스크립트(원인 규명 1분 컷)

echo "[*] OS/아키/런타임"
uname -m                              # i386/i686면 32bit
cat /etc/redhat-release
rpm --version                         # 4.6 미만이면 최신 패키지 설치 불가
ldd --version | head -1               # glibc 2.17 미만이면 최신 에이전트 불가

echo "[*] 패키지 서명/요구사항 확인"
rpm -K ./wazuh-agent-4.13.1-1.i386.rpm || true
rpm -qp --requires ./wazuh-agent-4.13.1-1.i386.rpm || true

echo "[*] rpmdb 상태 점검"
ls -l /var/lib/rpm
# __db.* 파일 다수 + BDB 오류 로그 있으면 잠김/손상 의심
  • 결과 해석
    • rpm 4.6 미만 + i386/i686현행 Wazuh 설치 불가(구조적)
    • rpmdb 오류만 보이면 → 아래 절차로 복구 후 재시도
300x250

rpm DB(베르클리DB) 복구 절차 — 단계별 “정석” 가이드

반드시 백업: 복구 전 /var/lib/rpm 디렉터리를 통째로 백업하세요.

1) 준비 & 백업

# 0) 루트 권한
sudo -i

# 1) 패키지 관련 프로세스 중지 (yum/up2date 등)
#   RHL9에는 주로 up2date/syslog, 상황에 맞게 중지
fuser -v /var/lib/rpm/* 2>/dev/null || true

# 2) rpmdb 백업
tar -C /var/lib -cvzf /root/rpmdb-backup-$(date +%F).tgz rpm

2) 잠금/임시파일 제거 → rebuilddb

# 3) 임시락 파일(__db.*) 제거
rm -f /var/lib/rpm/__db.*

# 4) 재구성 (여러 번 시도 권장)
rpm --rebuilddb -v
rpm --rebuilddb -v

# 5) 검증
rpm -qa | head
  • 효과: 잔존 락/임시파일로 인한 오류 해결, 인덱스 재생성.

3) DB 무결성 검사 & 구조적 복구

RHL9 계열은 db4 유틸을 사용합니다. 배포에 따라 db_verify 대신 db4_verify 입니다.

# 6) 검증 (배포에 따라 명령 다름)
db_verify /var/lib/rpm/Packages  || db4_verify /var/lib/rpm/Packages

# 7) salvage dump → clean load
db_dump -r /var/lib/rpm/Packages   > /root/Packages.dump   || db4_dump -r /var/lib/rpm/Packages > /root/Packages.dump

mv /var/lib/rpm/Packages /var/lib/rpm/Packages.bad

db_load /var/lib/rpm/Packages      < /root/Packages.dump   || db4_load /var/lib/rpm/Packages    < /root/Packages.dump

# 8) 최종 재구성
rpm --rebuilddb -v
rpm -qa | wc -l
  • 의미: 손상된 BDB 파일을 덤프 후 재적재 → 구조 복원.

4) 완전 파손 시(최후의 수단)

# 9) 새 DB 초기화 (DB가 전혀 동작하지 않을 때)
mv /var/lib/rpm /var/lib/rpm.broken.$(date +%s)
mkdir /var/lib/rpm
rpm --initdb

# (가능하면) 설치되어 있던 패키지 헤더를 재주입해야 하나,
# 구형 시스템/미러 단절 환경에서는 현실적으로 어렵습니다.
# 따라서 이 단계는 최후의 수단으로만 고려하세요.

5) 트랜잭션 재시도 & 시스템 점검

# 10) 메타데이터/캐시 클린(해당 환경에 맞게)
# RHL9은 yum 미사용일 수도 있음. 있으면:
yum clean all || true

# 11) 패키지 검증
rpm -Va | tee /root/rpm-verify.txt

# 12) 재설치/업그레이드 재시도
rpm -Uvh yourpkg.rpm

중요: BDB 복구는 동일 메이저 버전의 db 유틸로 해야 안전합니다.
(예: db4로 만들어진 DB는 db4 계열 도구로 dump/load)

유형별 해결책 요약(체크리스트)

  1. rpmlib(FileDigests) 등 기능 미지원
    • ✔ OS/아키 업그레이드(64bit, 최신 rpm/glibc).
    • ✔ 불가 시: 에이전트리스(syslog/SSH) 전환.
  2. GPG 키 없음(NOKEY)
    • ✔ (가능한 환경에서) 키 등록: rpm --import <GPG-KEY>
    • --nogpgcheck 지양(보안 정책상 금지 권장).
  3. 압축 포맷 미지원(xz/zstd)
    • ✔ 최신 rpm으로 업그레이드해야만 해결.
    • ✔ 구환경 유지 시 해당 패키지 설치 불가.
  4. 의존성/파일 충돌
    • ✔ 가급적 yum 사용(자동 의존성).
    • ✔ 불가 시 충돌 패키지 제거/치환(업무 영향 분석 후).
    • --force/--nodeps/--replacefiles비상시에만(감사 리스크).
  5. rpm DB 손상
    • rm -f /var/lib/rpm/__db.*rpm --rebuilddb(2~3회).
    • db_dump -rdb_loadrpm --rebuilddb.
    • ✔ 최후: rpm --initdb(백업 필수).

보안 관점 운영 가이드

  1. EOL 자산 관리
    • RHL9 같은 미지원 OS 목록화 → 격리 네트워크/최소 권한/접속 제어.
    • 업그레이드 로드맵과 예산·리스크를 문서화.
  2. 무결성·서명 검증
    • GPG 키 관리 정책 수립(키 출처/갱신/폐기).
    • rpm -K(서명검증), rpm -Va(무결성) 정기 수행.
  3. 패키지 변경 통제
    • --force/--nodeps 사용 금지(예외 승인제).
    • 변경 이력/승인·롤백 절차 확보(감사 대응).
  4. 로그 공백 방지
    • 에이전트 설치 불가 자산 → syslog 포워딩 또는 Wazuh Agentless.
    • 수집 실패 모니터링(“미수집 감시” 알림).
  5. 사고/장애 기록 표준화
    • 오류 스크린샷·명령 로그·복구 단계·결과를 템플릿에 기록.
    • 재발 방지 액션(업그레이드 계획/대체 경로) 포함.

RHL9에서 가능한 대안 예시(에이전트리스)

1) 전통 syslog로 중앙 전송(udp 514)

# /etc/syslog.conf
*.*    @WAZUH_LOG_SERVER:514

# 적용
service syslog restart   # 또는 /etc/init.d/syslog restart
  • 보안: syslogd는 TCP/TLS 미흡. 내부망 한정 + 방화벽/ACL 필수.
    (가능하면 중간 브리지 노드에 rsyslog/syslog-ng + TLS 구성)

2) Wazuh Agentless(SSH)

  • Wazuh Manager가 RHL9에 SSH 접속 → 점검 스크립트 실행/파일 수집.
  • 보안: 키 기반 인증, from= 제한, ForceCommand로 명령 제한.

자주 쓰는 명령 스니펫

  • 패키지 요구사항/서명 확인
    rpm -qp --requires ./pkg.rpm
    rpm -K ./pkg.rpm
  • rpm DB 복구 3줄 요약
    rm -f /var/lib/rpm/__db.*
    rpm --rebuilddb -v
    rpm -qa | head
  • BDB 심화 복구
    db_dump -r /var/lib/rpm/Packages > /root/Packages.dump
    mv /var/lib/rpm/Packages /var/lib/rpm/Packages.bad
    db_load /var/lib/rpm/Packages < /root/Packages.dump
    rpm --rebuilddb -v
  • 파일 충돌 원인 파악
    rpm -Uvh ./pkg.rpm 2>&1 | tee /root/rpm-install.log
    # 충돌 경로/소유 패키지 확인
    rpm -qf /충돌/파일/경로
  • RHL9에서는 Wazuh 4.x 설치 자체가 구조적으로 불가합니다.
  • 설치 가능한 환경에서도 rpmdb 손상은 흔한 장애 원인 → 본 문서 절차로 안정 복구.
  • 보안팀 기준: 서명 검증, 강제 옵션 금지, EOL 자산 격리/대체 수집, 문서화가 핵심입니다.
728x90
그리드형(광고전용)

댓글