آموزش ساخت مخزن Third‑Party با امضای GPG

این مقاله نحوه ساخت یک مخزن Third‑Party شامل فایل‌های digest از نوع sha512 و امضای GPG را توضیح می‌دهد. همچنین مراحل تولید digest، ایجاد کلید GPG، امضای فایل‌ها، افزودن کلید به keystore، و تنظیم فایل rpm.versions برای استفاده از مخزن را بررسی می‌کند.

GPG SignaturesPackage Repositorysha512 Digest

~3 دقیقه مطالعه • بروزرسانی ۲ اسفند ۱۴۰۴

1. مقدمه


کاربرانی که قصد ساخت مخزن Third‑Party دارند باید فایل‌های sha512 digest، امضاهای GPG و فایل‌های پکیج لازم را ایجاد کنند. سیستم به این فایل‌ها برای تأیید صحت و امنیت پکیج‌ها نیاز دارد.


بیشتر وابستگی‌های نرم‌افزاری cPanel به‌صورت آرشیوهای پکیج ارائه می‌شوند و از طریق یک مخزن HTTP عمومی دانلود می‌گردند. مقدار url_templates در فایل rpm.versions محل ذخیره پکیج‌ها را مشخص می‌کند.


هر دایرکتوری پکیج شامل یک فایل sha512 است که چک‌سام تمام پکیج‌ها را در خود دارد. سیستم همچنین یک امضای GPG برای تأیید صحت digest ایجاد می‌کند.


2. ایجاد فایل‌های sha512 Digest


در هر دایرکتوری که پکیج‌ها قرار دارند باید یک فایل sha512 ایجاد کنید.


نمونه دایرکتوری:


root@httpupdate1:/home/www/thirdparty_pkg/11.92/centos/7/x86_64# ls -l
total 6876
-rw-r--r-- 1 tux tux 6191460 Aug 12 18:57 cpanel-angularjs-1.4.3-1.cp1154.noarch.rpm
-rw-r--r-- 1 tux tux 843872 Sep 11 17:33 cpanel-angularjs-1.4.4-1.cp1154.noarch.rpm

ایجاد فایل digest:


sha512sum *.rpm > sha512

نمونه خروجی digest:


01fe3fefade91693d2e03cd2f2a2cde7613e54586e994f3477658eefbe24c6ba0347129286789ad9fc8f1aa3f32859896aed16d39055031808eea057557691d2 cpanel-angularjs-1.4.3-1.cp1154.noarch.rpm
f91a02c9fd3ef6551809ebb23e726cbe460fa8c334f592f53c773cbccc1b0cede9d139386b7e60b91bf25cd640ce9ecfd948c077bac12d2d8e069ca08a257da2 cpanel-angularjs-1.4.4-1.cp1154.noarch.rpm

نکته: در سرورهای Ubuntu به‌جای .rpm از .deb استفاده کنید.


3. ایجاد کلید GPG


پس از ساخت digest باید یک جفت کلید GPG ایجاد کنید تا فایل را امضا کنید. توصیه می‌شود کلید را روی سیستمی غیرعمومی ایجاد کنید تا امنیت کلید خصوصی حفظ شود.


برای اطلاعات بیشتر به مستندات GnuPG مراجعه کنید.


4. امضای فایل sha512


برای جلوگیری از حملات rollback یا جایگزینی فایل، cPanel از یک notation خاص در امضای GPG استفاده می‌کند که شامل مسیر HTTP فایل است.


مثال:


اگر فایل digest در مسیر زیر باشد:


http://example.com/pkg_repo/11.92/centos/7/x86_64/sha512


notation باید به شکل زیر باشد:


/pkg_repo/11.92/centos/7/x86_64/sha512


دستور امضا:


gpg --output sha512.asc -u "[email protected]" --armor \
--sig-notation "[email protected]=/thirdparty_pkg/11.92/centos/7/x86_64/sha512" \
--detach-sign sha512

5. افزودن کلید به Keystore


برای اینکه سرورهای cPanel & WHM بتوانند امضاها را تأیید کنند، باید کلید عمومی را روی هر سرور اضافه کنید.


استخراج کلید عمومی:


gpg --output example_pkg_repo.pub.asc --armor --export

کلید را در یک مسیر HTTPS عمومی ذخیره کنید، مانند:


https://example.com/pkg_repo/example_pkg_repo.pub.asc


افزودن کلید به سیستم:


/scripts/updatesigningkey --vendor thirdparty --category release \
--url https://example.com/pkg_repo/example_pkg_repo.pub.asc

6. افزودن مخزن به فایل local.versions


برای استفاده از مخزن، فایل /var/cpanel/rpm.versions.d/local.versions را به‌روزرسانی کنید.


هر پکیج شامل موارد زیر است:


  • url_templates — مسیر دانلود پکیج
  • location_keys — مقادیر vendor و category

7. مخازن بدون امضای GPG


هشدار: ایجاد مخزن بدون امضای GPG توصیه نمی‌شود، زیرا امکان تأیید صحت فایل‌ها وجود ندارد.


برای غیرفعال کردن تأیید امضا:


---
file_format:
  version: 2
location_keys:
  thirdparty_rpm:
    disabled: 1
rpm_locations:
  cpanel-angularjs: thirdparty_rpm
url_templates:
  thirdparty_rpm: 'http://example.com/pkg_repo/11.92/centos/[% rpm_dist_ver %]/[% rpm_arch %]/[% package %]-[% package_version %]-[% package_revision %].noarch.rpm'

نتیجه‌گیری


ساخت مخزن Third‑Party با digestهای sha512 و امضاهای GPG امنیت و صحت پکیج‌ها را تضمین می‌کند. با تولید digest، امضای آن، افزودن کلید به keystore و تنظیم فایل rpm.versions می‌توانید مخزن اختصاصی خود را به‌صورت ایمن در cPanel & WHM استفاده کنید.


نوشته و پژوهش شده توسط دکتر شاهین صیامی