المقدمة
apt-key
هو أداة تُستخدم لإدارة المفاتيح التي يستخدمها APT لمصادقة الحزم. إنها مرتبطة بشكل وثيق بأداة add-apt-repository
، التي تقوم بإضافة مستودعات خارجية باستخدام خوادم المفاتيح إلى قائمة مصادر APT الموثوق بها. ومع ذلك، تعتبر المفاتيح التي تمت إضافتها باستخدام apt-key
و add-apt-repository
موثوقة على مستوى عالمي من قبل apt
. هذه المفاتيح ليست مقيدة بترخيص المستودع الوحيد الذي كانت مخصصة له. يمكن استخدام أي مفتاح تمت إضافته بهذه الطريقة لترخيص إضافة أي مستودع خارجي آخر، مما يشكل مصدر قلق أمان هام.
ابتداءً من Ubuntu 20.10، يظهر تحذير عند استخدام apt-key
يفيد بأن الأداة ستتم إهمالها في المستقبل القريب؛ بالمثل، سيتم إهمال add-apt-repository
قريبًا أيضًا. بينما لا تمنع تحذيرات الإهمال هذه بشكل صارم استخدام apt-key
و add-apt-repository
مع Ubuntu 22.04، إلا أنه غير مستحسن تجاهلها.
أفضل الممارسات الحالية هي استخدام gpg
بدلاً من apt-key
و add-apt-repository
، وفي الإصدارات المستقبلية من أوبونتو سيكون هذا الخيار الوحيد. apt-key
و add-apt-repository
دائمًا ما كانتا تعملان كأغلفة، تستدعيان gpg
في الخلفية. باستخدام gpg
مباشرةً، يتم الاستغناء عن الوسيط. لهذا السبب، تعتبر طريقة gpg
متوافقة مع الإصدارات القديمة من أوبونتو ويمكن استخدامها كبديل فوري لـ apt-key
.
هذا البرنامج التعليمي سيوضح إجراءين يستخدمان بدائل لـ apt-key
و add-apt-repository
على التوالي. الأول سيكون إضافة مستودع خارجي باستخدام مفتاح عام مع gpg
بدلاً من استخدام apt-key
. الثاني، كملحق، سيغطي هذا البرنامج التعليمي إضافة مستودع خارجي باستخدام خادم مفاتيح مع gpg
كبديل لاستخدام add-apt-repository
.
المتطلبات المسبقة
لإكمال هذا البرنامج التعليمي، ستحتاج إلى خادم أوبونتو 22.04. تأكد من إعداد هذا وفقًا لدليلنا إعداد الخادم الأولي لأوبونتو 22.04، مع وجود مستخدم غير root بامتيازات sudo
وتمكين جدار حماية.
الخطوة 1 — تحديد المكونات والتنسيق الأساسي
PGP، أو الخصوصية جيدة جدًا، هو برنامج تشفير مملوك يستخدم لتوقيع وتشفير وفك تشفير الملفات والدلائل. تعتبر ملفات PGP ملفات مفتاح عامة، والتي تُستخدم في هذه العملية للتحقق من صحة المستودعات كمصادر صالحة ضمن apt
. أما GPG، أو حارس الخصوصية جنو، فهو بديل مفتوح المصدر لـ PGP. وتعتبر ملفات GPG عادةً حلقات المفاتيح، وهي ملفات تحمل مفاتيح متعددة. وتُستخدم كل من هذين النوعين من الملفات بشكل شائع لتوقيع وتشفير الملفات.
gpg
هو أداة سطر أوامر GPG التي يمكن استخدامها لتفويض المستودعات الخارجية للاستخدام مع apt
. ومع ذلك، يقبل gpg
فقط ملفات GPG. ومن أجل استخدام هذه الأداة سطر الأوامر مع ملفات PGP، يجب تحويلها.
تقدم Elasticsearch سيناريو شائع لتحويل المفاتيح، وسيُستخدم كمثال لهذا القسم. ستقوم بتنزيل مفتاح مهيأ لـ PGP وتحويله إلى تنسيق متوافق مع apt
بامتداد ملف .gpg
. ستفعل ذلك عن طريق تشغيل أمر gpg
مع العلم --dearmor
. بعد ذلك، ستضيف رابط المستودع إلى قائمة مصادر الحزم، مع إرفاق إشارة مباشرة إلى المفتاح الخاص بك المحول. وأخيرًا، ستتحقق من هذه العملية عن طريق تثبيت حزمة Elasticsearch.
المشاريع التي تتطلب إضافة مستودعات مع التحقق من المفتاح ستوفر لك دائمًا مفتاحًا عامًا وعنوان URI للمستودع الذي يمثل موقعه بالضبط. بالنسبة لمثالنا على Elasticsearch، تقدم الوثائق هذه المكونات على صفحة التثبيت الخاصة بها.
وهذه هي المكونات المعطاة لـ Elasticsearch:
- المفتاح:
https://artifacts.elastic.co/GPG-KEY-elasticsearch
- المستودع:
https://artifacts.elastic.co/packages/7.x/apt stable main
بعد ذلك، يتعين عليك تحديد ما إذا كنت قد تلقيت ملف PGP أو GPG للعمل معه. يمكنك فحص ملف المفتاح عن طريق فتح عنوان URL باستخدام curl
:
- curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch
سيقوم هذا بطباعة محتويات ملف المفتاح، الذي يبدأ بالتالي:
Output-----BEGIN PGP PUBLIC KEY BLOCK-----
. . .
على الرغم من وجود GPG
في عنوان URL، إلا أن السطر الأول يشير إلى أن هذا في الواقع ملف مفتاح PGP. خذ هذا في الاعتبار، لأن apt
يقبل فقط تنسيق GPG. في الأصل، كان apt-key
يكتشف ملفات PGP ويحولها تلقائيًا إلى GPG بواسطة استدعاء gpg
في الخلفية. سيغطي الخطوة 2 كل من التحويل اليدوي من PGP إلى GPG، وأيضًا ما يجب فعله عندما لا يكون التحويل مطلوبًا.
الخطوة 2 — تحميل المفتاح وتحويله إلى نوع ملف apt
متوافق
باستخدام طريقة gpg
، يجب عليك دائمًا تنزيل المفتاح قبل إضافته إلى قائمة مصادر الحزم. في السابق مع apt-key
، لم يتم فرض هذا الترتيب دائمًا. الآن، يتعين عليك الرجوع إلى مسار المفتاح المحمل في قائمة المصادر الخاصة بك. إذا لم تكن قد قمت بتنزيل المفتاح، فمن الواضح أنك لا تستطيع الرجوع إلى مسار موجود.
مع Elasticsearch، تعمل مع ملف PGP، لذلك ستقوم بتحويله إلى تنسيق ملف GPG بعد التنزيل. يستخدم المثال التالي curl
لتحميل المفتاح، حيث يتم توجيه التنزيل إلى أمر gpg
. يتم استدعاء gpg
باستخدام العلامة --dearmor
لتحويل مفتاح PGP إلى تنسيق ملف GPG، ويتم استخدام -o
للإشارة إلى مخرج الملف.
في أوبونتو، يعتبر الدليل /usr/share/keyrings
هو الموقع الموصى به لملفات GPG المحولة الخاصة بك، حيث يعد الموقع الافتراضي الذي تخزن فيه أوبونتو ملفات مفاتيحها. يكون اسم الملف elastic-7.x.gpg
في هذا المثال، ولكن أي اسم يعمل:
- curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic-7.x.gpg
يقوم هذا بتحويل ملف PGP إلى تنسيق GPG الصحيح، مما يجعله جاهزًا ليتم إضافته إلى قائمة المصادر لـ apt
.
ملاحظة: إذا كان الملف المحمل بالفعل بتنسيق GPG، يمكنك بدلاً من ذلك تنزيل الملف مباشرة إلى /usr/share/keyrings
دون تحويله باستخدام أمر مثل المثال التالي:
- curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo tee /usr/share/keyrings/elastic-7.x.gpg
في هذه الحالة، سيتم توجيه إخراج أمر curl
إلى tee
لحفظ الملف في المكان الصحيح.
الخطوة 3 — إضافة المستودع إلى قائمة مصادر الحزم الخاصة بك
بعد تنزيل المفتاح وتنسيقه بشكل صحيح كملف GPG، يمكنك إضافة المستودع إلى مصادر الحزم apt
مع ربطه بشكل صريح بالمفتاح الذي حصلت عليه. هناك ثلاث طرق لتحقيق هذا، جميعها متعلقة بكيفية apt
يجد المصادر. يستخرج apt
المصادر من ملف sources.list
المركزي، ملفات .list
في دليل sources.list.d
، وملفات .source
في دليل sources.list.d
. على الرغم من عدم وجود فارق وظيفي بين الخيارات الثلاث، يُوصى بالنظر في الخيارات الثلاث واختيار الطريقة التي تناسب احتياجاتك أفضل.
الخيار 1 — إضافة مباشرة إلى sources.list
الطريقة الأولى تتضمن إدراج سطر يمثل المصدر مباشرة في /etc/apt/sources.list
، الملف الرئيسي الذي يحتوي على مصادر apt
. هناك مصادر متعددة في هذا الملف، بما في ذلك المصادر الافتراضية التي تأتي مع أوبونتو. من المقبول تمامًا تحرير هذا الملف مباشرة، على الرغم من أن الخيار 2 والخيار 3 سيقدمان حلاً أكثر تجانسًا يمكن تحريره وصيانته بشكل أسهل.
افتح /etc/apt/sources.list
باستخدام nano
أو محرر النص الذي تفضله:
- sudo nano /etc/apt/sources.list
ثم أضف المستودع الخارجي في نهاية الملف:
. . .
deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/elastic-7.x.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main
يحتوي هذا السطر على المعلومات التالية حول المصدر:
deb
: يحدد أن المصدر يستخدم هندسة Debian العادية.arch=amd64,arm64
: يحدد الهندسات التي سيتم تنزيل بيانات APT إليها. هنا يكونamd64
وarm64
.signed-by=/usr/share/keyrings/elastic-7.x.gpg
: يحدد المفتاح المستخدم لتخويل هذا المصدر، وهنا يشير إلى ملف.gpg
الخاص بك المخزن في/usr/share/keyrings
. يجب تضمين هذا الجزء من السطر، في حين أنه لم يكن مطلوبًا في وقت سابق في طريقةapt-key
. هذه الإضافة هي التغيير الأكثر حيوية في التحول بعيدًا عنapt-key
، حيث تربط المفتاح بمستودع فردي يُسمح له بالتخويل وتصحيح الثغرة الأمنية الأصلية فيapt-key
.https://artifacts.elastic.co/packages/7.x/apt stable main
: هذا هو عنوان URI الذي يُمثل الموقع الدقيق الذي يمكن العثور فيه على البيانات داخل المستودع./etc/apt/sources.list.d/elastic-7.x.list
: هذا هو المكان واسم الملف الجديد الذي سيتم إنشاؤه./dev/null
: يُستخدم هذا عندما لا يكون إخراج الأمر ضروريًا. يتم تجاهل إخراج الأمر عند توجيهtee
إلى هذا الموقع.
احفظ واخرج عن طريق الضغط على CTRL+O
ثم CTRL+X
.
الخيار 2 — إنشاء ملف .list
جديد في sources.list.d
مع هذا الخيار ، ستقوم بإنشاء ملف جديد في دليل sources.list.d
. يقوم apt
بتحليل هذا الدليل و sources.list
لإضافة المستودعات. تتيح لك هذه الطريقة عزل إضافات المستودع بشكل فيزيائي داخل ملفات منفصلة. إذا كنت بحاجة في وقت لاحق إلى إزالة هذا الإضافة أو إجراء تعديلات ، يمكنك حذف هذا الملف بدلاً من تحرير ملف sources.list
المركزي. يجعل الاحتفاظ بالإضافات بشكل منفصل أمرًا أسهل في الصيانة ، ويمكن أن يكون تحرير sources.list
أكثر عرضة للأخطاء بطريقة تؤثر على مستودعات أخرى في الملف.
للقيام بذلك ، قم بتوجيه أمر echo
إلى أمر tee
لإنشاء هذا الملف الجديد وإدراج السطر المناسب. يتم تسمية الملف elastic-7.x.list
في المثال التالي ، ولكن يعمل أي اسم طالما كان اسمًا فريدًا في الدليل:
- echo "deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/elastic-7.x.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list > /dev/null
هذا الأمر متطابق تمامًا مع إنشاء الملف يدويًا وإدراج السطر المناسب.
الخيار 3 — إنشاء ملف .sources
في sources.list.d
الطريقة الثالثة تكتب في ملف .sources
بدلاً من ملف .list
. هذه الطريقة حديثة نسبيًا وتستخدم تنسيق deb822
لعدة أسطر، وهو أقل غموضًا مقارنةً بالإعلان deb . . .
، على الرغم من أنها متطابقة وظيفيًا. قم بإنشاء ملف جديد:
- sudo nano /etc/apt/sources.list.d/elastic-7.x.sources
ثم أضف المستودع الخارجي باستخدام تنسيق deb822
:
Types: deb
Architectures: amd64 arm64
Signed-By: /usr/share/keyrings/elastic-7.x.gpg
URIs: https://artifacts.elastic.co/packages/7.x/apt
Suites: stable
Components: main
احفظ واخرج بعد إدراج النص.
يشبه هذا الى حد كبير تنسيق سطر واحد، وفحصه بالمقارنة سطرا بسطر يظهر أن المعلومات في كليهما متطابقة، مرتبة بشكل مختلف فقط. شيء يجب ملاحظته هو أن هذا التنسيق لا يستخدم الفواصل عند وجود عدة وسيطات (مثل amd64، arm64
)، بل يستخدم المسافات.
بعد ذلك، ستتحقق من هذه العملية من خلال إجراء تثبيت اختباري.
الخطوة 4 — تثبيت الحزمة من المستودع الخارجي
يجب عليك استدعاء apt update
لتحفيز apt
على البحث في ملف sources.list
الرئيسي، وجميع ملفات .list
و .sources
في sources.list.d
. استدعاء apt install
دون تحديث أولاً سيؤدي إلى فشل التثبيت، أو تثبيت حزمة افتراضية قديمة من apt
.
قم بتحديث مستودعاتك:
- sudo apt update
ثم قم بتثبيت الحزمة:
- sudo apt install elasticsearch
لا يتغير شيء في هذه الخطوة مقارنةً بطريقة apt-key
. بمجرد اكتمال هذا الأمر، ستكون قد أكملت التثبيت.
إضافة – إضافة مستودع خارجي باستخدام خادم مفاتيح
سيتناول هذا القسم بشكل موجز استخدام gpg
مع خادم مفاتيح بدلاً من مفتاح عام لإضافة مستودع خارجي. العملية مطابقة تقريبًا للطريقة التي يتم فيها استخدام المفتاح العام، باستثناء كيفية استدعاء gpg
.
add-apt-repository
هو نظير قائم على خادم المفاتيح لـ apt-key
، وكلاهما مرشح للتقادم. يستخدم هذا السيناريو مكونات مختلفة. بدلاً من مفتاح ومستودع، يتم توفير عنوان URL لخادم المفاتيح ومعرف المفتاح. في هذه الحالة، يمكنك التنزيل مباشرةً من خادم المفاتيح إلى تنسيق .gpg
المناسب دون الحاجة إلى تحويل أي شيء. لأن add-apt-repository
سيتم تقادمه قريبًا، ستقوم بدلاً من ذلك باستخدام gpg
للتنزيل إلى ملف مع تجاوز السلوك الافتراضي لـ gpg
للاستيراد إلى سلسلة مفاتيح موجودة.
باستخدام لغة البرمجة مفتوحة المصدر R كمثال، هذه هي المكونات المعطاة، التي يمكن العثور عليها أيضًا في تعليمات التثبيت على موقع المشروع الرسمي:
- خادم المفاتيح:
keyserver.ubuntu.com
- معرف المفتاح:
E298A3A825C0D65DFD57CBB651716619E084DAB9
- المستودع:
https://cloud.r-project.org/bin/linux/ubuntu jammy-cran40/
أولاً، قم بالتنزيل مباشرةً من خادم المفاتيح باستخدام gpg
. تنبيه، أنه قد يستغرق هذا الأمر بعض الوقت للانتهاء اعتمادًا على حركة التنزيل:
- sudo gpg --homedir /tmp --no-default-keyring --keyring /usr/share/keyrings/R.gpg --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9
يتضمن هذا الأمر العلامات التالية، والتي تختلف عن استخدام gpg
مع مفتاح عام:
--no-default-keyring
مقترنة بـ--keyring
تسمح بإخراج إلى ملف جديد بدلاً من الاستيراد إلى سلسلة مفاتيح موجودة، وهو السلوك الافتراضي لـgpg
في هذا السيناريو.--keyserver
مع--recv-keys
يوفر المفتاح المحدد والموقع الذي تقوم بتنزيله من.--homedir
يُستخدم لإعادة كتابة موقعgpg
الافتراضي لإنشاء ملفات مؤقتة. يحتاجgpg
إلى إنشاء هذه الملفات لإكمال الأمر، وإلا فسيحاولgpg
الكتابة إلى/root
مما يتسبب في خطأ في الإذن. بدلاً من ذلك، يضع هذا الأمر الملفات المؤقتة في الدليل المناسب/tmp
.
بعد ذلك، قم بإضافة المستودع إلى ملف .list
. يتم ذلك بنفس الطريقة بالضبط كإضافة مستودع خارجي باستخدام مفتاح عام من خلال توصيل أمر echo
بأمر tee
:
- echo "deb [arch=amd64 signed-by=/usr/share/keyrings/R.gpg] https://cloud.r-project.org/bin/linux/ubuntu jammy-cran40/" | sudo tee /etc/apt/sources.list.d/R.list > /dev/null
بعد ذلك، قم بتحديث قائمة المستودعات الخاصة بك:
- sudo apt update
ثم يمكنك تثبيت الحزمة:
- sudo apt install r-base
استخدام gpg
لإضافة مستودعات خارجية متشابه بين المفاتيح العامة وخوادم المفاتيح، مع الفرق في كيفية استدعاء gpg
.
الاستنتاج
إضافة مستودع خارجي باستخدام مفتاح عام أو خادم مفاتيح يمكن القيام به من خلال gpg
، دون استخدام apt-key
أو add-apt-repository
كوسيط. استخدم هذا الأسلوب للتأكد من أن عملية الخاصية الخاصة بك لا تصبح قديمة في إصدارات Ubuntu المستقبلية، حيث أن apt-key
و add-apt-repository
قد تم تجاهلها وستتم إزالتها في إصدار مستقبل. إضافة مستودعات خارجية باستخدام gpg
يضمن أن يتم استخدام المفتاح لتخويل مستودع واحد فقط كما تنوي.