การใช้ GPG Public Key ตรวจสอบไฟล์ rpm

ก่อนที่จะติดตั้งไฟล์ rpm ที่ได้มา ไม่ว่าจากแผ่นดีวีดีติดตั้งของ distribution ต่างๆ หรือดาวน์โหลดมาจากอินเตอร์เน็ต แนะนำให้อิมพอร์ต Public Key ของไฟล์ rpm ลงในเครื่องที่จะติดตั้งก่อน เพื่อใช้ตรวจสอบความถูกต้องของไฟล์ rpm ว่าไฟล์ที่ใช้ในการติดตั้งเป็นไฟล์ที่มาจากผู้พัฒนาหรือสร้างไฟล์ rpm จริงๆ ไม่ได้ถูกเปลี่ยนแปลงใดๆ

การอิมพอร์ต Public Key

ไฟล์ Public Key ที่จะอิมพอร์ตนั้น แนะนำให้ดาวน์โหลดจากแหล่งที่น่าเชื่อถือได้ เช่น mirror site ที่เป็นทางการต่างๆ ซึ่งสามารถตรวจสอบได้จากเว็บไซต์ผู้ผลิต หรือถ้าเราดาวน์โหลดไฟล์ rpm จาก mirror site ที่นึง แนะนำให้โหลดไฟล์ Public Key จากเว็บอีกทีหนึ่ง ในบทความนี้จะทดสอบกับไฟล์ rpm ที่มีอยู่ในแผ่นดีวีดีติดตั้ง Fedora 10 แต่จะโหลดไฟล์ Public Key จาก http://mirrors.kernel.org/ โดยส่วนใหญ่แล้วไฟล์ rpm ที่อยู่ในแผ่นติดตั้ง จะใช้ไฟล์ Public Key เดียวกันในการตรวจสอบ เพราะฉะนั้น ถ้าเราอิมพอร์ตคีย์ครั้งหนึ่งลงไปแล้ว เราก็สามารถใช้ตรวจสอบไฟล์อื่นๆ ที่อยู่ในแผ่นติดตั้งได้ โดยไม่ต้องอิมพอร์ตซ้ำ

ตัวอย่างการตรวจสอบไฟล์ rpm ก่อนการอิมพอร์ต Public Key

