Bagaimana cara mengunduh dan gpg dengan aman memverifikasi paket sumber Debian?

13

Saya perlu paket (sumber atau biner) khusus dari Debian.

Bisakah saya mengunduh paket menggunakan apt-get?

Bagaimana saya bisa menambahkan repositori Debian ke sources.list saya sehingga hanya digunakan pada basis per kasus? Tanpa mengacaukan sistem saya dengan menggunakan seluruh repositori Debian?

Bagaimana saya bisa mendapatkan kunci gpg untuk repositori Debian untuk memastikan paket itu ditandatangani oleh arsip Debian?

(Tolong jangan katakan padaku, bahwa sistem mungkin rusak. Saya sadar akan hal itu dan tidak peduli, karena saya dapat dengan mudah mengembalikan snapshot VM.)

James Mitch
sumber
Bagian dari solusi mungkin paket debian-archive-keyring yang mencakup /usr/share/keyrings/debian-archive-keyring.gpg.
James Mitch
Bagian lain dari solusi ini mungkin Apt-Pinning: jaqque.sbih.org/kplug/apt-pinning.html
James Mitch
Jawaban saya ini membantu Anda? askubuntu.com/questions/263705/…
andol

Jawaban:

14

Ada beberapa pertanyaan yang akan saya jawab secara individual:

Bagaimana cara mengunduh (dan tidak menginstal) paket biner individual?

apt-get memiliki opsi untuk hanya mengunduh paket:

-d  Download only - do NOT install or unpack archives

Anda akan menemukan paket yang diunduh di /var/cache/apt/archives/. Dalam hal ini Anda harus menambahkan konfigurasi daftar sumber baru ke apt.

Bagaimana cara mengunduh paket sumber individual?

apt-get source <package>

atau ketika Anda mengetahui lokasi file .dsc:

dget http://http.debian.net/debian/pool/main/k/knot/knot_1.2.0~rc3-1.dsc

Kedua pendekatan itu memverifikasi tanda tangan pada file

Bagaimana cara menyematkan sources.list alias bagaimana saya tidak mengacaukan instalasi saya?

Anda telah menunjuk ke halaman deskripsi dasar untuk Pinning APT , dan saya hanya akan menambahkan bahwa Anda mungkin ingin membaca manual apt_preferences yang juga memiliki contoh bagus untuk mencapai hal-hal yang Anda butuhkan. Terutama lihat bagian 'Melacak Stabil' di CONTOH, karena ini menjelaskan sesuatu yang sangat dekat dengan kebutuhan Anda:

Ada perintah yang berguna saat bermain dengan banyak sumber dan Pinning APT:

# apt-cache policy knot
knot:
  Installed: 1.1.3-1~bpo60+1
  Candidate: 1.2.0~rc3-1~bpo60+1
  Version table:
     1.2.0~rc3-1~bpo60+1 0
        500 http://deb.knot-dns.cz/debian/ squeeze/main amd64 Packages
 *** 1.1.3-1~bpo60+1 0
        100 /var/lib/dpkg/status
     1.0.5-1~bpo60+1 0
        500 http://ppa.sury.org/debian/ squeeze/main amd64 Packages

Ini menunjukkan bahwa versi yang terinstal adalah 1.1.3-1 ~ bpo60 +1, dan kandidat adalah 1.2.0 ~ rc3-1 ~ bpo60 +1, yang akan diinstal berikutnya apt-get upgrade. Juga ada beberapa versi lama yang tersedia dari repositori lain.

Bagaimana cara mengunduh kunci arsip Debian?

Kunci arsip Debian diterbitkan di ftp-master . Anda harus mengimpor kunci ke dalam gpg keyring Anda:

$ gpg --import archive-key-6.0.asc 
gpg: key 473041FA: public key "Debian Archive Automatic Signing Key (6.0/squeeze) <[email protected]>" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   9  signed:  31  trust: 0-, 0q, 0n, 0m, 0f, 9u
gpg: depth: 1  valid:  31  signed:  38  trust: 25-, 0q, 0n, 1m, 5f, 0u
gpg: depth: 2  valid:  21  signed:  31  trust: 19-, 0q, 0n, 0m, 2f, 0u
gpg: depth: 3  valid:   3  signed:  12  trust: 2-, 0q, 0n, 0m, 1f, 0u
gpg: depth: 4  valid:   1  signed:   8  trust: 1-, 0q, 0n, 0m, 0f, 0u
gpg: next trustdb check due at 2013-09-22

Maka Anda harus memeriksa tandatangannya:

