10.3.3. יצירת מאגר חבילות עבור APT
עכשיו כשיש לך חבילה מותאמת אישית, אתה יכול להפיץ אותה דרך מאגר חבילות APT. להשתמש לִנְזוֹף כדי ליצור את המאגר הרצוי ולמלא אותו. הכלי הזה חזק למדי והדף המדריך שלו בהחלט שווה קריאה.
מאגר חבילות מתארח בדרך כלל בשרת. כדי להפריד אותו כראוי משירותים אחרים הפועלים בשרת, עדיף ליצור משתמש ייעודי לשירות זה. בחשבון המשתמש הייעודי, תוכל לארח את קבצי המאגר וגם את מפתח GnuPG שישמש לחתימה על מאגר החבילות:
# apt install reprepro gnupg
[...]
# adduser --system --group pkgrepo
הוספת משתמש מערכת 'pkgrepo' (UID 136) ... מוסיף קבוצה חדשה 'pkgrepo' (GID 142) ...
הוספת משתמש חדש 'pkgrepo' (UID 136) עם הקבוצה 'pkgrepo' ... יצירת ספריית בית '/home/pkgrepo' ...
# chown pkgrepo $(tty)
# su - -s /bin/bash pkgrepo
$ gpg --gen-key
gpg (GnuPG) 2.1.11; זכויות יוצרים (C) 2016 Free Software Foundation, Inc. זוהי תוכנה חופשית: אתה חופשי לשנות ולהפיץ אותה מחדש.
אין אחריות, במידה המותרת בחוק.
gpg: הספרייה '/home/pkgrepo/.gnupg' נוצרה
gpg: קובץ תצורה חדש '/home/pkgrepo/.gnupg/dirmngr.conf' נוצר gpg: קובץ תצורה חדש '/home/pkgrepo/.gnupg/gpg.conf' נוצר gpg: keybox '/home/pkgrepo/.gnupg/ pubring.kbx' נוצר
הערה: השתמש ב-"gpg --full-gen-key" עבור תיבת דו-שיח ליצירת מפתחות מלאה. GnuPG צריך לבנות מזהה משתמש כדי לזהות את המפתח שלך.
שם אמיתי: מפתח חתימה של מאגר אבטחה פוגעני
כתובת דואר אלקטרוני: [מוגן בדוא"ל]
בחרת USER-ID זה:
"מפתח חתימה של מאגר אבטחה פוגעני[מוגן בדוא"ל]> "
# apt install reprepro gnupg
[...]
# adduser --system --group pkgrepo
הוספת משתמש מערכת 'pkgrepo' (UID 136) ... מוסיף קבוצה חדשה 'pkgrepo' (GID 142) ...
הוספת משתמש חדש 'pkgrepo' (UID 136) עם הקבוצה 'pkgrepo' ... יצירת ספריית בית '/home/pkgrepo' ...
# chown pkgrepo $(tty)
# su - -s /bin/bash pkgrepo
$ gpg --gen-key
gpg (GnuPG) 2.1.11; זכויות יוצרים (C) 2016 Free Software Foundation, Inc. זוהי תוכנה חופשית: אתה חופשי לשנות ולהפיץ אותה מחדש.
אין אחריות, במידה המותרת בחוק.
gpg: הספרייה '/home/pkgrepo/.gnupg' נוצרה
gpg: קובץ תצורה חדש '/home/pkgrepo/.gnupg/dirmngr.conf' נוצר gpg: קובץ תצורה חדש '/home/pkgrepo/.gnupg/gpg.conf' נוצר gpg: keybox '/home/pkgrepo/.gnupg/ pubring.kbx' נוצר
הערה: השתמש ב-"gpg --full-gen-key" עבור תיבת דו-שיח ליצירת מפתחות מלאה. GnuPG צריך לבנות מזהה משתמש כדי לזהות את המפתח שלך.
שם אמיתי: מפתח חתימה של מאגר אבטחה פוגעני
כתובת דואר אלקטרוני: [מוגן בדוא"ל]
בחרת USER-ID זה:
"מפתח חתימה של מאגר אבטחה פוגעני[מוגן בדוא"ל]> "
לשנות (N)name, (E)mail, או (O)kay/(Q)uit? o
אנחנו צריכים ליצור הרבה בתים אקראיים. מומלץ לבצע פעולה אחרת (הקלדה על המקלדת, הזזת העכבר, ניצול הדיסקים) במהלך יצירת הפריים; זה נותן למחולל המספרים האקראיים סיכוי טוב יותר להשיג מספיק אנטרופיה.
[...]
gpg: /home/pkgrepo/.gnupg/trustdb.gpg: trustdb נוצר gpg: מפתח B4EF2D0D מסומן כאמין בסופו של דבר
gpg: הספרייה '/home/pkgrepo/.gnupg/openpgp-revocs.d' נוצרה
gpg: אישור ביטול מאוחסן בתור '/home/pkgrepo/.gnupg/openpgp-revocs.d/
➥ F8FE22F74F1B714E38DA6181B27F74F7B4EF2D0D.rev’
מפתח ציבורי וסודי נוצר ונחתם.
gpg: בדיקת ה-trustdb
gpg: דרושים שוליים: דרושים 3 השלמות: מודל אמון אחד: PGP
gpg: עומק: 0 חוקי: 1 חתום: 0 אמון: 0-, 0q, 0n, 0m, 0f, 1u pub rsa2048/B4EF2D0D 2016-06-17 [S]
טביעת אצבע של מפתח = F8FE 22F7 4F1B 714E 38DA 6181 B27F 74F7 B4EF 2D0D
uid [ultimate] מפתח חתימה של מאגר אבטחה פוגעני[מוגן בדוא"ל]> sub rsa2048/38035F38 2016-06-17 []
לשנות (N)name, (E)mail, או (O)kay/(Q)uit? o
אנחנו צריכים ליצור הרבה בתים אקראיים. מומלץ לבצע פעולה אחרת (הקלדה על המקלדת, הזזת העכבר, ניצול הדיסקים) במהלך יצירת הפריים; זה נותן למחולל המספרים האקראיים סיכוי טוב יותר להשיג מספיק אנטרופיה.
[...]
gpg: /home/pkgrepo/.gnupg/trustdb.gpg: trustdb נוצר gpg: מפתח B4EF2D0D מסומן כאמין בסופו של דבר
gpg: הספרייה '/home/pkgrepo/.gnupg/openpgp-revocs.d' נוצרה
gpg: אישור ביטול מאוחסן בתור '/home/pkgrepo/.gnupg/openpgp-revocs.d/
➥ F8FE22F74F1B714E38DA6181B27F74F7B4EF2D0D.rev’
מפתח ציבורי וסודי נוצר ונחתם.
gpg: בדיקת ה-trustdb
gpg: דרושים שוליים: דרושים 3 השלמות: מודל אמון אחד: PGP
gpg: עומק: 0 חוקי: 1 חתום: 0 אמון: 0-, 0q, 0n, 0m, 0f, 1u pub rsa2048/B4EF2D0D 2016-06-17 [S]
טביעת אצבע של מפתח = F8FE 22F7 4F1B 714E 38DA 6181 B27F 74F7 B4EF 2D0D
uid [ultimate] מפתח חתימה של מאגר אבטחה פוגעני[מוגן בדוא"ל]> sub rsa2048/38035F38 2016-06-17 []
שים לב שכאשר אתה מתבקש להזין ביטוי סיסמה, עליך להזין ערך ריק (ולאשר שאינך רוצה להגן על המפתח הפרטי שלך) מכיוון שאתה רוצה להיות מסוגל לחתום על המאגר באופן לא אינטראקטיבי. שימו לב גם לזה Gpg דורש גישת כתיבה למסוף כדי להיות מסוגל לבקש בצורה מאובטחת ביטוי סיסמה: לכן שינית את הבעלות על הטרמינל הוירטואלי (שנמצא בבעלות השורש מאז שהתחברתי לראשונה כמשתמש זה) לפני שהתחלת מעטפת בתור pkgrepo.
כעת אתה יכול להתחיל להגדיר את המאגר. יש צורך בספרייה ייעודית עבור לִנְזוֹף ובתוך הספרייה הזו אתה צריך ליצור א conf/הפצות קובץ המתעד אילו הפצות זמינות במאגר החבילות:
$ mkdir -p reprepro/conf
$ cd reprepro
$ cat >conf/distributions <
מקור: אבטחה התקפית
תיאור: החבילות הפנימיות של Offsec ארכיטקטורות: מקור amd64 i386 רכיבים: ראשי
SignWith: F8FE22F74F1B714E38DA6181B27F74F7B4EF2D0D END
$ mkdir -p reprepro/conf
$ cd reprepro
$ cat >conf/distributions <
מקור: אבטחה התקפית
תיאור: החבילות הפנימיות של Offsec ארכיטקטורות: מקור amd64 i386 רכיבים: ראשי
SignWith: F8FE22F74F1B714E38DA6181B27F74F7B4EF2D0D END
השדות הנדרשים הם שם קוד, שנותן את שם ההפצה, ארכיטקטורות, המציין אילו ארכיטקטורות יהיו זמינות בהפצה (והתקבלו בצד הקלט), ו רכיבי, המציין את הרכיבים השונים הזמינים בהפצה (com-
רכיבים הם מעין תת-סעיף של ההפצה, שניתן להפעיל בנפרד ב-sources.list של APT). ה מָקוֹר ו תיאור השדות הם אינפורמטיביים בלבד והם מועתקים כפי שהם ב- לשחרר קובץ. ה SignWith שואל שדה לִנְזוֹף לחתום על המאגר עם מפתח GnuPG שהמזהה שלו רשום (שים את טביעת האצבע המלאה כאן כדי להבטיח שאתה משתמש במפתח הנכון, ולא עוד אחד שמתנגש במזהה הקצר). ה קבל גם עבור ההגדרה אינה נדרשת אך מאפשרת לעבד אותה .שינויים קבצים שלשדה התפוצה שלהם יש ערך המופיע כאן (ללא זה, הוא יקבל רק את שם הקוד של ההפצה באותו שדה).
עם התקנה בסיסית זו, אתה יכול לתת לִנְזוֹף צור מאגר ריק:
$ reprepro יצוא
מייצא מדדים...
$ למצוא .
.
./db
./db/version
./db/references.db
./db/contents.cache.db
./db/checksums.db
./db/packages.db
./db/release.caches.db
./conf
./conf/distributions
./dists
./dists/offsec-internal
./dists/offsec-internal/Release.gpg
./dists/offsec-internal/Release
./dists/offsec-internal/main
./dists/offsec-internal/main/source
./dists/offsec-internal/main/source/Release
./dists/offsec-internal/main/source/Sources.gz
./dists/offsec-internal/main/binary-amd64
./dists/offsec-internal/main/binary-amd64/Packages
./dists/offsec-internal/main/binary-amd64/Release
./dists/offsec-internal/main/binary-amd64/Packages.gz
./dists/offsec-internal/main/binary-i386
./dists/offsec-internal/main/binary-i386/Packages
./dists/offsec-internal/main/binary-i386/Release
./dists/offsec-internal/main/binary-i386/Packages.gz
./dists/offsec-internal/InRelease
$ reprepro יצוא
מייצא מדדים...
$ למצוא .
.
./db
./db/version
./db/references.db
./db/contents.cache.db
./db/checksums.db
./db/packages.db
./db/release.caches.db
./conf
./conf/distributions
./dists
./dists/offsec-internal
./dists/offsec-internal/Release.gpg
./dists/offsec-internal/Release
./dists/offsec-internal/main
./dists/offsec-internal/main/source
./dists/offsec-internal/main/source/Release
./dists/offsec-internal/main/source/Sources.gz
./dists/offsec-internal/main/binary-amd64
./dists/offsec-internal/main/binary-amd64/Packages
./dists/offsec-internal/main/binary-amd64/Release
./dists/offsec-internal/main/binary-amd64/Packages.gz
./dists/offsec-internal/main/binary-i386
./dists/offsec-internal/main/binary-i386/Packages
./dists/offsec-internal/main/binary-i386/Release
./dists/offsec-internal/main/binary-i386/Packages.gz
./dists/offsec-internal/InRelease
כפי שניתן לראות, לִנְזוֹף יצר את המטא-מידע של המאגר ב-a דיסטות ספריית משנה. זה גם אתחל מסד נתונים פנימי ב-a db תת-ספרייה.
זה הזמן להוסיף את החבילה הראשונה שלך. ראשית, העתק את הקבצים שנוצרו על ידי בניית ה- offsec- ברירת מחדל חבילה (offsec-defaults_1.0.dsc, offsec-defaults_1.0.tar.xz,
offsec-defaults_1.0_all.deb, ו-offsec-defaults_1.0_amd64.changes) לתוך /tmp
בשרת המארח את מאגר החבילות ושאל לִנְזוֹף לכלול את החבילה:
$ reprepro כוללים offsec-internal /tmp/offsec-defaults_1.0_amd64.changes
מייצא מדדים...
$ למצוא בריכה בריכת בריכה/בריכה ראשית/ראשית/או
pool/main/o/offsec-defaults
pool/main/o/offsec-defaults/offsec-defaults_1.0.dsc pool/main/o/offsec-defaults/offsec-defaults_1.0.tar.xz pool/main/o/offsec-defaults/offsec-defaults_1.0. XNUMX_all.deb
$ reprepro כוללים offsec-internal /tmp/offsec-defaults_1.0_amd64.changes
מייצא מדדים...
$ למצוא בריכה בריכת בריכה/בריכה ראשית/ראשית/או
pool/main/o/offsec-defaults
pool/main/o/offsec-defaults/offsec-defaults_1.0.dsc pool/main/o/offsec-defaults/offsec-defaults_1.0.tar.xz pool/main/o/offsec-defaults/offsec-defaults_1.0. XNUMX_all.deb
כפי שאתה יכול לראות, הוא הוסיף את הקבצים למאגר החבילות שלו ב-a בריכה תת-ספרייה.
השמיים דיסטות ו בריכה ספריות הן שתי הספריות שאתה צריך להפוך (פומבי) לזמינות ב-HTTP כדי לסיים את ההגדרה של מאגר ה-APT שלך. הם מכילים את כל הקבצים ש-APT תרצה להוריד.
בהנחה שאתה רוצה לארח את זה על מארח וירטואלי בשם pkgrepo.offsec.com, תוכל ליצור את קובץ התצורה הבא של Apache, לשמור אותו בו /etc/apache2/sites-available/pkgrepo. offsec.com.conf, והפעל אותו באמצעות a2ensite pkgrepo.offsec.com):
שם שרת pkgrepo.offsec.com ServerAdmin [מוגן בדוא"ל]
ErrorLog /var/log/apache2/pkgrepo.offsec.com-error.log
CustomLog /var/log/apache2/pkgrepo.offsec.com-access.log ”%h %l %u %t \”%r\” %>s %O” DocumentRoot /home/pkgrepo/reprepro
אינדקסים של אפשרויות FollowSymLinks MultiViews דורש הכל מוענקים
AllowOverride כל
שם שרת pkgrepo.offsec.com ServerAdmin [מוגן בדוא"ל]
ErrorLog /var/log/apache2/pkgrepo.offsec.com-error.log
CustomLog /var/log/apache2/pkgrepo.offsec.com-access.log ”%h %l %u %t \”%r\” %>s %O” DocumentRoot /home/pkgrepo/reprepro
אינדקסים של אפשרויות FollowSymLinks MultiViews דורש הכל מוענקים
AllowOverride כל
והמקביל sources.list כניסה להוספה במכונות שצריכות חבילות ממאגר זה תיראה כך:
deb http://pkgrepo.offsec.com offsec-internal main
# הפעל את השורה הבאה אם אתה רוצה גישה גם לחבילות מקור
# deb-src http://pkgrepo.offsec.com offsec-internal main
deb http://pkgrepo.offsec.com offsec-internal main
# הפעל את השורה הבאה אם אתה רוצה גישה גם לחבילות מקור
# deb-src http://pkgrepo.offsec.com offsec-internal main
החבילה שלך פורסמה כעת ואמורה להיות זמינה למארחים ברשת שלך.
למרות שזו הייתה הגדרה ממושכת, "ההרמה הכבדה" הושלמה כעת. אתה יכול לאתחל את המחשבים ברשת שלך באמצעות PXE, להתקין גרסה מותאמת אישית של Kali Linux ללא אינטראקציה הודות ל-Preseed שנמסר ברשת, להגדיר את SaltStack לנהל את התצורות שלך (ולשלוט במיניונים!), ליצור חבילות מותאמות אישית מפוצלות ולהפיץ את החבילות האלה דרך מאגר חבילות משלו. זה מספק ניהול מרכזי ושליטה ברמת הארגון על התקנות מרובות של Kali Linux. בקיצור, כעת אתה יכול לפרוס במהירות מערכות Kali מאובטחות במיוחד המוגדרות מראש לצרכים הספציפיים שלך ולשמור אותן מסונכרנות הודות להתקנה של Kali (חצי אוטומטית) של כל עדכוני החבילות.