[root@fc10 ~]# mount /dev/dvd /media/
mount: block device /dev/sr0 is write-protected, mounting read-only
[root@fc10 ~]# cd /media/Packages/
[root@fc10 Packages]# rpm --checksig samba-client-3.2.4-0.22.fc10.i386.rpm
samba-client-3.2.4-0.22.fc10.i386.rpm: (SHA1) DSA sha1 md5 (GPG) NOT OK (MISSING KEYS:GPG#4ebfc273)

ออปชั่น ‘–checksig’ หรือ ‘-K’ ใช้เพื่อการตรวจสอบความถูกต้องเช่น digest, signature ของไฟล์ rpm ด้วยเทคนิคต่างๆ ผลลัพธ์จะแสดงค่าหลายอย่าง ในที่นี้จะเห็นว่ามีคำว่า (GPG) NOT OK (MISSING KEYS:…) ฟ้องขึ้นมา แสดงว่าการตรวจสอบ Public Key ของไฟล์ไม่ถูกต้อง ซึ่งอาจเป็นเพราะว่าไฟล์ที่ดาวน์โหลดนั้นถูกเปลี่ยนแปลงไปจริงๆ โหลดมาไม่สมบูรณ์ หรืออีกเหตุผลนึงในที่นี้คือ ไม่มี Public Key ของไฟล์นั้น

สำหรับ Fedora 10 (i386) สามารถดาวน์โหลด Public Key ได้จาก http://mirrors.kernel.org/fedora/releases/10/Fedora/i386/os/RPM-GPG-KEY-fedora-10-primary

หมายเหตุ ในแต่ละเวอร์ชั่น จะใช้ Public Key ไม่เหมือนกัน

ตัวอย่างไฟล์ Public Key ของ Fedora 10 (i386) (ผลลัพธ์ถูกตัดออกไปบางส่วน)
 
[root@fc10 ~]# cat RPM-GPG-KEY-fedora-10-primary
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.9 (GNU/Linux)
mQGiBEi12/MRBADL6fpbRejYViiVzY/Y0T6pmgChOykrsq1oc9mX9+ss1lZZit1z
DRrgvOYG67wnRQaskXnKulw3XoNEAT/OjCNzDwrS3gMbHaz+T9wQN5WeO52ihozp
...
gX4TCgPMjjjT0hmTfDpliEkEGBECAAkFAki12/MCGwwACgkQvyJvzE6/wnM+4wCe
KkKsIfsmCT0MpuYxHh4vRS/ix58AoLfjES8VpN+3ku9hC3QT97Fa/bK4
=s6iX
-----END PGP PUBLIC KEY BLOCK-----

ใช้คำสั่ง rpm ด้วยออปชั่น ‘–import’ เพื่ออิมพอร์ตไฟล์ Public Key เข้าไปในเครื่อง

[root@fc10 ~]# rpm --import RPM-GPG-KEY-fedora-10-primary

ตรวจสอบไฟล์ rpm ที่อยู่ในแผ่นติดตั้งอีกครั้ง

[root@fc10 ~]# cd /media/Packages/
[root@fc10 Packages]# rpm --checksig samba-client-3.2.4-0.22.fc10.i386.rpm
samba-client-3.2.4-0.22.fc10.i386.rpm: (sha1) dsa sha1 md5 gpg OK

หลังจากที่อิมพอร์ตคีย์เข้าไปแล้ว ผลลัพธ์การตรวจสอบ gpg จะแสดงผลว่าถูกต้อง

ตรวจสอบ Public Key ที่อิมพอร์ตเข้าเครื่องแล้ว

เราสามารถใช้คำสั่ง rpm ด้วยออปชั่น ‘-q’ เพื่อตรวจสอบ Public Key ที่ถูกอิมพอร์ตเข้าเครื่องแล้ว ดังตัวอย่าง

ตัวอย่างการตรวจสอบ Public Key ที่อิมพอร์ต

[root@fc10 ~]# rpm -qa gpg-pubkey*
gpg-pubkey-4ebfc273-48b5dbf3
[root@fc10 ~]# rpm -qil gpg-pubkey-4ebfc273-48b5dbf3
Name        : gpg-pubkey                   Relocations: (not relocatable)
Version     : 4ebfc273                          Vendor: (none)
Release     : 48b5dbf3                      Build Date: Sat 27 Dec 2008 11:27:03 PM ICT
Install Date: Sat 27 Dec 2008 11:27:03 PM ICT      Build Host: localhost
Group       : Public Keys                   Source RPM: (none)
Size        : 0                                License: pubkey
Signature   : (none)
Summary     : gpg(Fedora (10) <fedora@fedoraproject.org>)
Description :
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: rpm-4.6.0-rc1 (NSS-3)
mQGiBEi12/MRBADL6fpbRejYViiVzY/Y0T6pmgChOykrsq1oc9mX9+ss1lZZit1z
DRrgvOYG67wnRQaskXnKulw3XoNEAT/OjCNzDwrS3gMbHaz+T9wQN5WeO52ihozp
...
gX4TCgPMjjjT0hmTfDpliEkEGBECAAkFAki12/MCGwwACgkQvyJvzE6/wnM+4wCe
KkKsIfsmCT0MpuYxHh4vRS/ix58AoLfjES8VpN+3ku9hC3QT97Fa/bK4
=s6iX
-----END PGP PUBLIC KEY BLOCK-----
(contains no files)

ถอด Public Key ออกจากเครื่อง

ถ้าเราต้องการถอด Public Key ออกจากเครื่อง (uninstall) สามารถใช้คำสั่ง rpm ด้วยออปชั่น ‘-e’ ได้ดังนี้

ตัวอย่างการถอด Public Key และผลลัพธ์ที่เกิดขึ้น

[root@fc10 ~]# rpm -ev gpg-pubkey
[root@fc10 ~]# rpm -qa gpg-pubkey*
[root@fc10 ~]# cd /media/Packages/
[root@fc10 Packages]# rpm --checksig samba-client-3.2.4-0.22.fc10.i386.rpm
samba-client-3.2.4-0.22.fc10.i386.rpm: (SHA1) DSA sha1 md5 (GPG) NOT OK (MISSING KEYS:GPG#4ebfc273)

ข้อมูลอ้างอิง

  • Manual Page – rpm(8)

Leave a Reply