היסטוריית גירסאות | ||
---|---|---|
גירסה 1.0 | 06-04-2007 | xx |
הומר לפורמאט וויקי |
כל הזכויות שמורות © 2007, נדב מבור, הרשות ניתנת להעתיק, לשנות ולהפיץ מדריך זה תחת התנאים של רשיון ה-GFDL
Linux הוא סימן מסחרי רשום של Linus Torvalds.
הכותב אינו נושא באחריות עבור שימוש ברעיונות, דוגמאות ומידע שבמדריך. השימוש הוא באחריות הקורא בלבד. המדריך עשוי להחיל טעויות ופרטים לא נכונים, שהשימוש בהם עשוי להיות מזיק למחשבך. למרות הסבירות הנמוכה, הכותב אינו לוקח כל אחריות
כל מי שמריץ יותר ממכונת יוניקס / לינוקס אחת ברשת המקומית, ולא יודע להשתמש ב NFS, עשוי למצוא את המדריך הזה כרלוונטי עבורו.
בגדול, nfs הוא שירות שמאפשר למפות תקיות / מחיצות ממכונה אחת במכונה אחרת כלשהי ברשת.
המיפוי מאפשר למכונה שמריצה את ה client לעבוד מול הקבצים של המכונה השניה, כאילו היו מקומיים (הקבצים ממופים תחת תקיה כלשהי, בדיוק כמו שמממפים מחיצות / דיסקים קשיחים על מערכת היוניקס).
ניתן להתקין קליינט של NFS גם במכונת חלונות, אבל במקרים של שימוש בחלונות ברשת, במקרים רבים נעדיף לעבוד עם SAMBA שכן היא משתמשת בפרוטוקולים שחלונות מכירה בלי תוכנות צד שלישי.
מעבר לזה, ה NFS הוא שירות מאוד פשוט ומהיר , ולפיכך קל מאוד להגדיר אותו לשימוש מיידי, ובמקרים רבים נעדיף אותו בשל כך על השימוש ב SAMBA שדורשת עבודת הגדרה גדולה יחסית לפני הפעלה.
ה NFS, Network File System היא מערכת לשיתוף קבצים של מערכות היוניקס ושל מערכות הגנו/לינוקס, והיא מקבילה ל SMB/CIFS של חלונות (אשר בגנו/לינוקס ניתן לממש בעזרת השרת של samba).
השימוש ב NFS מאפשר בקלות רבה יחסית, לשתף תקיה / מחיצה של מחשב כלשהו (מעתה נקרא לו “שרת”) אל מול מחשב אחר (שמעתה נקרא לו “לקוח”).
ברגע ששיתפנו תקיה מסויימת, נותר רק למפות אותה (בעזרת השימוש ב mount בצורה סטנדרית ביותר) על הלקוח.
אם השירות רץ כראוי, הלקוח יכול לגשת לתקיה הרשתית כאילו היתה מקומית (כמובן, שמאחורי הקלעים הכל נעשה ברמת רשת).
הערה חשובה:
שירות ה NFS, כמו שירותים אחרים לשיתוף קבצים ברשת, היא שירות מאוד בעייתי מבחינת אבטחה, ולפיכך,ואפשר לראות בזה פק”ל אם תשאלו אותי, חשוב מאוד לסגור את השירות כלפי הרשת החיצונית.
אני ממליץ על סגירה של השירות גם ברמת firewall, וגם כפי שיוסבר בהמשך.
אם השירות לא נמצא בשימוש, מיותר להריץ אותו בלי סיבה, וכדאי לסגור אותו לחלוטין.
זכור: שרת NFS פתוח לאינטרנט, מהווה פרצת אבטחה חמורה ביותר!
כדי להתקין מערכת שרת / לקוח צריכות להיות מותקנות לפחות שני החבילות הבאות:
בהפצות כגון ראד האט, במקום החבילה nfs-utils-client צריך להתקין את החבילה nfs-client.
החבילות הנ”ל זמינות בתור rpm בדיסק של ההתקנה, ככה שאין סיבה שההתקנה תהיה מסובכת מדי.
ה NFS מבוסס על כמה שרותים ותהליכים שקשורים אחד בשני כמו Portamap.
בתור התחלה נפעיל את ה NFS ואז נבדוק אם כל השרותים הרלוונטים עלו בצורה תקינה.
נתחיל ב:
service portmap start service nfs start
אלו הפקודות שצריך להריץ כדי להפעיל לראשונה את השירות.
כמו כל שירות אחר במערכת, נוכל להשתמש ב chckonfig או ntsysv (הדרך המהירה יותר) לקבע את ההפעלה של המערכת אוטומטית בעת האתחול של המחשב.
כדי לבדוק שהשירות רץ, נבצע מספר בדיקות. ראשית, נבדוק ש nfsd רץ (השירות):
[root@localhost 1]# ps -A |grep nfs 1283 ? 00:00:00 nfsd 1286 ? 00:00:00 nfsd 1287 ? 00:00:00 nfsd 1288 ? 00:00:00 nfsd 1289 ? 00:00:00 nfsd 1290 ? 00:00:00 nfsd 1291 ? 00:00:00 nfsd 1292 ? 00:00:00 nfsd
נבדוק שה rpc רץ:
[root@localhost 1]# ps -A |grep rpc 1007 ? 00:00:00 rpc.statd 1285 ? 00:00:00 rpciod 1304 ? 00:00:00 rpc.mountd
ולבסוף נבדוק שמכלול השירותים עובד כראוי, על ידי שימוש ב rpcinfo, אנחנו אמורים לקבל פלט שנראה בערך ככה:
[root@localhost 111]# rpcinfo -p program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100021 1 udp 32776 nlockmgr 100021 3 udp 32776 nlockmgr 100021 4 udp 32776 nlockmgr 100024 1 udp 32780 status 100024 1 tcp 35075 status 100011 1 udp 626 rquotad 100011 2 udp 626 rquotad 100011 1 tcp 629 rquotad 100011 2 tcp 629 rquotad 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100005 1 udp 32782 mountd 100005 1 tcp 35190 mountd 100005 2 udp 32782 mountd 100005 2 tcp 35190 mountd 100005 3 udp 32782 mountd 100005 3 tcp 35190 mountd
אם לא עלינו קיבלנו פלט שאינו דומה או את הודעת השגיאה הבאה:
rpcinfo: can't contact portmapper: RPC: Remote system error - Connection refused
סביר להניח שהשירותים לא הופעלו ויש להפעיל אותם שוב, כלומר:
[root@localhost root]# /etc/init.d/portmap restart Stopping portmap services: [FAILED] Starting portmapper: [ OK ] [root@localhost 111]# /etc/init.d/nfs restart Stopping NFS mountd: [FAILED] Stopping NFS daemon: [FAILED] Stopping NFS quotas: [FAILED] Stopping NFS services: [FAILED] Starting NFS services: [ OK ] Starting NFS quotas: [ OK ] Starting NFS daemon: [ OK ] Starting NFS mountd: [ OK ]
אם יש בעיה בעלית אחד השירותים או יותר, אין מנוס מלהביט בקבצי הלוג הרלוונטים במערכת, אבל בד”כ אין סיבה טובה לבעיות, למרבה השמחה, והנסיון שלי מלמד שכמעט תמיד המערכת תעבוד ללא בעיות מיותרות.
הקובץ העיקרי של שרת ה nfs יושב כצפוי תחת etc/, הקובץ הוא:
/etc/exports
הקובץ הזה מכיל כמה שורות. כל שורה היא רשומה של שיתוף ספריה. מבנה תחביר טפוסי של שורה בקובץ נראה ככה:
/home/nadav 192.168.0.10(rw) 192.168.0.11(ro)
ובעברית מה זה אומר? פשוט מאוד !!
כל שורה מתחלקת ל 2 חלקים עיקריים: צד שמאל זה הצד של השרת וצד ימין זה הצד של הלקוחות.
בצד של השרת יש את המיקום של הסיפריה שאנחנו רוצים לשתף (במקרה הזה את ספרית הבית שלי שהיא home/nadav) ובצד השני לאיזה לקוחות מותר לגשת לשיתוף ובאיזה הרשאה (קריאה או קריאה וכתיבה).
במיקרה שבדוגמא, מותר רק לשתי מכונות לגשת לספריה הזאת אחת בעלת IP שמסתיים ב10 ומותר לה לקרוא את התוכן של הספריה ולכתוב והשניה שהIP שלה ניגמר ב 11 ולה מותר רק לקרוא את התוכן של הסיפריה.
בנוסף אם יש DNS פעיל אפשר להשתמש בשם של המכונה במקום הIP אני אני ממליץ על זה פחות (זיהוי על פי שם הוא פחות מאובטח ואמין מאשר IP).
בנוסף אפשר להשתמש בטווח של כתובות במקום בIP בודד (למקרה שיש הרבה מחשבים שאמורים לגשת לספריה).
במקרה כזה במקום IP נכתוב את הטווח כתובות, לדוגמא אם היתי רוצה לאפשר לכל המחשבים אצלי בבית לגשת לספריה אז הייתי רושם בקובץ את השורה הבאה:
/home/nadav 192.168.0.0/255.255.255.0(ro)
במקרה הזה כול המחשבים שהIP שלהם נע בין 192.168.0.1 ל-192.168.0.254 ב-netmask של 255.255.255.0 יוכלו לגשת לספריה ולקרוא ממנה.
האופציות החשובות שצריך לזכור בקובץ הזה הם:
נקודה חשובה היא שאחרי כל שינוי שבוצע בקובץ צריך לגרום למערכת לקרוא את הקובץ מחדש באמצעות עצירת השירות והעלאה שלו מחדש. יש דרך יותר אלגנטית לעשות את זה באמצעות הפקודה:
exportfs -ra
אחרי שהגדרנו את ה NFS לשתף קבצים, חשוב קצת לשפר את האבטחה.
כמו שכבר אמרנו, שירות זה בהחלט אינו נחשב לשירות מאובטח, ולפיכך, אנחנו נשתמש במנגנון שמערכת הגנו/לינוקס נותנת לנו על מנת לשפר את האבטחה, ולמנוע אפשרות של התחברות אל השרת ממחשבים לא רצויים.
etc/hosts.allow/ ו etc/hosts.deny/ אלו לא קבצים שקשורים באופן ישיר ל NFS, אלה הם קבצי מערכת שאחראים על הגישה למערכת לפני שמשנים אותם חובה לגבות את התוכן שלהם (אפשר להעזר ב cp כמובן, להעתקתם ושמירת עותק שלהם)!!
קצת רקע :
כאשר מתחברים לשרת GNU/Linux לצורך התחברות לשירות כלשהו (וזה לא משנה סוג השירות, למשל SSH POP3 FTP…) המערכת בודקת בצורה היררכית אם מותר לה לקבל בכלל פניות מה IP הזה ורק אז היא בודקת אם היא יכולה לטפל בפניה.
הבדיקה נערכת בצורה הררכית (כלומר בשלבים):
זה בכל אופן ההגדרה הסטנדרטית ברוב המערכות, למרות שיש מערכות שמוגדרות ההפך כלומר אם הIP לא נימצא ב hosts.allow וגם לא בhosts.allow אז הגישה נשללת מידית והלקוח נדחה.
טוב ונחזור לעסק ! בשביל מה לעזאזל אנחנו רוצים לשחק אם הקבצים האלה?
בגלל שהמנגנון זיהוי של הNFS הוא לא מספק, וכדי להגן על הספריות בצורה הטובה ביותר האפשרית, אנחנו נשתמש במנגנון של ה hosts.allow ו hosts.deny בשביל לשפר קצת את רמת האבטחה ולהיות בטוחים שאף חכמולוג מחוץ לרשת שלנו לא יוכל לשחק לנו עם ה - NFS.
בתור התחלה, נשים בקובץ hosts.deny שורה שתמנע מכולם לגשת ל PORTMAP (זה השרות שמולו נעשית הפעילות של NFS) השורה היא:
portmap:ALL
כלומר אין גישה לאף אחד !! כלומר אף אחד לא יוכל להתחבר לNFS נכון? כרגע כן, אז נוסף עוד שורה ל hosts.allow בשביל לסדר את הבעיה שיצרנו:
portmap: 192.168.0.10 , 192.168.0.11
אם נחזור ל”תרשים זרימה” מההסבר, נראה שאם מישהו, למשל אם כתובת IP 192.168.0.13,ינסה להתחבר אז בבדיקה של שלב א הוא לא ימצא והמחשב ימשיך לשלב ב, שם נשללת הגישה לכולם, אז הוא “יבעט אותו” החוצה, אבל אם לדוגמה מחשב עם IP של 192.168.0.10 ינסה להכנס אז כבר בשלב א הוא יקבל גישה ויורשה להתחבר למערכת ה NFS.