Repositori RPM besar dan populer biasanya direplikasi di seluruh dunia. Proyek dan perusahaan yang menyediakan paket menggunakan jaringan distribusi konten (CDN) dan situs cermin untuk membuat paket mereka tersedia bagi konsumen. Untuk banyak proyek sumber terbuka, itu termasuk hosting oleh sukarelawan. Untuk mendeteksi dan menghindari paket pengganti yang berbahaya, pemilik paket dapat menandatangani file paket, dan konsumen dapat memverifikasi tanda tangan tersebut.
Meskipun GPG dapat menandatangani file apa pun, memeriksa tanda tangan paket secara manual tidak dapat diskalakan untuk administrator sistem. Format RPM memiliki area khusus yang disediakan untuk menyimpan tanda tangan header dan payload. rpm
utilitas menggunakan kunci GPG untuk menandatangani paket dan koleksi sendiri dari kunci publik yang diimpor untuk memverifikasi paket. YUM dan DNF menggunakan file konfigurasi repositori untuk memberikan pointer ke lokasi kunci publik GPG dan membantu mengimpor kunci sehingga RPM dapat memverifikasi paket.
Untuk artikel ini, saya akan menggunakan kunci dan paket dari EPEL. Kunci publik disertakan dalam paket RPM, yang juga mengonfigurasi yum repo
. Untuk beberapa proyek, kuncinya mungkin juga tersedia langsung dari situs web sumber.
Utilitas rpm memiliki manajemen kuncinya sendiri
Sejak rpm
utilitas memiliki manajemen kuncinya sendiri, tidak perlu mengimpor kunci publik GPG ke gantungan kunci GPG pribadi Anda. Faktanya, Anda tidak bisa hanya memverifikasi file dengan gpg
perintah karena tanda tangan bukan dari seluruh file .rpm. Sebaliknya, tanda tangan hanya dikaitkan dengan bagian penting dari paket.
Jalankan perintah berikut untuk menggunakan rpm
untuk memverifikasi paket:
$ rpm -K epel-release-latest-8.noarch.rpm
epel-release-latest-8.noarch.rpm: digests SIGNATURES NOT OK
Dalam hal ini, pesan "TANDA TANGAN TIDAK OK" muncul karena kunci belum diimpor untuk RPM. Perilaku default rpm
perintah adalah untuk memverifikasi tanda tangan paket selama instalasi atau memverifikasi interaksi. Jika tidak memungkinkan, karena paket tidak ditandatangani atau kunci publik tidak tersedia, Anda mungkin perlu menentukan --nogpgcheck
pilihan untuk melewati langkah ini.
Jika Anda memiliki akses ke kunci publik GPG, Anda dapat menggunakan perintah berikut untuk mengimpor kunci secara manual:
$ rpm --import RPM-GPG-KEY-EPEL-8
Karena metadata untuk kunci disimpan dalam database RPM, Anda dapat melakukan kueri dan menghapus kunci sama seperti paket apa pun.
Gunakan perintah berikut untuk membuat daftar kunci:
$ rpm -qa gpg-pubkey*
gpg-pubkey-7fac5991-4615767f
gpg-pubkey-2f86d6a1-5cf7cefb
Gunakan perintah ini untuk mendapatkan informasi tentang kunci:
$ rpm -qi gpg-pubkey-2f86d6a1-5cf7cefb
Name : gpg-pubkey
Version : 2f86d6a1
Release : 5cf7cefb
Architecture: (none)
Install Date: Mon 01 Jun 2020 12:14:38 PM EDT
Group : Public Keys
Size : 0
License : pubkey
Signature : (none)
Source RPM : (none)
Build Date : Wed 05 Jun 2019 10:17:31 AM EDT
Build Host : localhost
Relocations : (not relocatable)
Packager : Fedora EPEL (8) <[email protected]>
Summary : gpg(Fedora EPEL (8) <[email protected]>)
Description :
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: rpm-4.14.2 (NSS-3)
...omitted...
Perintah berikut digunakan untuk menghapus kunci:
$ sudo rpm -e gpg-pubkey-2f86d6a1-5cf7cefb
Opsi lainnya untuk manajemen kunci dijelaskan di halaman manual yang disertakan dengan rpmkey
paket.
YUM dan DNF dapat menambahkan kunci ke database RPM
Manajer paket lain membuat manajemen kunci lebih mudah. YUM dan DNF menggunakan file konfigurasi di /etc/yum.repos.d
untuk menentukan URL untuk kunci GPG yang digunakan untuk memverifikasi paket di repositori tersebut. Utilitas kemudian dapat mengimpor kunci jika belum tersedia untuk verifikasi.
Di yum repo
file konfigurasi, baris gpgcheck=1 menunjukkan bahwa pemeriksaan GPG harus dilakukan untuk semua paket dalam repositori ini. Ini adalah nilai Boolean yang dapat diubah dalam konfigurasi atau diganti sementara pada baris perintah dengan --nogpgcheck
pilihan.
Jika kunci publik GPG belum diimpor ke RPM saat instalasi paket dimulai, maka yum
(atau dnf
) utilitas dapat memulai impor kunci. gpgkey=URI baris menentukan sumber kunci yang akan diimpor. Sumber ini dapat berupa URI apa pun, termasuk file lokal atau tautan web jarak jauh. yum
atau dnf
utilitas akan berhenti sejenak dan meminta konfirmasi untuk mengimpor kunci setelah menunjukkan ID kunci dan sidik jari.
warning: /var/cache/dnf/epel-fafd94c310c51e1e/packages/zsh-syntax-highlighting-0.7.1-1.el8.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID 2f86d6a1: NOKEY
Extra Packages for Enterprise Linux 8 - x86_64 1.6 MB/s | 1.6 kB 00:00
Importing GPG key 0x2F86D6A1:
Userid : "Fedora EPEL (8) <[email protected]>"
Fingerprint: 94E2 79EB 8D8F 25B2 1810 ADF1 21EA 45AB 2F86 D6A1
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
Is this ok [y/N]: y
Kunci ditambahkan ke RPM, lalu verifikasi dan pemasangan paket dilanjutkan.
Bersiaplah untuk menandatangani sebuah paket
Jika Anda membuat dan mendistribusikan file paket RPM Anda sendiri, Anda dapat menandatangani paket tersebut dengan rpmsign
utilitas.
Langkah pertama adalah membuat keypair GPG untuk penandatanganan. Pastikan juga mengekspor dan membagikan kunci publik. Untuk paket yang akan didistribusikan secara publik, ada baiknya menggunakan keypair dan keyring baru di lokasi bersama. Selain itu, gunakan --full-gen-key
opsi dan kemudian pilih untuk membuat kunci hanya-penandatanganan alih-alih default, yang membuat kunci penandatanganan dan enkripsi.
$ gpg --keyring /shared/rpm/.gpg --no-default-keyring --full-gen-key
Meskipun hanya satu orang yang menggunakan kunci untuk menandatangani paket, buatlah pasangan kunci terpisah untuk digunakan untuk penandatanganan. Jangan gunakan kunci yang sama untuk tugas sehari-hari lainnya seperti enkripsi email pribadi.
Selanjutnya, kita perlu menginstal rpm-sign
paket dan atur rpmmacros
file yang menentukan kunci yang akan digunakan. rpm-sign
paket termasuk halaman manual untuk rpmsign
yang menggambarkan proses. Perhatikan bahwa nama paket memiliki tanda hubung yang bukan merupakan bagian dari nama perintah.
$ sudo yum install rpm-sign
$ man rpmsign
Perintah RPM mendapatkan konfigurasinya dari beberapa rpmmacros
file. Ada file default dengan banyak sampel yang terletak di /usr/lib/rpm/macros
. Jika beberapa orang bertanggung jawab untuk menandatangani paket menggunakan kunci yang sama, tempatkan file konfigurasi pusat di /etc/rpm/macros
lokasi. Terakhir, untuk orang tertentu yang menandatangani paket, ~/.rpmmacros
. pengguna file dapat dikonfigurasi untuk menunjuk ke kunci GPG yang benar.
Entri minimum untuk rpmmacros
file adalah untuk menentukan nama kunci. Anda dapat menggunakan nama atau ID kunci. Dapatkan ID kunci dengan gpg --list-keys
perintah.
Tip:Jalankan rpmsign
perintah sebelum menyetel gpg_name variabel dan pesan akan menampilkan formatnya.
$ rpmsign --addsign my-custom-package.rpm
You must set "%_gpg_name" in your macro file
Selain nama kunci, jika gantungan kunci berada di mana pun selain pengguna default ~/.gnupg
direktori, gunakan gpg_path variabel untuk mengatur lokasi. Nilai ini akan sama dengan yang digunakan dengan --keyring
pilihan saat kunci dibuat.
Ada opsi tambahan yang tersedia jika biner GPG atau sintaks perintah memerlukan sesuatu di luar standar yang diharapkan.
Tanda tangani dan publikasikan paket
Anda sekarang siap untuk menandatangani paket atau paket. Menurut rpmsign
halaman manual, --addsign
dan --resign
perintah dapat dipertukarkan. Keduanya akan menggantikan bagian tanda tangan dari file paket RPM dengan informasi terkini.
Perintah berikut adalah contoh penggunaan --addsign
bendera:
$ rpmsign --addsign myprod-2.x86_64.rpm myprod-libs-2.x86_64.rpm
rpmbuild
versi lama termasuk --sign
opsi yang dapat menandatangani paket selama proses pembuatan jika kunci GPG dan rpmmacro
file dikonfigurasi dengan benar. --sign
opsi sekarang tidak digunakan lagi demi langkah terpisah menggunakan rpmsign
. Pendekatan ini mendorong membangun, menguji, menandatangani, menerbitkan alur kerja.
Terakhir, buat paket dan kunci publik GPG tersedia untuk klien. Salah satu opsi adalah meniru proyek EPEL dan membuat file RPM yang menyertakan kunci publik GPG dan satu atau lebih yum repo
file yang menunjuk ke lokasi paket yang ditandatangani. Untuk organisasi yang menghosting paket di Server Satelit Red Hat, mulailah dengan mengunggah kunci publik GPG, lalu tetapkan kunci itu ke produk atau repositori yang menyimpan paket yang ditandatangani. Semua paket dalam repositori harus ditandatangani dengan kunci yang sama. Ini adalah alasan umum bagi administrator Satelit untuk mengundurkan diri dari paket sebelum mengunggah.
Selesai
Sekarang setelah Anda mengetahui lebih banyak tentang mengelola paket RPM dengan GPG, Anda dapat lebih memahami cara bekerja dengan rpm
, yum
, dan dnf
.
Untuk bacaan lebih lanjut, lihat Mengamankan kunci penandatanganan RPM dan panduan Administrasi dan Manajemen Konten dalam dokumentasi Red Hat Satellite.
[ Ingin mempelajari lebih lanjut tentang keamanan? Lihat daftar periksa keamanan dan kepatuhan TI. ]