Számítógépes hálózatokban az SMB, vagy Common Internet File System (CIFS) egy alkalmazás-réteg hálózati protokollként szolgál, amit főleg fileok, nyomtatók, soros portok megosztásához használnak, és különféle kommunikációra egy hálózat csomópontjai között. Valamint egy hitelesített folyamatok közötti kommunikációs mechanizmust is biztosít. Az SMB főleg Microsoft windowsos környezetben használt, ahol „Microsoft Windows Network” néven volt ismert, a későbbi Active Directory bemutatása előtt. A megfelelő Windows szolgáltatások a „Server Service” (a szerver komponens részére), és „Workstation Service” (a kliens komponens részére). Az SMB protokoll többféleképpen futhat a hálózati viszony (vagy alacsonyabb) rétegeken:

  • közvetlenül a TCP fölött, port 445;
  • a NetBIOS API-n keresztül, ami pedig több átviteli módon:
    • UDP portok: 137, 138 és TCP portok: 137, 139
    • pár régebbi protokollon, mint például az NFB

Eredete szerkesztés

Barry Feigenbaum eredetileg azzal a céllal fejlesztette a SMB-t az IBM-nél, hogy a DOS helyi fájl hozzáférést hálózati fájl rendszerré változtassa. A Microsoft jelentős változtatásokat tett a legtöbb általánosan használt változatban. Egyesítette az SMB-t a LAN Managerrel, amit még 1990 körül kezdtek fejleszteni a 3Commal OS/2-re, és további funkciókkal bővítették a Windows for Workgroups-ban (1992 körül), és a későbbi Windows verziókban. Az SMB-t eredetileg úgy tervezték, hogy a NetBIOS/NetBEUI API felett fusson. A Windows 2000 óta az SMB alapértelmezésben egy vékony réteggel, az NBT Session Service Session Massage csomagjához hasonlóan, a TCP felett, a TCP 445-ös portját használva a 139-es helyett - „direct host SMB”- ként ismert. Akkoriban mikor a Sun Microsystems bejelentette a WebNFS-t, a Microsoft elindított egy kezdeményezést 1996-ban, hogy átnevezze az SMB-t Common Internet File System-re (CIFS), több funkcióval bővítve, mint támogatás a hard és soft linkekhez, nagyobb file mérethez, és kezdeti támogatás a direkt kapcsolódáshoz a TCP 445-ös porton keresztül NetBIOS nélkül (nagyban kísérleti próbálkozás). A Microsoft benyújtott részleges specifikációkat, mint az Internet-Drafts az IETF-nek (Internet Engineering Task Force), bár ezek a beadványok lejártak. A Samba projekt eredetileg azzal a céllal jött létre, hogy reverse engineering módszerekkel implementáljon egy olyan SMB szervert, ami lehetővé teszi MS-DOS kliensek számára, hogy SMB segítségével elérjenek Sun Microsystems gépeken lévő file-okat. Az SMB protokollnak az elterjedt Microsoft Windows platformok, és azok közti kölcsönhatások kezelésében nyújtott fontos szerepének köszönhetően, a Samba népszerű és ingyenes megvalósításává vált egy kompatibilis SMB kliens/szerver-nek, a nem Microsoft-os operációs rendszerek együttműködésében.

A Microsoft 2006-ban a Windows Vista-val mutatta be az SMB2-t, amit később továbbfejlesztettek a Windows 7-ben.

Megvalósítás szerkesztés

kliens / szerver megközelítés szerkesztés

