איך להגדיר ערוץ NFS על Ubuntu 18.04

הקדמה

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 במהלך זה, רענן את אינדקס החבילות המקומי לפני ההתקנה:

  1. sudo apt update

לאחר מכן, התקן את החבילה:

  1. sudo apt install nfs-kernel-server

כששתי החבילות הללו מותקנות, החליפו לשרת הלקוחות.

על הלקוח

על שרת הלקוחות, התקן חבילה בשם nfs-common, שמספקת פונקציונליות של NFS מבלי לכלול רכיבי שרת. שוב, רענן את אינדקס החבילות המקומי לפני ההתקנה כדי לוודא שיש לך מידע מעודכן:

  1. sudo apt update

לאחר מכן, התקן את החבילה:

  1. sudo apt install nfs-common

עכשיו ששני השרתים מכילים את החבילות הנדרשות, תוכל להתחיל להגדיר אותם.

שלב 2 — יצירת ספריות שיתוף על המארח

אנו מתכוונים לשתף שתי ספריות נפרדות עם הגדרות הגדרות שונות כדי להדגיש שני אופנים מרכזיים בהגדרת ההתקנות של NFS ביחס לגישה של המשתמש הראשי.

הסופרמשתמשים יכולים לעשות כל דבר בכל מקום במערכת שלהם. אך ספריות שמונכות על ידי NFS אינן חלק מהמערכת שבה הן מחוברות, ולכן, לפי ברירת מחדל, שרת ה-NFS מסרב לבצע פעולות שדורשות הרשאות של סופרמשתמש. ההגבלה המוגדרת כברירת מחדל זו אומרת כי סופרמשתמשים ב-לקוח לא יכולים לכתוב קבצים כמו root, להקצות מחדש בעלות או לבצע כל משימה אחרת של סופרמשתמש על ההרכבה NFS.

לפעמים, אף על פי כן, יש משתמשים מהימנים במערכת ה-לקוח שצריכים לבצע את הפעולות הללו על מערכת הקבצים המחוברת אך שאין להם צורך בגישת סופרמשתמש על ה-מארח. ניתן להגדיר את שרת ה-NFS כך שיאפשר זאת, אך זה מוסיף גורם של סיכון, מאחר שמשתמש כזה יכול להשיג גישת root לכל המערכת של ה-מארח.

דוגמה 1: ייצוא הרכבה כללית

בדוגמה הראשונה, תיצור הרכבת NFS כללית שמשתמשת בהתנהגות ברירת המחדל של NFS כדי להקשות על משתמש עם הרשאות root על המכונה הלקוח לפעול עם המארח באמצעות הרשאות הסופרמשתמש ב-הלקוח. ניתן להשתמש במשהו דומה לכך כדי לאחסן קבצים שהועלו באמצעות מערכת לניהול תוכן או כדי ליצור מקום למשתמשים לשיתוף קבצי פרוייקט.

ראשית, יש ליצור ספרייה משותפת:

  1. sudo mkdir /var/nfs/general -p

מכיוון שאתה יוצר את זה עם sudo, התיקייה שייצרת שייכת למשתמש ה-root של המארח:

  1. ls -la /var/nfs/general
Output
total 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 כאמצעי אבטחה. לכן, עליך לשנות את בעלות התיקייה כך שתתאים לכרטיסיות אלה:

  1. sudo chown nobody:nogroup /var/nfs/general

אתה מוכן כעת לייצא את התיקייה הזו.

דוגמה 2: יצוא התיקייה הביתית

בדוגמה השנייה שלנו, המטרה היא להעביר את תיקיות הבית של המשתמשים השמורות בשרת המארח ולהעבירם לשרתי הלקוח, בעוד שמאפשרים למנהלים אמינים של אלה שרתי הלקוח את הגישה שהם זקוקים לה לניהול נוח של המשתמשים.

כדי לעשות זאת, תייצא את התיקייה /home. מכיוון שהיא כבר קיימת, אין צורך ליצור אותה מחדש. אין לשנות את ההרשאות גם. אם תעשה זאת, זה יכול להביא לסוגים שונים של בעיות לכל מי שיש לו תיקייה בית על מחשב המארח.

שלב 3 — הגדרת ייצואי NFS בשרת המארח

אחרי כך, נכנס לקובץ התצורה של NFS כדי להגדיר את השיתוף של המשאבים הללו.

על המכונה מארח, פתח את קובץ /etc/exports בעורך טקסט שתעדיף עם הרשאות root. כאן נשתמש ב־nano:

  1. sudo nano /etc/exports

הקובץ מכיל הערות המציינות את המבנה הכללי של כל שורת התצורה. התחביר הוא כך:

/etc/exports
directory_to_share    client(share_option1,...,share_optionN)

תצטרך ליצור שורה לכל אחת מהתיקיות שברצונך לשתף. מאחר שבדוגמה שלנו לקוח יש כתובת IP של 203.0.113.24, השורות שלנו יראו כך. ודא שאתה משנה את כתובת ה־IP לזו של הלקוח שלך:

