GNU/Linux >> Belajar Linux >  >> Linux

RPM dan GPG:Cara memverifikasi paket Linux sebelum menginstalnya

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. ]


Linux
  1. Cara membuat paket rpm

  2. Cara Menyimpan Perintah Linux Dan Menggunakannya Sesuai Permintaan

  3. Cara Memeriksa Versi Paket Linux Sebelum Menginstalnya

  1. Cara Mengaktifkan Snap di Linux Mint 20 dan Menginstal Paket Snap

  2. Cara menanyakan file, paket, dan repositori di Linux

  3. Cara Mengenkripsi dan Mendekripsi File menggunakan GnuPG di Linux

  1. Memahami jalur file dan cara menggunakannya di Linux

  2. Cara Menginstal File RPM (Paket) di CentOS Linux

  3. Cara Memeriksa vendor paket RPM yang diinstal di Linux