Az SMB kliens/szerver megközelítésben működik, ahol a kliens specifikus kéréseket ad ki, és a szerver ennek megfelelően reagál. Az SMB protokoll egyik része külön foglalkozik a file rendszerekhez való hozzáféréssel (kliens kérései file szerverek felé), míg más részei a folyamatok közti kommunikációra specifikálódtak (IPC). Az Inter-Process Communication (IPC) share vagy ipc$, egy hálózat megosztás Microsoft windowsos gépek között. Ezt a virtuális megosztást használják arra, hogy elősegítse a kommunikációt folyamatok és számítógépek között az SMB-n keresztül, többnyire adatok cseréjét arra jogosult számítógépek között. A fejlesztők az SMB protokollt helyi alhálózatokra optimalizálták, de a felhasználók különböző alhálózatokhoz való hozzáférésre is használják az interneten keresztül. Használata Microsoft Windows környezetben főleg file megosztásra és nyomtató megosztásra fókuszálódik. Az SMB szerverek elérhetővé teszik a saját file rendszerüket és más erőforrásokat a hálózat kliensei számára. A kliensek számítógépek lehet, hogy hozzáférést szeretnének a szerveren megosztott file rendszerekhez és megosztott nyomtatókhoz, és ebben az elsődleges funkcióban vált az SMB a legismertebbé, és legtöbbet használttá. Habár, az SMB file-szerver szempontból keveset érne a windowsos tartomány protokollok gyűjteménye nélkül, ami biztosítja a Windows stílusú, tartomány alapú hitelesítést. Szinte minden implementációja az SMB szervereknek a windowsos tartomány hitelesítést használja az erőforrásokhoz való felhasználói hozzáférések jóváhagyására.

Teljesítmény követelmények szerkesztés

NetBIOS szerkesztés

Az SMB protokoll használata gyakran összefüggésbe hozható a hálózaton folyó broadcast forgalom jelentős növekedésével. Ugyanakkor az SMB maga nem használ broadcast üzeneteket – a broadcast problémák többnyire azzal járnak, hogy az SMB igazából a NetBIOS „service location protocol”-tól származik. Alapvetően a Microsoft Windows NT 4.0 szerver a NetBIOS-t használta a szolgáltatások hirdetésére és keresésére. A NetBIOS funkciók a broadcast szolgáltatásokkal elérhetők az egyes host-okon rendszeres időközökkel. Míg ez egy kevesebb host-tal rendelkező hálózatban elfogadható hibát eredményez, addig a megnövekedett broadcast forgalom problémát okozhat a hálózat méretének növekedésével. A névfeloldás infrastruktúra Windows Internet Naming Service (WINS) vagy Domain Name System (DNS) formában megoldja a problémát. A WINS egy szabadalmazott megvalósítás volt a Windows NT 4.0 hálózatokban, de hozta a saját problémáit és komplexitását a Microsoft hálózatok tervezésben és a karbantartásban. A Windows 2000 kiadása óta, a WINS használata névfeloldásra elavult lett, hiszen a hierarchikus, dinamikus DNS az alapvető névfeloldó protokoll minden Windows operációs rendszerben. A NetBIOS-os rövid nevek feloldásához a DNS-nek szüksége van arra, hogy a kliens kibővítse a rövid neveket, többnyire hozzáfűzve egy kapcsolódás specifikus DNS suffixet a DNS keresési lekérdezésekhez. A WINS még mindig használható másodlagos névfeloldásra együttműködő régebbi Windows környezetekkel, és alkalmazásokkal. Továbbá, a Microsoft DNS szerverek továbbíthatnak névfeloldási kérelmeket régebbi WINS szervereknek, hogy támogassa a régebbi (Windows 2000 előtti) környezetek integrációját, amik nem támogatják a DNS-t.

WAN teljesítmény követelmények szerkesztés

Hálózat tervezők észrevették, hogy a latency-nek jelentős hatása van az SMB 1.0 protokoll teljesítményére, vagyis rosszabbul teljesít mint más protokollok, mint például az FTP. A megfigyelések kimutatták a nagyfokú „fecsegést”, és a hálózati latency figyelmen kívül hagyását a host-ok között. Például egy interneten keresztüli VPN kapcsolat gyakran okoz hálózati késleltetést. A teljesítmény problémák abból fakadnak, hogy az SMB 1.0 blokkszintű, nem pedig streaming protokoll, hiszen eredetileg kisméretű helyi hálózatokra tervezték, blokkméretét 64KB-ra korlátozták, és az SMB jelzése ezt tovább növeli, és a TCP ablak mérete nincsen WAN kapcsolatokra optimalizálva.

