כרוס במערכות הפעלה של UNIX הוא פעולה המשנה את ספריית השורשים לכאורה לתהליך הריצה הנוכחי וילדיו. התוכניות הפועלות בסביבה שונה זו אינן יכולות לגשת לקבצים מחוץ לעץ הספריה המיועד. זה בעצם מגביל את הגישה שלהם לעץ מדריך וכך הם מקבלים את השם 'כלא כרוט'.
הרעיון הוא שתיצור עץ ספרייה בו אתה מעתיק או מקשר בכל קבצי המערכת הדרושים לתהליך להפעלה. לאחר מכן אתה משתמש בשיחת מערכת Chroot כדי לשנות את ספריית השורש כדי להיות בבסיס העץ החדש הזה ולהתחיל את התהליך הפועל באותה סביבה מורשת. מכיוון שזה לא יכול למעשה להתייחס לנתיבים מחוץ לשורש שהשתנה, הוא לא יכול לקרוא בזדון או לכתוב למקומות האלה.
מדוע זה נדרש ואיך זה שונה מהמכונות הווירטואליות?
זוהי וירטואליזציה ברמת הפעלה ברמת המערכת ומשמשת לעתים קרובות במקום מכונות וירטואליות ליצירת מקרים מבודדים מרובים של מערכת ההפעלה המארחת. זהו וירטואליזציה ברמת גרעין ולמעשה אין לו תקורה בהשוואה למכונות וירטואליות שהן הווירטואליזציה של שכבת היישומים כתוצאה מכך היא מספקת שיטה טובה מאוד ליצירת מקרים מבודדים מרובים על אותה חומרה. מכונה וירטואלית (VM) היא יישום תוכנה של מכונה ולעתים קרובות הם מנצלים את מה שמכונה וירטואליזציה של חומרה כדי לספק תמונה וירטואלית של מערכת הפעלה עובדת.
כיצד להשתמש בכלא Chroot
הפקודה הבסיסית ליצירת כלא כרוט היא כדלקמן:
chroot /path/to/new/root command
OR
chroot /path/to/new/root /path/to/server
OR
chroot [options] /path/to/new/root /path/to/server
הערה: רק משתמש שורש/מיוחס יכול להשתמש בשיחת מערכת Chroot. משתמש שאינו מעוגל עם הגישה לפקודה יכול לעקוף את כלא ה- Chroot.
שלבים ליצירת מיני-מאסר עבור 'Bash' ולפקודה 'LS'
1. צור ספרייה שתשמש כשורש הפקודה.
$ mkdir jailed
$ cd jailed
2. צור את כל הספריות החיוניות לפקודה להפעלה: תלוי במערכת ההפעלה שלך הספריות הנדרשות עשויות להשתנות. מבחינה הגיונית אנו יוצרים את כל הספריות הללו כדי לשמור עותק של הספריות הנדרשות. כדי לראות מה כל הספריות נדרשות ראה שלב 4.
$ mkdir -p bin lib64/x86_64-linux-gnu lib/x86_64-linux-gnu3. הפעל את הפקודה 'איזה': הפעל את הפקודה 'איזה' כדי למצוא את המיקום של פקודת LS ו- BASH. לאחר ריצה של הפקודה מעניקה את אותם בינאריות בספריה 'סל' של הכלא שלנו. וודא שאין לך אף אחת מהפקודות הללו. מעכשיו אנו מתייחסים לספריה שלנו 'כָּלוּא' מדריך לנוחיות.
$ unalias ls # Required only if you have aliased ls command
$ unalias bash # Required only if you have aliased bash command
$ cp $(which ls) ./bin/
$ cp $(which bash) ./bin/
4. העתק ספריות/אובייקטים מתאימים : עבור ההפעלה בנו כָּלוּא ספרייה לעבודה עלינו להעתיק את הספריות/האובייקטים המתאימים בספריה הכלא. כברירת מחדל ההפעלה מסתכלת על המיקומים המתחילים ב- '/'. כדי למצוא את התלות אנו משתמשים בפקודה 'LDD'
$ ldd $(which bash)
linux-vdso.so.1 => (0x00007ffc75dd4000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f6577768000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f6577564000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f657719a000)
/lib64/ld-linux-x86-64.so.2 (0x000055979f3fd000)
הפעל את הפקודות הבאות ליצירת ספריות מתאימות.
$ cp /lib/x86_64-linux-gnu/libtinfo.so.5 lib/x86_64-linux-gnu/
$ cp /lib/x86_64-linux-gnu/libdl.so.2 lib/x86_64-linux-gnu/
$ cp /lib/x86_64-linux-gnu/libc.so.6 lib/x86_64-linux-gnu/
$ cp /lib64/ld-linux-x86-64.so.2 lib64/
באופן דומה עבור LS
$ ldd $(which ls)
linux-vdso.so.1 => (0x00007fff4f05d000)
libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f9a2fd07000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9a2f93e000)
libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f9a2f6cd000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9a2f4c9000)
/lib64/ld-linux-x86-64.so.2 (0x000055e836c69000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9a2f2ac000)
$ cp /lib/x86_64-linux-gnu/libselinux.so.1 lib/x86_64-linux-gnu/
$ cp /lib/x86_64-linux-gnu/libc.so.6 lib/x86_64-linux-gnu/
$ cp /lib/x86_64-linux-gnu/libpcre.so.3 lib/x86_64-linux-gnu/
$ cp /lib/x86_64-linux-gnu/libdl.so.2 lib/x86_64-linux-gnu/
$ cp /lib64/ld-linux-x86-64.so.2 lib64/
$ cp /lib/x86_64-linux-gnu/libpthread.so.0 lib/x86_64-linux-gnu/
מבנה הספריה הסופי חייב להיות דומה לזה