/etc/exports
/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 עם הפקודה הבאה:

  1. sudo systemctl restart nfs-kernel-server

לפני שתוכל בכלל להשתמש בשיתופים החדשים, עליך לוודא שתנועה לשיתופים מאושרת על ידי כללי הגנה בגיאטה.

שלב 4 — התאמת הגיאטה במארח

ראשית, בדוק את מצב הגיאטה כדי לוודא אם היא מופעלת ואם כן, בדוק מה מותר כרגע:

  1. sudo ufw status
Output
Status: 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 של הלקוח שלך:

  1. sudo ufw allow from 203.0.113.24 to any port nfs

ניתן לאמת את השינוי על ידי הרצת הפקודה הבאה:

  1. sudo ufw status

עליך לקבל רשימת תעבורה מותרת מפורט 2049 בפלט:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere 2049 ALLOW 203.0.113.24 OpenSSH (v6) ALLOW Anywhere (v6)

זה מאשר ש־UFW תרשום רק תעבורת NFS בפורט 2049 מהמכונה שלך של לקוח.

שלב 5 — יצירת נקודות העציבה והתקנת ספריות על הלקוח

כעת שהשרת מוגדר ומספק את השיתופים שלו, תכין את הלקוח שלך.

כדי להפוך את השיתופים המרוחקים לזמינים על הלקוח, עליך לעצבב את הספריות על המארח שברצונך לשתף לספריות ריקות על הלקוח.

הערה: אם ישנם קבצים ותיקיות בנקודת העיגון שלך, הם יהפכו להיות מוסתרים מיד לאחר שתחבר את שיתוף ה־NFS. כדי למנוע אובדן של קבצים חשובים, וודא שאם אתה מחבר לתיקייה שכבר קיימת, התיקייה ריקה.

צור שני תיקיות עבור המינטים שלך. הרץ את הפקודה הבאה כדי ליצור את הראשון::

  1. sudo mkdir -p /nfs/general

ואז הרץ את הפקודה הבאה כדי ליצור את השני::

  1. sudo mkdir -p /nfs/home

עכשיו שיש לך מיקום לשים את השיתופים המרוחקים ופתחת את הגדרות האש, אתה יכול להחביר את השיתופים על ידי השימוש בכתובת ה־IP של השרת שלך, שבמדריך זה היא 203.0.113.0:

  1. sudo mount 203.0.113.0:/var/nfs/general /nfs/general
  2. sudo mount 203.0.113.0:/home /nfs/home

הפקודות האלו יחבירו את השיתופים מהמחשב המארח אל מחשב הלקוח. תוכל לוודא במספר דרכים שהם נחברו בהצלחה. תוכל לבדוק את זה באמצעות פקודת mount או findmnt, אך df -h מספקת פלט קריא יותר שמדגים איך שימוש בדיסק מוצג באופן שונה עבור השיתופים של NFS:

  1. df -h
Output
Filesystem 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 מדפיס פלט קריא לקריאת אדם:

  1. du -sh /nfs/home
Output
44K /nfs/home

זה מראה לך שהתוכן של ספריית הבית כולה משתמשת במרווח זמין של רק 44 קילובייט.

שלב 6 — בדיקת גישה ל-NFS

הבא, בדוק גישה לשיתופי המשאבים על ידי כתיבה של משהו לכל אחד מהם.

דוגמה 1: השיתוף למטרות כלליות

ראשית, כתוב קובץ בדיקה לשיתוף /var/nfs/general:

  1. sudo touch /nfs/general/general.test

לאחר מכן, בדוק את בעלותו:

  1. ls -l /nfs/general/general.test
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 באותו אופן:

  1. sudo touch /nfs/home/home.test

אז נבדוק את בעלות הקובץ:

  1. ls -l /nfs/home/home.test
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 בעורך הטקסט המועדף עליך:

  1. sudo nano /etc/fstab

בסופו של הקובץ, הוסף שורה עבור כל אחת מהחלוקות שלך, דוגמת הבאה:

/etc/fstab
. . .
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. ניתן לגשת אליו על ידי הרצת הפקודה הבאה:

  1. man nfs

השרת של הלקוח ירכיב באופן אוטומטי את המחלקות המרוחקות בעת האתחול, אם כי ייתכן שידורג בזמן התחברות והמניות יהיו זמינות.

שלב 8 — הורדת מנייה מרוחקת של NFS

אם אינך רוצה יותר שהספרייה המרוחקת תירכב במערכת שלך, תוכל להוריד אותה מההרכבה על ידי יציאה ממבנה הספרייה של המנייה והסרת ההרכבה.

ראשית, שנה לתיקיית הבית:

  1. cd ~

לאחר מכן הורד את /nfs/home. שים לב שהפקודה נקראת umount ולא unmount כפי שתיכול לצפות:

  1. sudo umount /nfs/home

בנוסף, הורד את /nfs/general:

  1. sudo umount /nfs/general

זה יסיר את המניות המרוחקות, משאיר רק את האחסון המקומי שלך נגיש:

  1. df -h
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