Microsoft-os módosítások szerkesztés

A Microsoft több kiegészítést adott a saját SMB megvalósításához. Például az NTLM, majd az NTLMv2 hitelesítési protokollokat, hogy kezelje a biztonság gyenge pontjait az eredeti LanMan hitelesítésben. A LanMan hitelesítés az eredeti, régi SMB specifikációs követelményből ered, hogy használja az IBM „LanManager” jelszavakat, de olyan hibás módon implementálta a DES-t (Data Encryption Standard), hogy engedte a jelszavak feltörését. Később hozzáadták a Kerberos-t is. Az NT 4.0 tartományi bejelentkezési protokollok kezdetben 40 bites titkosítást használtak az USA-n kívül, az erősebb 128 bites titkosítások kiviteli megszorításai miatt. Az opportunistic locking támogatása minden szerver kiadásával változott.

Opportunistic locking szerkesztés

az SMB protokollban az opportunistic locking egy állomány zárolási mechanizmus, amit a teljesítmény növelésére terveztek, azáltal hogy vezérli a hálózati állományok cache-elését a kliens által. A hagyományos zárolásokkal ellentétben, az OpLock-okat nem a kölcsönös kizárás érdekében alkalmazzák. Fő célja, hogy gondoskodjon a szinkronizálásról a cache-eléshez. Három típusa van:

Batch locks szerkesztés

Eredetileg azért készültek, hogy támogassanak egy bizonyos viselkedést az MS-DOS batch állományok végrehajtásánál, amiben az állomány sokszor van megnyitva és bezárva rövid idő alatt, ami teljesítmény probléma. Ennek kiküszöbölésre a kliens kérhet „batch” típusú OpLock-ot. Ebben az esetben a kliens késlelteti a bezárási kérelmet, és ha egy későbbi nyitási kérés érkezik, akkor a kettő kioltja egymást.

Exclusive locks szerkesztés

Ha egy alkalmazás megnyit egy megosztott állományt egy SMB szerveren, ami semmilyen másik alkalmazással (vagy más kliens által) sincs megnyitva, akkor a kliens kap egy exclusive OpLock-ot a szervertől. Ami azt jelenti, hogy a kliens feltételezi, hogy az az egyetlen folyamat ami hozzáfér ahhoz a bizonyos állományhoz, és a kliens cache-elheti az összes változást az állományhoz, mielőtt kommitálná a szervernek. Ez teljesítmény javulás, mivel kevésbé körülményes (kevesebb round-trip szükséges)az állomány olvasása, írása. Ha másik kliens/alkalmazás próbálja megnyitni ugyanezt az állományt, akkor a szerver üzenetet (break, vagy revocation) küld a kliensnek, amivel érvényteleníti az exclusive OpLock-ot, mait korábban kapott. Ezután a kliens feltölti az állomány változásait.

Level 2 OpLocks szerkesztés

Ha egy exclusive OpLock birtokában van egy kliens, és a zárolt állományt megnyitja egy harmadik fél, akkor a kliens lemond az exclusive OpLock-járól, hogy engedje a másik kliens olvasási/írási kérelmét. A kliens ezután kap egy Level 2 OpLock-ot a szervertől. A Level 2 OpLock engedi az olvasási kérelmek cache-elését, de kizárja az írási cache-elést.

Breaks szerkesztés

Ellentétben az SMB protokollok alapvető viselkedésével a break kérelmet a szerver küldi a kliensnek. Figyelmezteti a klienst, hogy egy OpLock nem érvényes többé. Ez például akkor történik, ha egy másik kliens megnyit egy állományt, ami érvényteleníti az OpLock-ot. A kliens, akinek küldte a szerver a break üzenetet, köteles elküldeni az összes változást (batch, vagy exclusive OpLock esetén), ha van ilyen, és elismeri az OpLock feloldását. Ezek után a szerver válaszolhat a második kliensnek a megfelelő módon.

