כאשר מדובר בבחירת פרוטוקול לשיתוף קבצים דרך הרשת, תקרא בדרך כלל על מונחי SMB ו־CIFS בממשקי תוכנה ותיעוד. חלק מהמשתמשים חושבים ש־SMB ו־CIFS הם אותו דבר, ולזהות את ההבדל בצורה ברורה עשוי להיות מורכב. אך בואו נבחן למה CIFS לא יכול לשמש כתיאון ל־SMB. למדו על ההבדלים בין פרוטוקולי SMB ל־CIFS וכיצד להשתמש במונחים.
מהו SMB?
SMB, או Server Message Block, הוא פרוטוקול רשת הפועל בשכבת היישום של מודל התקשורות OSI. SMB משמש לספק גישה משותפת למשאבים דרך הרשת. פרוטוקול ה־SMB משמש באופן נרחב לשיתוף קבצים בשרתי קבצים, לשיתוף קבצים בין מחשבים משתמשים, ולהעתיק קבצים בין מחשבים.
בנוסף לעיבוד קבצים, מקרה השימוש השני של SMB הוא הודעות והדפסה (עסקאות רחוקות מטרה כללית), כמו גם עיון במחשבים ברשת. IBM פיתחה את SMB בשנת 1983, ומאז הפרוטוקול שופר מספר פעמים.
מהו שיתוף קבצים SMB?
שיתופי קבצים SMB הם ספריות במארח מרוחק שנגישות באמצעות פרוטוקול ה־SMB. הם מוגדרים בשרתי קבצים, וניתן להגדיר גישה לקריאה וכתיבה לשיתופים אלו. יכול להיות לשרת קבצים אחד מספר שיתופי קבצים SMB.
איך SMB פועל: מה עושה SMB?
SMB פועל על פי עקרון הרשת לקוח־שרת. הפרוטוקול משתמש בסט של חבילות נתונים המכילות בקשה שנשלחת על ידי לקוח או תשובה שנשלחת על ידי שרת. לקוחות יכולים להתחבר לשרת על ידי שימוש בכתובת IP או שם מארח. חבילות הנתונים של SMB יכולות להיות מסווגות כ:
- חבילות בקרת ההתקן, שמקימות/מפסיקות חיבורים לשיתופי קבצים
- חבילות גישה לקבצים, שכפי שהשם מרמז, נגישות לשיתופי הקבצים ולניהול הקבצים
- חבילות הודעה כלליות
SMB מקים חיבור לאחר הקמת חיבור והשלמת אימות. לאחר מכן, ניתן להעביר הודעות SMB באמצעות חיבור זה. בעת הקמת חיבור, לקוח SMB שולח רשימה של היכולות שלו (היכולות תלויות בגרסת ה-SMB של הלקוח).
פרוטוקול SMB יכול לעבוד:
- ישירות דרך TCP באמצעות פתח 445 (ללא NetBIOS) – זוהי התקפית המודרנית.
- דרך ממשק ה-NetBIOS באמצעות פתחי UDP 137 ו-138 ופתחי TCP 137 ו-139 – זוהי התקפית הירושה המשמשת עד ל-Windows 2000. הגרסאות הראשונות של SMB השתמשו ב-NetBIOS מעל TCP/IP לתחבורה.
פרוטוקול SMB תומך באיחוד הודעות, כלומר, קיבוץ הודעות מרובות ושליחתן בהעברה אחת כדי לשפר את הביצועים.
הפונקציונליות הנוספת כוללת מנגנון נעילת קבצים כדי להגן על קבצים משותפים כאשר משתמשים מרביים פותחים את אותו הקובץ. הנעילת קבצים מאפשרת למנוע מנתונים להיות נכתבים על ידי משתמשים מרביים בו זמנית ולגרום לאי עקביות בנתונים בקובץ.
IPC (חיבור בין תהליכים) ידוע גם כחיבור סשן ריק. שיתוף ה-IPC$ שנוצר על ידי Windows משמש לחיבורים זמניים בין לקוחות ושרתים. השיתוף המוסתר הזה נוצר לשיתוף נתונים שאינם יכולים להיות מתוייגים כקבצים/תיקיות ומדפסות, לדוגמה, משתמשים ורשימת שיתופים.
מערכות Windows מכילות לקוח ושרת SMB טבעיים. אולם, גרסאות הלקוח של Windows מוגבלות במספר המשתמשים שיכולים להתחבר למארח, להבדיל מגרסאות שרת של Windows, שאין להן הגבלות כאלו.
- Windows XP ו-Vista – מקסימום 10 חיבורים סופרים
- Windows 7 ו-Windows 10 – מקסימום 20 חיבורים סופרים
שרת SMB על Linux מותקן על ידי הגדרת Samba, שהיא יישום שרת SMB חינמי עבור Linux. שימו לב ש-Samba גם מאפשרת לך להצטרף ל-Linux לדומיין של Active Directory ומאפשרת ל-Linux לפעול כבקר דומיין. תוכנת לקוח SMB זמינה גם על Linux (בחינם) ועל מערכות הפעלה אחרות.
מהו CIFS?
CIFS, או מערכת הקבצים באינטרנט המשותפת, היא יישום או דיאלקט מסוים של SMB שפותח על ידי Microsoft ב-1996 לאחר שחרור Windows 95. דיאלקט הוא גרסה ולא פרוטוקול נפרד עצמאי. דיאלקט הוא סט של חבילות הודעות שנשלחות/מתקבלות לתקשורת בין מארחים שמגדיר גרסת פרוטוקול מסוימת. CIFS אינה מערכת קבצים, למרות השמה.
מפרט פרוטוקול CIFS מבוסס על הפרוטוקול המקורי של SMB אך עם תכונות נוספות מוסיפות על ידי Microsoft. Microsoft מיישמת חיבורים ישירים דרך TCP ופורט 445 בלי להשתמש ב-NetBIOS מעל TCP (שנמצא בשימוש ביישומי SMB 1 הראשונים). CIFS היא מימוש של SMB 1 ולא פרוטוקול שיתוף קבצים נפרד.
דיאלקטי פרוטוקול SMB
כאשר אנו מדברים על המימוש SMB1 של Microsoft, אנו יכולים להשתמש במונח CIFS. בכל שאר המקרים, ובכלל, SMB הוא המונח הנכון להתייחס לפרוטוקול הרשת הזה. בואו נסתכל קרוב יותר על גרסאות ה-SMB שיצאו אחרי CIFS כדי להבין בצורה טובה יותר את ההבדל בין CIFS לשטחים (גרסאות) אחרים של SMB.
SMB 2.0
Microsoft שחררה את SMB 2.0 (או SMB2) ב-2006 עם Windows Vista. גרסה זו של SMB היא יותר אמינה מאשר SMB 1.0/CIFS, וזו אינה CIFS. מספר הפקודות הנדרשות כדי להעביר קבצים נמוך ממעל 100 ל-20. הביצועים גבוהים יותר עקב פעולות עיבוד של צינור, כלומר, היכולת לשלוח בקשה נוספת לפני קבלת התשובה לבקשה הקודמת. אריזת פעולות מרובות לבקשה אחת מפחיתה את מספר הבקשות ללקוח, מה שמשפר את הביצועים.
SMB 2.1
SMB 2.1 מספק שיפורים לא נכונים בביצועים ומנגנוני חסימה בהשוואה ל-SMB 2.0. גרסת הפרוטוקול הזו הושקה עם Windows 7 ו-Windows Server 2008 R2.
SMB 3.0
בתחילה, גרסת הפרוטוקול הזו נקראה SMB 2.2, אך הוחלט לשנות את שמה ל-SMB 3.0 עם Windows 8. גרסה זו של SMB 3.0:
- הוסיפה את SMB Direct (גישה ישירה לזיכרון), SMB Multichannel ו-SMB Transport Failover
- שיפרה את האבטחה
- הוסיפה תמיכה בהצפנת קצה לקצה
- שיפרה ביצועים של הרשת על ידי הפחתת התיחוש
SMB 3.0.2
SMB 3.0.2 או 3.02 זמין מאז Windows 8.1 ו- Windows Server 2012 R2. בגרסה זו, ניתן לכבות את התאימות של SMB 1.0 כדי לשפר את האבטחה.
SMB 3.1.1
גרסה זו התפתחה החל מ- Windows 10 ו- Windows Server 2016. השיפורים כוללים הצפנה טובה יותר (AES 128 GCM ו- AES 128 CCM) ו- SHA-512 עבור בדיקות תקינות של אינטגרציה לפני אימות.
SMB ב- Windows ו- Microsoft Server
SMB זמין ב- Windows החל מ- Windows 3.1 (Windows for Workgroups). גרסאות SMB ותאימות עבור גרסאות שונות של Windows מוסברות בטבלה.
עמודות ושורות מכילות גרסאות Windows שיכולות להפעיל לקוח SMB או שרת SMB (עמודות ושורות ניתנות להחלפה). תא בחיתוך של עמודה ושורה מציג איזו גרסת פרוטוקול SMB משמשת לתקשורת בין גרסאות Windows הרצויות.
Windows 10
Server 2016 ומע ulier |
Windows 8.1
Server 2012 R2 |
Windows 8
Server 2012 |
Windows 7
Server 2008 R2 |
Windows Vista
Server 2008 |
Win XP, Server 2003 ומע ulier | |
Windows 10
Server 2016 ומע ulier |
SMB 3.1.1 | SMB 3.02 | SMB 3.0 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
Windows 8.1
Server 2012 R2 |
SMB 3.02 | SMB 3.02 | SMB 3.0 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
Windows 8
Server 2012 |
SMB 3.0 | SMB 3.0 | SMB 3.0 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
Windows 7
Server 2008 R2 |
SMB 2.1 | SMB 2.1 | SMB 2.1 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
Windows Vista
Server 2008 |
SMB 2.0 | SMB 2.0 | SMB 2.0 | SMB 2.0 | SMB 2.0 | SMB 1.0 |
Win XP, Server 2003 ומע ulier | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 |
CIFS vs SMB: המקור הסביר לבלבול
בואו נגלה באמצעות דוגמה למה המונחים CIFS ו-SMB עדיין מבלבלים את המשתמשים. כדי לעשות זאת, נניח שאנו משתמשים בשרת קבצים עם שיתוף SMB המוגדר על Windows Server 2019 ומחשב לינוקס המתחבר לשרת קבצים זה דרך פרוטוקול SMB. אובונטו 20.04 היא ההפצה של לינוקס שאנו משתמשים בדוגמה זו. שימו לב שהתצורה זהה עבור אובונטו 22.
יש לנו את התצורה הבאה בסביבותינו:
- Windows Server 2019: 192.168.101.209
- לינוקס אובונטו 20.04: 192.168.101.210
- שיתוף SMB על שרת Windows: \\192.168.101.209\share
ב-Windows Server 2019, פרוטוקול SMB 1.0/CIFS מושבת כברירת מחדל. כדי לבדוק הגדרה זו ולאפשר/לנטר את הלקוח והשרת SMB1.0/CIFS באופן ידני, יש לעבור אל מנהל השרת> הוספת תפקידים ותכונות> תכונות.
אנו שומרים על SMB 1.0/CIFS מושבת במחשב השרת שלנו של Windows Server 2019. זה אומר שמשתמשים ב-SMB 3 כברירת מחדל עם היכולת לעבור ל-SMB 2 לשם התאמה עם לקוחות המשתמשים בגרסאות SMB 2 (ניבים).
הפרוטוקול CIFS מושבת כברירת מחדל בגרסאות מודרניות של Windows כמו Windows 10 למען אבטחה טובה יותר, ואפשר להפעיל אותו באופן ידני כאשר נדרש.
הערה: בשנת 2017, מתקפות כפייה רשתיות עולמיות מסיביות (WannaCry ו-NotPetya) בוצעו באמצעות פגמים לפלטפורמת SMB 1. הפגמים האלה נקראו EternalBlue, EternalRomance ו-EternalChampion. מיקרוסופט הוציאה תיקוני אבטחה למערכות הפעלה שלה החל מ-Windows XP ו-Windows Server 2003, למרות העובדה שה-OSs האלה לא היו גרסה ממומשת באופן רשמי באותה תקופה. מיקרוסופט המליצה על שימוש ב-SMB 2 ו-SMB 3 (תומכת בשליטה של איכות מוקדמת) במקום שימוש ב-SMB 1.0/CIFS.
כפי שצויין לעיל, שמו של שרת SMB עבור Linux הוא Samba (samba היא שם החבילה). אנו משתמשים בשרת SMB ב-Windows. אז אנו לא זקוקים ל-Samba בדוגמה זו, אלא מה שאנו זקוקים לו הוא לקוח SMB עבור Ubuntu Linux.
הלקוח SMB עבור Linux כלול ב־Linux CIFS Utils (cifs-utils הוא שם החבילה). זהו מקור הבלבול. הגרסה הראשונה של הלקוח זה עבור Linux נוצרה בזמן שבו נעשה שימוש רחב ב־SMB 1.0/CIFS. פרוטוקול ה־SMB עודכן, גרסאות SMB 2 ו־3 הושקו, אך השם של לקוח ה־SMB עבור Linux נשמר כמו בעבר, והחבילה הכוללת את לקוח ה־SMB עדיין נקראת CIFS Utils. החבילה cifs-utils אינה חלק מ־samba.
נתחבר מ־Linux באמצעות CIFS Utils לשיתוף SMB הממוקם ב־Windows Server 2019 כדי לגלות האם CIFS עדיין בשימוש. כדי להתקין CIFS Utils, הריצו את הפקודה הבאה עם הרשאות root:
sudo apt-get install cifs-utils
צרו תיקייה שתשמש כנקודת עגינה עבור שיתוף ה־SMB:
mkdir /mnt/share
התחברו לשיתוף הקבצים SMB הממוקם בשרת קבצים Windows מרוחק:
mount.cifs //192.168.101.209/share /mnt/share -o user=administrator
אנו משתמשים בחשבון מנהל מערכת Windows בדוגמה שלנו לצורך חינוך.
CIFS נגד SMB – איזה מהם בשימוש בהפעלה הנוכחית להתחברות לשרת הקבצים? בדקו את גרסת ה־SMB של הלקוחות המחוברים לשיתוף ה־SMB בשרת הקבצים Windows באמצעות הפקודה PowerShell ב־Windows Server 2019:
Get-SmbSession | Select-Object -Property ClientComputerName,ClientUserName,Dialect
כפי שאנו יכולים לראות בפלט של PowerShell, SMB 3.1.1 משמש לחיבור שלנו מ-Ubuntu Linux. SMB 1.0/CIFS אינו משמש כאשר אנו מתחברים עם cifs-utils והפקודה mount.cifs לשרת קבצים מוגדר על Windows Server 2019.
אנו יכולים גם לבדוק את גרסת ה-SMB ב/proc/mounts עם הפקודה cat /proc/mounts ב-Linux. אנו יכולים להשתמש בפקודה הבאה כדי לסנן רק את התוצאות הנחוצות:
cat /proc/mounts | grep cifs
כפי שאנו רואים בפלט, גרסת הפרוטוקול לחיבור לחלק המשותף של הקבצים מסומנת cifs, אך הגרסה המוצגת היא 3.1.1 (vers=3.1.1), שאינה גרסה של CIFS. זו עוד דוגמה לאיך שהמונחים SMB נגד CIFS יכולים להתבלבל.
למעשה, SMB 3.1.1 משמש ולא CIFS. אנו יכולים להוכיח זאת בעזרת שיטה נוספת באמצעות nmap, שהוא כלי תצפית רשת בחינם המשמש לניתוח וטיפול בבעיות.
כדי להתקין nmap ב-Ubuntu בצע את הפקודה כמנהל מערכת:
sudo apt-get install nmap
כדי לסרוק את כל התאמים שקיימים ומחוברים לרשת 192.168.101.0/24 שלנו, אנו משתמשים בפקודה:
nmap --script smb-protocols 192.168.101.0/24
אנו מעוניינים לראות את התוצאה עבור 192.168.101.209, שזו כתובת ה-IP של שרת ה-Windows Server 2019 שלנו שמתפקד כשרת קבצים. יש קישור לחלק הקבצים בשרת זה. בפלט, אנו רואים שהשפות של פרוטוקולי SMB שמתמוך בשרת ה-Windows שלנו הם 2.02, 2.10, 3.00, 3.02 ו-3.11. אין SMB 1.0/CIFS, למרות שהמונח CIFS עדיין משמש בקבצי התצורה ובפקודות של לינוקס.
אנו יכולים להכריח להשתמש ב-CIFS באופן ידני על ידי הוספת הפרמטר vers=1.0 בפקודת mount בלינוקס (בצד הלקוח) לשימוש בפרוטוקול SMB 1.0/CIFS בלבד כאשר מתחברים לחלק קבצים בשרת רחוק.
mount -t cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=1.0
או
mount.cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=1.0
התוצאה היא כדלקמן:
השרת סגר את החיבור באופן פתאומי. זה יכול לקרות אם השרת אינו תומך בגרסת SMB שאתה מנסה להשתמש. גרסת SMB ברירת מחדל השתנתה לאחרונה מ-SMB1 ל-SMB2.1 ומעלה.
תוצאה זו תואמת את התוצאות הקודמות של המחקר שלנו על SMB מול CIFS במערכות הפעלה מודרניות. CIFS אינו בשימוש, ו-SMB 1.0/CIFS מושבת בשרת ה-Windows שלנו.
אם נגדיר אותו לשימוש בהכרח ב-SMB 2.0, אז נוכל להתחבר לשרת (זכור את רשימת שפות SMB המתמוך בשרת ה-Windows Server 2019 שלנו המוצגת בnmap):
mount.cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=2.0
smb:// בשורת ה direcotry ב Linux או מערכות אחרות, יש להשתמש בsmb:// כדי להגדיר את הפרו토קול של SMB כדי להתחבר לשיתוף קבצים בשרת מ remoter.
כאשר מכניסים כתובת לשיתוף קבצים SMB, יש להשתמש ב:
smb://server-name/share-name
אל תהשתמש ב:
cifs://server-name/share-name
כי הלקוח ינסה להתחבר באמצעות פרוטוקול SMB1.0/CIFS, שיכול להיות מושבת בשרת (אם הלקוח מתאים לcifs:// סינטקס).
כלום
עכשיו שה CIFS הוא פרוטוקול העתיק, SMB הוא אחד הפרוטוקולים שמשמשים להתחברות לשיתופי אחסון בשרתי הקבצים ו-NAS (הפרוטוקול השני הנפוץ היותר הוא NFS). עם האחסון המ sharable המסוים כפי שהם מסוימים לשחיתות נתונים, וסכנות פירות הנפוצים שיכולים בקלות להתפשט ברשת, השמרו לבצע גיבוי של קבצים ותיקיות שמאחסנים במשרדים משותפים כדי למנוע אבדת נתונים. האיקטיבציה של מחשב אחד של משתמש עם הרשאות כתיבה לקבצים משותפים יכולה לגרום לאבדת נתונים לכל המשתמשים.
NAKIVO Backup & Replication הוא פתרון ל保ירה של נתונים שמסופק גיבויים חלקיים מבעד ל-SMB ו-NFS של נתונים שמאחסנים ב-NAS ושרתי קבצים Windows/Linux.