TT Lab
はじめる
学ぶ 学習パス コース

RHEL系の管理

rpmの照会と検証

TT Labで続きを見る

一言でいうと

rpmはインストールツールである前に、照会ツールです。そしてrpm -Vは、システムに何があったかを教えてくれる、強力な監査ツールです。

なぜ必要なのか

障害や侵害の疑いがある状況では、「パッケージがインストールされている」ことよりも、インストールされたファイルがもとのパッケージと同じかが重要です。ファイルの所有パッケージ、インストールスクリプト、設定ファイルの一覧とダイジェストの差を、rpmデータベースから直接照会すれば、やみくもに再インストールする前に、変更の範囲を絞り込めます。ただし、rpmデータベースまで信頼できないインシデントなら、別の信頼できるマニフェストとも比較する必要があります。

どう動くのか

照会(-q)

rpm -qa                          # 설치된 전부
rpm -qa | wc -l
rpm -qi httpd                    # 상세 정보
rpm -ql httpd                    # 설치한 파일 목록
rpm -qc httpd                    # 설정 파일만
rpm -qd httpd                    # 문서 파일만
rpm -qf /usr/sbin/httpd          # 이 파일의 주인
rpm -q --changelog httpd | head
rpm -q --scripts httpd           # 설치 스크립트(%pre/%post 등)
rpm -q --requires httpd
rpm -q --provides httpd

ファイルの前に-pを付けると、インストールされていない.rpmファイルを照会します。

rpm -qpi ./labhub-tool-1.0-1.noarch.rpm
rpm -qpl ./labhub-tool-1.0-1.noarch.rpm
rpm -qp --qf '%{NAME} %{VERSION} %{RELEASE} %{ARCH}\n' ./x.rpm

--qf(queryformat)で必要なフィールドだけを取り出すのが、自動化の核心です。epochの処理には、三項表記が必要です。

rpm -qp --qf '%{NAME}\t%|EPOCH?{%{EPOCH}}:{0}|\t%{VERSION}\t%{RELEASE}\t%{ARCH}\n' ./x.rpm

epochがないパッケージは、フィールドが(none)と出力されるので、この表記で0を補います。ファイル名にはepochが入らないので、マニフェストには必ずこの値を書く必要があります。

検証(-V)

rpm -V httpd
rpm -Va | head                   # 전체 검증 (느리다)

出力はSM5DLUGTP c /etc/httpd/conf/httpd.confのような形式です。

文字 意味
S ファイルサイズが異なる
M モード(権限/タイプ)が異なる
5 ファイル内容のダイジェストが異なる(歴史的にMD5の表示に由来)
D デバイス番号が異なる
L シンボリックリンクの参照先が異なる
U / G 所有者/グループが異なる
T mtimeが異なる
P capabilitiesが異なる
c(2列目) 設定ファイルの印

設定ファイル(c)が変わっているのは正常です。管理者が変更したはずだからです。しかし、バイナリが変わっていたら調査する必要があります。侵害事故であるか、誰かが手で上書きしたという意味です。

署名の検証

rpm --checksig ./x.rpm
rpmkeys --checksig ./x.rpm       # 권장 표기
rpmkeys --import /etc/pki/rpm-gpg/RPM-GPG-KEY-...
rpmkeys --list

digests signatures OKと出力されれば正常です。鍵を登録していない状態では、ダイジェストだけが通り、署名は確認不能のまま残りますが、それを「合格」と誤読しやすいです。検査の前にrpmkeys --listで鍵が登録されているか確認することが、習慣になっている必要があります。

パッケージの作成

~/rpmbuild/
  SPECS/     labhub-tool.spec
  SOURCES/   labhub-tool-1.0.tar.gz
  BUILD/     (빌드 중간 산출물)
  BUILDROOT/ (가상의 설치 루트)
  RPMS/      (완성된 바이너리 rpm)
  SRPMS/     (소스 rpm)

specファイルの骨格です。

Name:      labhub-tool
Version:   1.0
Release:   1%{?dist}
Summary:   예제 도구
License:   MIT
Source0:   %{name}-%{version}.tar.gz
BuildArch: noarch
Requires:  coreutils

%description
...

%prep
%setup -q

%build
make

%install
make install DESTDIR=%{buildroot} PREFIX=/usr

%files
/usr/bin/labhub-tool

%changelog
* Sat Aug 15 2026 LabHub <lab@labhub.local> - 1.0-1
- 최초 패키징

%filesに書かれていないファイルがbuildrootにあると、ビルドが失敗します。「Installed (but unpackaged) files found」が、そのメッセージです。逆に、%filesに書いたのに実際にない場合も失敗します。この厳格さが、パッケージの内容を正確に保ってくれます。

rpmbuild -ba ~/rpmbuild/SPECS/labhub-tool.spec     # 바이너리 + 소스 rpm
rpmbuild -bb ...                                    # 바이너리만
rpm2cpio x.rpm | cpio -idmv                         # 설치 없이 내용 풀기

現場での姿

rpm -Vaで侵害の痕跡を探す。システムの様子がおかしいときは、このコマンドで改ざんされたバイナリを探します。ただし、rpmデータベース自体が改ざんされている可能性があるので、信頼できるコピーと比較して初めて確実になります。

次のラボですること

rpmで照会・検証し、specファイルで自分でパッケージをビルドして、インストールまで行います。