SMB2 szerkesztés

A Microsoft a Windows Vista-val együtt mutatta be 2006-ban az SMB újabb verzióját (SMB2 vagy SMB 2.0). Habár a protokoll szabadalmaztatott, a specifikációját közzétették, hogy engedjék a többi rendszert is együttműködni a Microsoft operációs rendszerekkel, amik az új protokollt használják. Az SMB2 csökkenti a SMB 1.0 „fecsegését”, azzal hogy a parancsok számát 19-re csökkenti (több mint 100 volt SMB 1.0-ban). Csővezeték módszert alkalmaz, vagyis hamarabb küld új üzenetet, mint az előzőre megérkezne a válasz, ezáltal javítva a nagy késleltetésű kapcsolatok teljesítményét. Képes több cselekvést egyetlen kérésbe sűríteni, ezáltal jelentősen csökkentve a szerver és kliens közti párbeszéd mennyiségét. Az SMB1-nek is van ilyen „sűrítő” képessége (AndX), de a Microsoft kliensei ritkán használják. Emellett bevezeti a „durable file handles” fogalmát: ez teszi lehetővé egy kapcsolat számára, hogy túléljen rövid hálózati kieséseket (amik tipikusak egy vezeték nélküli hálózatnál), anélkül hogy új sessiont indítana. Az SMB2 támogatja a soft linkeket. További fejlesztések: file tulajdonságok cache-elése, fejlettebb üzenet címzés a HMAC SHA-256 hash kódoló algoritmussal, jobb skálázhatóság (szerverenként a felhasználók, megosztások, file megnyitások számának növelésével). Az SMB1 16 bites adatokkal dolgozott, ami többek közt 64 K-ra korlátozta a blokk méretet, míg az SMB2 32 vagy 64 bites mezőkkel dolgozik, vagy 128 bitessel file kezelés esetén, ami a blokk méret korlátozását megszünteti, ezzel javítva a gyors hálózatokon való nagy méretű file-ok átvitelét. A Windows Vista és későbbi operációs rendszerek SMB2-t használnak, ha hasonló operációs rendszerekkel kommunikálnak. Az SMB1-et régebbi Windows-okkal, valamint a Samba-hoz hasonló rendszerekhez és más NAS (Network-attached storage) megoldásokkal való kapcsolatokhoz használják. A Samba 3.5-nek már van kísérleti jellegű támogatása az SMB2-höz, míg a Samba 3.6 már szinte teljesen támogatja. Az SMB1-t eredetileg az IBM tervezte, és később részévé vált számos nem windowsos operációs rendszernek, mint a Samba, Xenix, VMS (Pathworks). Az X/Open részben szabványosította. Az SMB2 viszonylag tiszta szakítás a múlttal. A Microsoft SMB1-ének sokféle SMB szerverrel és klienssel kellett együttműködnie. Az SMB1 többféle választ is támogat a parancsokra (kiválasztani milyen szerkezetű válasszal térjen vissza egy adott kérésre), mint például a Unicode támogatás, amit később ültettek belé. Az SMB2 jelentősen csökkentette a komplexitást a protokoll alkalmazói számára, mivel sokkal kevesebb verzió létezik belőle.

SMB 2.1 szerkesztés

Az SMB 2.1-et a Windows 7 és Server 2008 R2-vel mutatták be. Ez kisebb fejlesztéseket tartalmaz, egy újabb opportunistic locking megoldással.

Funkciók szerkesztés