$ gpg --list-sig 473041FA
pub   4096R/473041FA 2010-08-27 [expires: 2018-03-05]
uid                  Debian Archive Automatic Signing Key (6.0/squeeze) <[email protected]>
sig 3        473041FA 2010-08-27  Debian Archive Automatic Signing Key (6.0/squeeze) <[email protected]>
sig          7E7B8AC9 2010-08-27  Joerg Jaspert <[email protected]>
sig     P    B12525C4 2010-08-27  [User ID not found]
sig          D0EC0723 2010-08-27  [User ID not found]
sig          8AEA8FEE 2010-08-27  [User ID not found]
sig          A3AE44A4 2010-08-28  [User ID not found]
sig          00D8CD16 2010-08-28  Alexander Reichle-Schmehl <[email protected]>
sig          CD15A883 2010-08-28  [User ID not found]
sig          672C8B12 2010-08-28  [User ID not found]
sig 2        C4CF8EC3 2010-08-28  [User ID not found]
sig 2        D628A5CA 2010-08-28  [User ID not found]

Dan lacak masing-masing kunci GPG ke pengembang Debian dengan melacaknya secara manual, atau memeriksa di proyek Statistik Kunci PGP . Dan kecuali ada rantai dari kunci PGP / GPG Anda ke arsip kunci Debian, Anda harus membuat lompatan keyakinan di beberapa titik waktu.

Cara mengunduh dan memverifikasi masing-masing paket dengan tangan

Jadi pendekatan lain lebih rumit, karena paket deb tidak ditandatangani secara individual, tetapi hanya Releasefile yang ditandatangani. Dengan demikian Anda perlu mengunduh dan memverifikasi tanda tangan Releasedan Packagesfile bersama dengan paket individual.

Saya akan menambahkan contoh yang akan lebih jelas.

Bayangkan Anda ingin mengunduh paket Debian untuk Knot DNS dari PPA resmi untuk Ubuntu tepatnya pada arsitektur amd64.

Anda harus mengklik direktori dan menemukan file-file ini:

wget http://ppa.launchpad.net/cz.nic-labs/knot-dns/ubuntu/dists/precise/Release
wget http://ppa.launchpad.net/cz.nic-labs/knot-dns/ubuntu/dists/precise/Release.gpg
wget http://ppa.launchpad.net/cz.nic-labs/knot-dns/ubuntu/dists/precise/main/binary-amd64/Packages
wget http://ppa.launchpad.net/cz.nic-labs/knot-dns/ubuntu/pool/main/k/knot/knot_1.2.0~rc3-1~precise+1_amd64.deb

Langkah selanjutnya adalah memverifikasi tanda tangan pada Releasefile:

$ gpg --verify Release.gpg Release
gpg: Signature made Fri 01 Mar 2013 07:14:38 PM CET using RSA key ID F9C59A45
gpg: Good signature from "Launchpad Datové schránky"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 5246 3488 670E 69A0 9200  7C24 F233 1238 F9C5 9A45

Tentu saja Anda harus memverifikasi kunci dengan beberapa cara lain (seperti kunci pengelola Debian / Ubuntu, memeriksanya dari launchpad, dll, dll ...)

Setelah memverifikasi tanda tangan yang benar pada Releasefile, Anda dapat melanjutkan ke langkah berikutnya - memverifikasi file Paket.

sha256sum Packages
c96a524398cf6e9db033c8299974fe324eba47cc8190efec6495c74e251330ad  Packages
$ grep c96a524398cf6e9db033c8299974fe324eba47cc8190efec6495c74e251330ad Release
 c96a524398cf6e9db033c8299974fe324eba47cc8190efec6495c74e251330ad             3379 main/binary-amd64/Packages

Seperti yang Anda lihat, tanda tangannya dapat ditemukan dalam Releasefile yang ditandatangani , sehingga kami telah memverifikasi integritas Packagesfile dengan menghitung dan membandingkan sidik jari SHA-256-nya.

Langkah terakhir serupa. Anda perlu menghitung dan membandingkan sidik jari dari paket individual:

$ sha1sum knot_1.2.0~rc3-1~precise+1_amd64.deb 
8b34078e9bfef7aa818b2f926a28838b0ede9f43  knot_1.2.0~rc3-1~precise+1_amd64.deb
$ grep -A 13 "Package: knot$" Packages | grep "^SHA1: "
SHA1: 8b34078e9bfef7aa818b2f926a28838b0ede9f43

Pada titik ini kami telah merantai paket dengan aman ke Releasefile yang ditandatangani . Jadi, jika Anda yakin tanda tangan pada Releasefile, Anda dapat yakin bahwa paket itu diunduh utuh.

Anda dapat membaca lebih lanjut di artikel Secure APT di Debian Wiki.

oerdnj
sumber
Bisakah Anda jelaskan mengapa gpgperintah itu tidak memerlukan root privilege? Itu seharusnya menjadi alat administrasi.
Sopalajo de Arrierez
1
@SopalajodeArrierez Ini bukan alat administratif; Anda dapat membaca lebih lanjut tentang GnuPG di sini: gnupg.org
oerdnj