הקדמה
NFS, או מערכת קבצים ברשת, היא פרוטוקול למערכת קבצים מבוזרת שמאפשרת לך לעגן תיקיות מרוחקות על השרת שלך. זה מאפשר לך לנהל את מרחב האחסון במיקום שונה ולכתוב למרחב הזה ממספר לקוחות שונים. NFS מספק דרך יחסית סטנדרטית וביצועית לגישה למערכות מרוחקות דרך רשת ופועלת בצורה טובה במצבים שבהם יש לגשת למשאבים משותפים באופן קבוע.
במדריך זה, תלמד כיצד להתקין את התוכנה הנדרשת לפונקציונליות של NFS על Ubuntu 18.04, להגדיר עגינות NFS על שרת ועל לקוח, ולעגן ולנתק את המשאבים המרוחקים.
דרישות מוקדמות
במדריך זה, נשתמש בשני שרתים, עם אחד שמשתף חלק מהמערכת שלו עם השני. כדי להשלים את המדריך, תצטרך:
-
שני שרתי Ubuntu 18.04. כל אחד מהם צריך לכלול משתמש לא-רוט עם הרשאות
sudo
מוגדרות, חומת אש המוגדרת עם UFW, ורשת פרטית אם היא זמינה עבורך.-
לעזרה בהגדרת משתמש לא-רוט עם הרשאות
sudo
וחומת אש, עקוב אחר המדריך שלנו להגדרת השרת הראשוני עם Ubuntu 18.04. -
אם אתה משתמש ב-DigitalOcean Droplets עבור השרת והלקוח, קרא את איך ליצור VPC כדי להגדיר רשת פרטית.
-
לאורך המדריך הזה, אנו מתייחסים לשרת שמשתף את התיקיות שלו כהתקן ולשרת שמחבר את התיקיות הללו כלקוח. נשתמש בכתובות ה-IP הבאות כדי לייצג את הערכים של המארח ו-הלקוח:
- מארח:
203.0.113.0
- לקוח:
203.0.113.24
כאשר כתובות ה-IP הללו מופיעות בפקודות ובקבצי התצורה, החלפ אותם בכתובות ה-IP המשלך של המארח ו-הלקוח שלך.
שלב 1 — הורדה והתקנת הרכיבים
תחילה התחל בהתקנת הרכיבים הנדרשים בכל שרת.
על המארח
על השרת המארח, התקן את חבילת ה־nfs-kernel-server
, שתאפשר לך לשתף את הספריות שלך. מכיוון שזו הפעולה הראשונה שאתה מבצע עם apt
במהלך זה, רענן את אינדקס החבילות המקומי לפני ההתקנה:
לאחר מכן, התקן את החבילה:
כששתי החבילות הללו מותקנות, החליפו לשרת הלקוחות.
על הלקוח
על שרת הלקוחות, התקן חבילה בשם nfs-common
, שמספקת פונקציונליות של NFS מבלי לכלול רכיבי שרת. שוב, רענן את אינדקס החבילות המקומי לפני ההתקנה כדי לוודא שיש לך מידע מעודכן:
לאחר מכן, התקן את החבילה:
עכשיו ששני השרתים מכילים את החבילות הנדרשות, תוכל להתחיל להגדיר אותם.
שלב 2 — יצירת ספריות שיתוף על המארח
אנו מתכוונים לשתף שתי ספריות נפרדות עם הגדרות הגדרות שונות כדי להדגיש שני אופנים מרכזיים בהגדרת ההתקנות של NFS ביחס לגישה של המשתמש הראשי.
הסופרמשתמשים יכולים לעשות כל דבר בכל מקום במערכת שלהם. אך ספריות שמונכות על ידי NFS אינן חלק מהמערכת שבה הן מחוברות, ולכן, לפי ברירת מחדל, שרת ה-NFS מסרב לבצע פעולות שדורשות הרשאות של סופרמשתמש. ההגבלה המוגדרת כברירת מחדל זו אומרת כי סופרמשתמשים ב-לקוח לא יכולים לכתוב קבצים כמו root, להקצות מחדש בעלות או לבצע כל משימה אחרת של סופרמשתמש על ההרכבה NFS.
לפעמים, אף על פי כן, יש משתמשים מהימנים במערכת ה-לקוח שצריכים לבצע את הפעולות הללו על מערכת הקבצים המחוברת אך שאין להם צורך בגישת סופרמשתמש על ה-מארח. ניתן להגדיר את שרת ה-NFS כך שיאפשר זאת, אך זה מוסיף גורם של סיכון, מאחר שמשתמש כזה יכול להשיג גישת root לכל המערכת של ה-מארח.
דוגמה 1: ייצוא הרכבה כללית
בדוגמה הראשונה, תיצור הרכבת NFS כללית שמשתמשת בהתנהגות ברירת המחדל של NFS כדי להקשות על משתמש עם הרשאות root על המכונה הלקוח לפעול עם המארח באמצעות הרשאות הסופרמשתמש ב-הלקוח. ניתן להשתמש במשהו דומה לכך כדי לאחסן קבצים שהועלו באמצעות מערכת לניהול תוכן או כדי ליצור מקום למשתמשים לשיתוף קבצי פרוייקט.
ראשית, יש ליצור ספרייה משותפת:
מכיוון שאתה יוצר את זה עם sudo
, התיקייה שייצרת שייכת למשתמש ה-root של המארח:
Outputtotal 8
drwxr-xr-x 2 root root 4096 Feb 7 23:21 .
drwxr-xr-x 3 root root 4096 Feb 7 23:21 ..
NFS יתרגם כל פעולות root בלקוח לכרטיסיות nobody:nogroup כאמצעי אבטחה. לכן, עליך לשנות את בעלות התיקייה כך שתתאים לכרטיסיות אלה:
אתה מוכן כעת לייצא את התיקייה הזו.
דוגמה 2: יצוא התיקייה הביתית
בדוגמה השנייה שלנו, המטרה היא להעביר את תיקיות הבית של המשתמשים השמורות בשרת המארח ולהעבירם לשרתי הלקוח, בעוד שמאפשרים למנהלים אמינים של אלה שרתי הלקוח את הגישה שהם זקוקים לה לניהול נוח של המשתמשים.
כדי לעשות זאת, תייצא את התיקייה /home
. מכיוון שהיא כבר קיימת, אין צורך ליצור אותה מחדש. אין לשנות את ההרשאות גם. אם תעשה זאת, זה יכול להביא לסוגים שונים של בעיות לכל מי שיש לו תיקייה בית על מחשב המארח.
שלב 3 — הגדרת ייצואי NFS בשרת המארח
אחרי כך, נכנס לקובץ התצורה של NFS כדי להגדיר את השיתוף של המשאבים הללו.
על המכונה מארח, פתח את קובץ /etc/exports
בעורך טקסט שתעדיף עם הרשאות root. כאן נשתמש ב־nano
:
הקובץ מכיל הערות המציינות את המבנה הכללי של כל שורת התצורה. התחביר הוא כך:
directory_to_share client(share_option1,...,share_optionN)
תצטרך ליצור שורה לכל אחת מהתיקיות שברצונך לשתף. מאחר שבדוגמה שלנו לקוח יש כתובת IP של 203.0.113.24
, השורות שלנו יראו כך. ודא שאתה משנה את כתובת ה־IP לזו של הלקוח שלך:
/var/nfs/general 203.0.113.24(rw,sync,no_subtree_check)
/home 203.0.113.24(rw,sync,no_root_squash,no_subtree_check)
כאן, אנו משתמשים באותן אפשרויות התצורה עבור שתי התיקיות עם יוצא מתן של no_root_squash
. בואו נסקור מה משמעות האפשרויות הללו:
rw
: אפשרות זו נותנת למחשב הלקוח גישת קריאה וכתיבה לנפח.sync
: אפשרות זו מכריחה את NFS לכתוב שינויים לדיסק לפני השבת. זה מביא לסביבה יותר יציבה ועקבית מאחר שהתשובה משקפת את המצב האמיתי של הנפח המרוחק. עם זאת, זה גם מפחית את מהירות פעולות הקבצים.no_subtree_check
: אפשרות זו מונעת בדיקת תת־עץ, שהיא תהליך שבו המארח חייב לבדוק האם הקובץ עדיין זמין בעץ המיוצא בכל בקשה. זה יכול לגרום למספר בעיות כאשר קובץ משונה שהלקוח פותח אותו. ברוב המקרים, עדיף להשבית בדיקת תת־עץ.no_root_squash
: בברירת מחדל, NFS מתרגם בקשות ממשתמש root מרחוק למשתמש לא מורשה בשרת. זה נועד כתכונת אבטחה כדי למנוע מחשבון root בלקוח להשתמש במערכת הקבצים של המארח כ root.no_root_squash
מבטל את ההתנהגות הזו עבור שיתופים מסוימים.
כאשר תסיים לבצע את השינויים שלך, שמור וסגור את הקובץ. אם אתה משתמש ב-nano
, תוכל לעשות זאת על ידי לחיצה על CTRL + X
ואז Y
ואז ENTER
. לאחר מכן, כדי להפוך את השיתופים לזמינים עבור הלקוחות שהגדרת, אנא הפעל מחדש את שרת ה-NFS עם הפקודה הבאה:
לפני שתוכל בכלל להשתמש בשיתופים החדשים, עליך לוודא שתנועה לשיתופים מאושרת על ידי כללי הגנה בגיאטה.
שלב 4 — התאמת הגיאטה במארח
ראשית, בדוק את מצב הגיאטה כדי לוודא אם היא מופעלת ואם כן, בדוק מה מותר כרגע:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
במערכת שלנו, רק תנועת SSH מאושרת, לכן עלינו להוסיף כלל לתנועת NFS.
עם הרבה אפליקציות, ניתן להשתמש ב־sudo ufw app list
ולהפעיל אותן לפי שם, אך nfs
אינה אחת מהן. עם זאת, מכיוון ש־ufw
בודקת גם את /etc/services
עבור הפורט והפרוטוקול של שירות, עדיין ניתן להוסיף את NFS לפי שם. המומלץ הוא לאפשר את הכלל ההגבלה ביותר שיאפשר את התעבורה שברצונך להרשות, כך שבמקום לאפשר תעבורה מכל מקום, יהיה לך כוונה מסוימת.
השתמש בפקודה הבאה כדי לפתוח את הפורט 2049
על המארח, וודא שאתה מחליף את כתובת ה־IP של הלקוח שלך:
ניתן לאמת את השינוי על ידי הרצת הפקודה הבאה:
עליך לקבל רשימת תעבורה מותרת מפורט 2049
בפלט:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
2049 ALLOW 203.0.113.24
OpenSSH (v6) ALLOW Anywhere (v6)
זה מאשר ש־UFW תרשום רק תעבורת NFS בפורט 2049
מהמכונה שלך של לקוח.
שלב 5 — יצירת נקודות העציבה והתקנת ספריות על הלקוח
כעת שהשרת מוגדר ומספק את השיתופים שלו, תכין את הלקוח שלך.
כדי להפוך את השיתופים המרוחקים לזמינים על הלקוח, עליך לעצבב את הספריות על המארח שברצונך לשתף לספריות ריקות על הלקוח.
הערה: אם ישנם קבצים ותיקיות בנקודת העיגון שלך, הם יהפכו להיות מוסתרים מיד לאחר שתחבר את שיתוף ה־NFS. כדי למנוע אובדן של קבצים חשובים, וודא שאם אתה מחבר לתיקייה שכבר קיימת, התיקייה ריקה.
צור שני תיקיות עבור המינטים שלך. הרץ את הפקודה הבאה כדי ליצור את הראשון::
ואז הרץ את הפקודה הבאה כדי ליצור את השני::
עכשיו שיש לך מיקום לשים את השיתופים המרוחקים ופתחת את הגדרות האש, אתה יכול להחביר את השיתופים על ידי השימוש בכתובת ה־IP של השרת שלך, שבמדריך זה היא 203.0.113.0
:
הפקודות האלו יחבירו את השיתופים מהמחשב המארח אל מחשב הלקוח. תוכל לוודא במספר דרכים שהם נחברו בהצלחה. תוכל לבדוק את זה באמצעות פקודת mount
או findmnt
, אך df -h
מספקת פלט קריא יותר שמדגים איך שימוש בדיסק מוצג באופן שונה עבור השיתופים של NFS:
OutputFilesystem Size Used Avail Use% Mounted on
udev 480M 0 480M 0% /dev
tmpfs 99M 5.6M 94M 6% /run
/dev/vda1 25G 1.3G 23G 6% /
tmpfs 493M 0 493M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 493M 0 493M 0% /sys/fs/cgroup
/dev/vda15 105M 4.4M 100M 5% /boot/efi
tmpfs 99M 0 99M 0% /run/user/1000
203.0.113.0:/var/nfs/general 25G 1.3G 23G 6% /nfs/general
203.0.113.0:/home 25G 1.3G 23G 6% /nfs/home
שני השיתופים שחברת מופיעים בתחתית. מכיוון שהם נחברו מאותו מערכת קבצים, הם מציגים את אותו שימוש בדיסק. כדי לבדוק כמה מקום פועל אכן תחת כל נקודת ההתקן, השתמש בפקודת שימוש בדיסק du
ובנתיב של התקן. הדגל -s
מספק סיכום של השימוש במקום להצגת השימוש עבור כל קובץ. הדגל -h
מדפיס פלט קריא לקריאת אדם:
Output44K /nfs/home
זה מראה לך שהתוכן של ספריית הבית כולה משתמשת במרווח זמין של רק 44 קילובייט.
שלב 6 — בדיקת גישה ל-NFS
הבא, בדוק גישה לשיתופי המשאבים על ידי כתיבה של משהו לכל אחד מהם.
דוגמה 1: השיתוף למטרות כלליות
ראשית, כתוב קובץ בדיקה לשיתוף /var/nfs/general
:
לאחר מכן, בדוק את בעלותו:
Output-rw-r--r-- 1 nobody nogroup 0 Feb 7 23:53 /nfs/general/general.test
כיוון שהרכבת את הנפח הזה בלי לשנות את ההתנהגות המותרת של NFS ויצרת את הקובץ כמשתמש root של מכונת הלקוח דרך פקודת ה-sudo, בעלות הקובץ ברירת המחדל היא nobody:nogroup. מנהלי מערכת של הלקוח לא יוכלו לבצע פעולות מנהליות טיפוליות, כמו שינוי בעלים של קובץ או יצירת ספרייה חדשה עבור קבוצת משתמשים, בשיתוף נטען על ידי NFS זה.
דוגמה 2: השיתוף של תיקיית הבית
כדי להשוות את ההרשאות של השיתוף למטרות כלליות עם השיתוף של תיקיית הבית, צור קובץ ב-/nfs/home
באותו אופן:
אז נבדוק את בעלות הקובץ:
Output-rw-r--r-- 1 root root 0 Feb 7 23:56 /nfs/home/home.test
יצרת home.test
כ root באמצעות פקודת sudo
, בדיוק באותה דרך שיצרת את קובץ general.test
. אולם, במקרה זה הוא שייך ל־root מכיוון שהתעלמת מההתנהגות הברירת מחדל כאשר ציינת את האפשרות no_root_squash
על ה־mount הזה. זה מאפשר למשתמשי root במכונת ה־client לפעול כ־root ומשפר את הניהול של חשבונות המשתמש באופן משמעותי. באותו הזמן, זה אומר שאין צורך לתת למשתמשים אלו גישה של root על ה־host.
שלב 7 — הרכבת ספריות NFS רחוקות בעת האתחול
ניתן להרכיב את חלוקות ה־NFS הרחוקות באופן אוטומטי בעת האתחול על ידי הוספתן לקובץ /etc/fstab
במכונת ה־client.
פתח את הקובץ הבא עם הרשאות root בעורך הטקסט המועדף עליך:
בסופו של הקובץ, הוסף שורה עבור כל אחת מהחלוקות שלך, דוגמת הבאה:
. . .
203.0.113.0:/var/nfs/general /nfs/general nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
203.0.113.0:/home /nfs/home nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
הערה: ניתן למצוא מידע נוסף על האפשרויות המצויות כאן בדף הרשומות של NFS. ניתן לגשת אליו על ידי הרצת הפקודה הבאה:
השרת של הלקוח ירכיב באופן אוטומטי את המחלקות המרוחקות בעת האתחול, אם כי ייתכן שידורג בזמן התחברות והמניות יהיו זמינות.
שלב 8 — הורדת מנייה מרוחקת של NFS
אם אינך רוצה יותר שהספרייה המרוחקת תירכב במערכת שלך, תוכל להוריד אותה מההרכבה על ידי יציאה ממבנה הספרייה של המנייה והסרת ההרכבה.
ראשית, שנה לתיקיית הבית:
לאחר מכן הורד את /nfs/home
. שים לב שהפקודה נקראת umount
ולא unmount
כפי שתיכול לצפות:
בנוסף, הורד את /nfs/general
:
זה יסיר את המניות המרוחקות, משאיר רק את האחסון המקומי שלך נגיש:
Output
Filesystem Size Used Avail Use% Mounted on
udev 480M 0 480M 0% /dev
tmpfs 99M 5.5M 94M 6% /run
/dev/vda1 25G 1.3G 23G 6% /
tmpfs 493M 0 493M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 493M 0 493M 0% /sys/fs/cgroup
/dev/vda15 105M 4.4M 100M 5% /boot/efi
tmpfs 99M 0 99M 0% /run/user/1000
אם ברצונך גם למנוע מהם להיות מרוכבים מחדש באתחול הבא, ערוך את /etc/fstab
והסר את השורה או הערה עליה על ידי הוספת תו #
בתחילת השורה. ניתן גם למנוע הרכבה אוטומטית על ידי הסרת האפשרות auto
, שתאפשר לך להרכיב אותו באופן ידני.
מסקנה
במדריך זה, יצרת יחידת NFS והדגשת את כמה מההתנהגויות העיקריות של NFS על ידי יצירת שתי הרכבות NFS שונות, ששיתפת את עם לקוח ה-NFS שלך. אם אתה מחפש ליישם את NFS בייצור, חשוב לשים לב שהפרוטוקול עצמו אינו מוצפן. במקרים שבהם אתה שותף קבצים על ידי רשת פרטית, זה עשוי שלא להיות בעיה. במקרים אחרים, VPN או סוג אחר של טונל מוצפן יהיה נדרש כדי להגן על הנתונים שלך. שים לב שבדרך כלל זה מביא להפחתה משמעותית בביצועים. אם ביצועים הוא בעיה, שקול להשתמש ב-SSHFS.
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nfs-mount-on-ubuntu-18-04