Az SMB IPC rendszere tartalmazz a named pipe koncepcióját, és egyike az első általánosan elérhető IPC mechanizmusnak a programozóknak, ami lehetőséget nyújt a szolgáltatásoknak, hogy örököljék a hitelesítést, amikor egy kliens először kapcsolódik egy SMB szerverhez. Egyes szolgáltatások, melyek a named pipe-okon keresztül működnek, mint például a Microsoft saját megvalósítása, a DCE/RPC az SMB-n keresztül, azaz az MSRPC az SMB-n keresztül, szintén engedi az MSRPC klienseket hitelesítések végrehajtására, ami felülírja az SMB szerver által adott hitelesítést, de csak azon MSRPC kliens programmal kapcsolatban, amelyik sikeresen elvégzi a további hitelesítést. Mióta a windowsos tartomány kezelők az SMB-t használják a házirendek továbbítására bejelentkezéskor, engedélyezik a packet-signing-et, alapvetően az azért, hogy megakadályozzák a man-in-the-middle támadásokat. Ez a funkció elérhető minden szerveren ami Windows NT 4.0 Service Pack 3-at, vagy újabbat futtat. Az SMB2 tervezésének célja, hogy csillapítsa ezt a teljesítmény korlátozást, az SMB jelek egyetlen csomagba való egyesítésével. Az SMB támogatja az opportunistic zárolást az állományokon a teljesítmény javítása érdekében. Az SMB alapjául szolgál a Microsoft Distributed File System-jének.

Biztonság szerkesztés

Az évek alatt, több biztonsági rés is volt a protokoll Microsoft-féle megvalósításában, vagy a komponenseiben amikre közvetlenül támaszkodik, beleértve a legújabb gyengeségeket az SMB2 megvalósításában.

Specifikáció az SMB és SMB2 protokollokhoz szerkesztés

Az SMB specifikációja védett és eredetileg zárt volt, ezáltal kényszerítve a többi forgalmazót és projektet a protokoll reverse-engineering-jére, hogy együttműködhessenek vele. Az SMB 1.0-t publikálták, miután visszafejtették, míg az SMB2 elérhető volt a Microsoft MSDN Open Specifications Developer Center-éből a kezdetektől fogva. Több specifikáció is van, amely releváns az SMB protokollal:

  • MS-CIFS
  • MS-SMB
  • MS-SMB2
  • MS-FSSO

Verziók és megvalósítások szerkesztés

Az alábbi lista explicit utal az SMB-re, beleértve az SMB klienst vagy szervert, valamint a különféle SMB-t kiterjesztő protokollokat, mint a Network Neighborhood protokoll készletet, és az NT Domain csomagot.

  • A Microsoft Windows tartalmaz SMB klienst és szervert a Windows NT családban, és a Windows 95, 98, és Me operációs rendszerekben.
  • Samba, ami újra implementálja az SMB protokollt és a Microsoft kiegészítéseit, mint szabad szoftvert. Tartalmaz egy SMB szervert, és egy parancssori SMB klienst.
  • Samba NTG: Samba egy ága.
  • Linux kernel tartalmaz két SMB kliens implementációt, ami a Linux VFS-t használja.
  • agorum core
  • Novell NetWare v 6 és újabbak.
  • FreeBSD tartalmaz egy SMB kliens implementációt, a smbfs-t.
  • NetBSD és Mac OS X szintén tartalmaz egy SMB kliens implementációt, a smbfs-t, ami eredetileg FreeBSD smbfs-éből származik.
  • Solaris
  • OpenSolaris
  • Likewise Software tartalmaz Likewise-CIFS-t, egy nyílt forráskódú SMB/CIFS file szerver, ami támogatja az SMB1-et és SMB2-t is.
  • Az Objective Development Sharity programja egy SMB file rendszert klienst biztosít Unix alatt.
  • Az iPhone Flash Files nevű alkalmazásában találhatunk egy SMB szerver implementációt.
  • A LogicalDOC dokumentumkezelő rendszer tartalmaz egy klienst, ami az SMB-vel teremthet kapcsolatot, Java-ban implementálták.
  • Sun Microsystem: Cascade
  • Veritas Software
  • NetApp rendelkezik SMB szerver megvalósítással.
  • Isilon
  • pysmb SMB/CIFS kliens megvalósítása python-ban.