הקדמה
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
, ובגרסאות העתידיות של Ubuntu זו תהיה האפשרות היחידה. apt-key
ו־add-apt-repository
עצמם תמיד פעלו כמעטיים, קוראים ל־gpg
ברקע. בשימוש ישיר ב־gpg
ניתן לחתוך את האמצעי. משום כך, שיטת gpg
מתאימה לאחור וניתנת לשימוש כתחליף ישיר ל־apt-key
.
המדריך יציין שתי פרוצדורות המשתמשות באלטרנטיבות ל־apt-key
ו־add-apt-repository
, בהתאמה. הראשון יהיה הוספת מאגר חיצוני באמצעות מפתח ציבורי עם gpg
במקום להשתמש ב־apt-key
. השני, כתוספת, המדריך יכסה הוספת מאגר חיצוני באמצעות keyserver עם gpg
כאלטרנטיבה לשימוש ב־add-apt-repository
.
דרישות מוקדמות
כדי להשלים את המדריך, תצטרך שרת Ubuntu 22.04. ודא שהגדרת את זה על פי המדריך הראשוני שלנו להגדרת שרת עבור Ubuntu 22.04, עם משתמש לא ראשי עם הרשאות sudo
וגישה חומת אש מאופשרת.
שלב 1 — זיהוי הרכיבים והתבנית המרכזית
PGP, או Pretty Good Privacy, הוא תוכנת הצפנה בבעלות פטנט, המשמשת לחתימה, הצפנה ופענוח של קבצים וספריות. קבצי PGP הם קבצי מפתח ציבוריים, המשמשים בתהליך זה לאימות תיקיות כמקורות חוקיים בתוך apt
. GPG, או GNU Privacy Guard, הוא אלטרנטיבה פתוחה ל־PGP. קבצי GPG בדרך כלל הם מחזיקי מפתחות, הם קבצים שמחזיקים בתוכם מספר מפתחות. שני סוגי הקבצים הללו נהוגים לחתימה והצפנה של קבצים.
gpg
הוא הכלי לשורת הפקודה של GPG שיכול לשמש לאימות תיקיות חיצוניות לשימוש עם apt
. עם זאת, gpg
מקבל רק קבצי GPG. כדי להשתמש בכלי זה בקבצי PGP, יש להמיר אותם.
אלסטיקסרץ' מציגה תרחיש נפוץ להמרת מפתחות, ותשמש כדוגמה למקטע זה. תוריד מפתח המותאם ל־PGP ותמיר אותו לתבנית המתאימה ל־apt
עם סיומת של קובץ .gpg
. תבצע זאת על ידי הפעלת פקודת gpg
עם הדגל --dearmor
. לאחר מכן, תוסיף את קישור המאגר לרשימת מקורות החבילות, ותחבר הפניה ישירה למפתח שלך שהומר. לבסוף, תאמת את התהליך על ידי התקנת החבילה של Elasticsearch.
פרויקטים שדורשים הוספת מאגרים עם אימות מפתח תמיד יספקו לך מפתח ציבורי ו-URI של המאגר המייצג את המיקום המדויק שלו. לדוגמה, באלסטיקסרץ הוסבר בעמוד ההתקנה את רכיביו הבאים:
אלה הרכיבים הניתנים ל-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-----
. . .
למרות שיש ב-URL את GPG
, השורה הראשונה מציינת שזה בעצם קובץ מפתח 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
משמש לציון פלט הקובץ.
ב־Ubuntu, התיקייה /usr/share/keyrings
היא המיקום המומלץ לקבצי GPG שהומרו, מכיוון שזו המיקום ברירת המחדל שבו Ubuntu שומרת את טבלאות המפתחות שלה. בדוגמה זו, הקובץ נקרא 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
. בקובץ זה ישנם מקורות מרובים, כולל המקורות הברירת מחדל שבהם Ubuntu. ניתן לערוך את הקובץ ישירות, אף שאפשרויות 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
הוא הפעלת מפתחות מבוססת keyserver, הנגדירה את apt-key
, ושתיים מהן על פי תכנון לביטול. בסיטואציה זו משתמשים ברכיבים שונים. במקום מפתח ומאגר, מקבלים כתובת URL של keyserver וזיהוי מפתח. במקרה זה, אפשר להוריד ישירות מה keyserver לתקיית פורמט .gpg
המתאימה, ללא צורך להמיר דבר. מאחר ש־add-apt-repository
עשוי להיות מופסק בקרוב, יש להשתמש במפתח gpg
כדי להוריד אל קובץ ובו לדרוס את ההתנהגות המוגדרת כברירת מחדל של gpg
לייבוא אל keyring קיים.
בשימוש בשפת התכנות קוד פתוח R כדוגמה, הנה הרכיבים הנתונים, שניתן למצוא גם בהוראות ההתקנה באתר הפרויקט הרשמי:
- Keyserver:
keyserver.ubuntu.com
- זיהוי מפתח:
E298A3A825C0D65DFD57CBB651716619E084DAB9
- מאגר:
https://cloud.r-project.org/bin/linux/ubuntu jammy-cran40/
ראשית, יש להוריד ישירות מה keyserver באמצעות 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
מאפשר פלט לקובץ חדש במקום לייבא אל 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
להוספת מאגרי חיצוניים דומה בין לבין מפתחות ציבוריים ו־keyserver, ההבחנה היא באופן שבו אתה קורא ל־gpg
.
סיכום
הוספת תוסף חיצוני באמצעות מפתח ציבורי או מספק מפתחות יכולה להתבצע דרך gpg
, מבלי להשתמש ב־apt-key
או ב־add-apt-repository
כתיווך. השתמש בשיטה זו כדי לוודא שהתהליך שלך לא יהיה מיושן בגרסאות הבאות של אובונטו, מאחר ו־apt-key
ו־add-apt-repository
כבר לא נתמכים ויסרו בגרסה עתידית. הוספת תוספים חיצוניים באמצעות gpg
מבטיחה כי מפתח ייעודי ישמש רק לאישור תוסף יחיד כפי שתכוון.