5. Sudo Chroot: הפעל פקודה זו כדי לשנות את השורש לספריה הכלא יחד עם הנתיב לקליפה. כברירת מחדל הוא ינסה לטעון '/bin/sh'.
$ cd ..
$ sudo chroot jailed /bin/bash
אתה יכול להתמודד עם שגיאה זו תוך כדי הפעלת פקודת Chroot
chroot: failed to run command `/bin/bash': No such file or directoryזה יכול להיות בגלל 2 סיבות שהקובץ אינו קיים (וזה ברור) או כאשר ספריית הטעינה נכשלת או אינה זמינה. בדוק כפול אם הספריות נמצאות במיקום נכון.
6. מעטפת חדשה חייבת לצוץ: זה הבסיס הכלא שלנו. כרגע יש לנו רק שתי פקודות המותקנות על Bash ו- LS. למרבה המזל CD ו- PWD הם פקודות מובנות ב- Bash Shell וכך תוכלו להשתמש בהן גם כן.
שוטט סביב הספרייה נסה לגשת ל'- CD /../ 'או משהו דומה. נסה לשבור את הכלא כנראה שלא תוכל. :)
לצאת מהכלא
$ exitהחלק החשוב והמעניין ביותר הוא שכשאתה רץ
$ ps auxולמצוא את התהליך תגלו שיש רק תהליך אחד
root 24958 … 03:21 0:00 /usr/bin/sudo -E chroot jailed/ /bin/bashבאופן מעניין תהליכים במעטפת הנכלאת פועלים כתהליך פשוט של ילד של מעטפת זו. כל התהליכים בסביבה הכלואת הם רק תהליך רמת משתמש פשוט במערכת ההפעלה המארחת ומבודדים על ידי מרחבי השמות המסופקים על ידי הגרעין ולכן יש תקורה מינימלית וכיתרון נוסף אנו מקבלים בידוד.
באופן דומה אתה יכול להוסיף פקודות נוספות לך סביבה וירטואלית בכלא. כדי להוסיף תוכניות מורכבות יותר, ייתכן שתצטרך ליצור ספריות נוספות כמו '/proc' ו- '/dev'. אלה מגדילים את המורכבות של התהליך. אני מקווה שאנחנו לא דורשים זאת למטרתנו.
זה כל מה שאתה צריך לדעת על Chroot ועל מכלול ספריות. המטרה הסופית שלנו היא להבין מהם מכולות וכיצד שירותים כמו AWS (שירותי אינטרנט של אמזון) Google Cloud ו- Docker מסוגלים לספק כל כך הרבה מקרים וירטואליים של מערכות הפעלה לפי דרישה. כמו כן כיצד SYS-ADMIN מפעיל מספר שרתים לאינטרנט למספר דומיינים במכונה פיזית יחידה. זה היה רק צעד אחד לקראת הבנתו