Wenn es darum geht, ein Protokoll zur gemeinsamen Nutzung von Dateien über das Netzwerk auszuwählen, stoßen Sie in Software-Schnittstellen und Dokumentationen häufig auf die Begriffe SMB und CIFS. Einige Benutzer denken, dass SMB und CIFS dasselbe sind, und es kann schwierig sein, den Unterschied klar zu identifizieren. Schauen wir uns jedoch an, warum CIFS nicht als Synonym für SMB verwendet werden kann. Erfahren Sie mehr über die Unterschiede zwischen den SMB- und CIFS-Protokollen und wie die Begriffe verwendet werden.
Was ist SMB?
SMB oder Server Message Block ist ein Netzwerkprotokoll, das auf der Anwendungsschicht des OSI-Kommunikationsmodells arbeitet. SMB wird verwendet, um gemeinsamen Zugriff auf Ressourcen über das Netzwerk bereitzustellen. Das SMB-Protokoll wird weit verbreitet verwendet, um Dateien auf Dateiservern zu teilen, Dateien zwischen Benutzercomputern zu teilen und Dateien zwischen Computern zu kopieren.
Neben der Manipulation von Dateien besteht der andere Anwendungsfall für SMB in der Nachrichtenübermittlung und dem Drucken (allgemeine ferngesteuerte Transaktionen) sowie im Durchsuchen von Computern im Netzwerk. IBM entwickelte SMB im Jahr 1983, und seitdem wurde das Protokoll mehrfach verbessert.
Was ist SMB-Dateifreigabe?
SMB-Dateifreigaben sind Verzeichnisse auf einem Remote-Host, die über das SMB-Protokoll verfügbar gemacht werden. Sie sind auf Dateiservern konfiguriert, und Lese- und Schreibzugriff können für diese Freigaben konfiguriert werden. Ein Dateiserver kann mehrere SMB-Freigaben haben.
Wie funktioniert SMB: Was macht SMB?
SMB funktioniert nach dem Client-Server-Netzwerkprinzip. Das Protokoll verwendet eine Reihe von Datenpaketen, die eine Anfrage eines Clients oder eine Antwort eines Servers enthalten. Clients können sich mit einem Server verbinden, indem sie eine IP-Adresse oder einen Hostnamen verwenden. Diese SMB-Datenpakete können klassifiziert werden:
- Sitzungssteuerungspakete, die Verbindungen zu Dateifreigaben aufbauen/beenden
- Dateizugriffspakete, die, wie der Name schon sagt, auf die Dateifreigaben zugreifen und die Dateien manipulieren
- Allgemeine Nachrichtenpakete
SMB richtet eine Sitzung ein, nachdem eine Verbindung hergestellt und die Authentifizierung abgeschlossen wurde. Dann können SMB-Nachrichten über diese Sitzung übertragen werden. Beim Initiieren einer Sitzung sendet ein SMB-Client eine Liste seiner Fähigkeiten (Fähigkeiten hängen von der SMB-Version des Clients ab).
Das SMB-Protokoll kann wie folgt funktionieren:
- Direkt über TCP, indem Port 445 verwendet wird (ohne NetBIOS) – dies ist der moderne Ansatz.
- Über die NetBIOS-API unter Verwendung von UDP-Ports 137 und 138 sowie TCP-Ports 137 und 139 – dies ist der Legacy-Ansatz, der bis Windows 2000 verwendet wurde. Die ersten Versionen von SMB verwendeten NetBIOS über TCP/IP für den Transport.
Das SMB-Protokoll unterstützt Batching, d.h. das Gruppieren mehrerer Nachrichten und das Senden in einer Übertragung zur Verbesserung der Leistung.
Zu den zusätzlichen Funktionen gehören Dateisicherungsmechanismen zum Schutz freigegebener Dateien, wenn mehrere Benutzer dieselbe Datei öffnen. Das Sperren von Dateien verhindert, dass Daten gleichzeitig von mehreren Benutzern geschrieben werden und Dateninkonsistenzen in einer Datei verursachen.
IPC (Interprozesskommunikation) wird auch als Nullsitzungsverbindung bezeichnet. Die von Windows erstellte Freigabe IPC$ wird für temporäre Verbindungen zwischen Clients und Servern verwendet. Diese versteckte Freigabe wird für die gemeinsame Nutzung von Daten erstellt, die nicht als Dateien/Verzeichnisse und Drucker klassifiziert werden können, beispielsweise Benutzer und Freigabeenumeration.
Windows-Systeme enthalten einen nativen SMB-Client und -Server. Allerdings haben Client-Versionen von Windows eine Begrenzung für die Anzahl der Benutzer, die sich mit einem Host verbinden können, im Gegensatz zu Windows Server-Versionen, die keine solchen Einschränkungen haben.
- Windows XP und Vista – maximal 10 gleichzeitige Verbindungen
- Windows 7 und Windows 10 – maximal 20 gleichzeitige Verbindungen
Ein SMB-Server unter Linux wird durch Konfiguration von Samba installiert, das eine kostenlose SMB-Serverimplementierung für Linux ist. Beachten Sie, dass Samba es auch ermöglicht, Linux einer Active Directory-Domäne beizutreten und Linux als Domänencontroller fungieren zu lassen. SMB-Client-Software ist auch auf Linux (kostenlos) und anderen Betriebssystemen verfügbar.
Was ist CIFS?
CIFS oder Common Internet File System ist eine spezielle Implementierung oder Variante von SMB, die von Microsoft im Jahr 1996 nach der Veröffentlichung von Windows 95 entwickelt wurde. Eine Variante ist eine Version und kein eigenständiges Protokoll. Eine Variante ist eine Reihe von Nachrichtenpaketen, die zum Kommunizieren zwischen Hosts gesendet/empfangen werden und eine bestimmte Protokollversion definieren. CIFS ist kein Dateisystem, wie der Name vermuten lässt.
Die CIFS-Protokollspezifikation basiert auf dem ursprünglichen SMB-Protokoll, jedoch mit einigen zusätzlichen Funktionen, die von Microsoft hinzugefügt wurden. Microsoft implementierte direkte Verbindungen über TCP und Port 445, ohne NetBIOS über TCP zu verwenden (das bei den ersten SMB 1-Implementierungen verwendet wurde). CIFS ist eine Implementierung von SMB 1 und kein separates Dateifreigabeprotokoll.
SMB-Protokollvarianten
Wenn wir über die SMB1-Implementierung von Microsoft sprechen, können wir den Begriff CIFS verwenden. In allen anderen Fällen und im Allgemeinen ist SMB der richtige Begriff, um dieses Netzwerkprotokoll zu bezeichnen. Lassen Sie uns einen genaueren Blick auf SMB-Versionen werfen, die nach CIFS veröffentlicht wurden, um ein besseres Verständnis für den Unterschied zwischen CIFS und anderen (neueren) SMB-Dialekten (Versionen) zu bekommen.
SMB 2.0
Microsoft veröffentlichte SMB 2.0 (oder SMB2) im Jahr 2006 mit Windows Vista. Diese SMB-Version ist zuverlässiger als SMB 1.0/CIFS und es handelt sich nicht um CIFS. Die Anzahl der für die Dateiübertragung benötigten Befehle wurde von über 100 auf 20 reduziert. Die Leistung ist höher aufgrund der Pipeline-Verarbeitungsmechanismen, d.h. der Möglichkeit, eine zusätzliche Anfrage zu senden, bevor die Antwort auf die vorherige eingegangen ist. Das Zusammenpacken mehrerer Aktionen in eine Anfrage reduziert die Anzahl der Anfragen an einen Client, was die Leistung verbessert.
SMB 2.1
SMB 2.1 bietet im Vergleich zu SMB 2.0 nur geringfügige Verbesserungen in Leistung und Blockiermechanismen. Diese Protokollversion wurde mit Windows 7 und Windows Server 2008 R2 veröffentlicht.
SMB 3.0
Zu Beginn wurde diese Protokollversion als SMB 2.2 bezeichnet, aber sie wurde später mit Windows 8 in SMB 3.0 umbenannt. Die SMB 3.0-Version:
- fügte SMB Direct (direkten Zugriff auf den Speicher), SMB Multichannel und SMB Transport Failover hinzu
- verbesserte die Sicherheit
- fügte Unterstützung für Ende-zu-Ende-Verschlüsselung hinzu
- verbesserte die Netzwerkeffizienz durch Reduzierung der Latenz
SMB 3.0.2
SMB 3.0.2 oder 3.02 ist seit Windows 8.1 und Windows Server 2012 R2 verfügbar. In dieser Version kann die SMB 1.0-Kompatibilität deaktiviert werden, um die Sicherheit zu verbessern.
SMB 3.1.1
Diese Version ist seit Windows 10 und Windows Server 2016 verfügbar. Die Verbesserungen umfassen eine bessere Verschlüsselung (AES 128 GCM und AES 128 CCM) und SHA-512-Hash für Vorauthentifizierungsintegritätsprüfungen.
SMB in Windows und Microsoft Server
SMB ist in Windows verfügbar, beginnend mit Windows 3.1 (Windows für Workgroups). SMB-Versionen und -Kompatibilität für verschiedene Windows-Versionen werden in der Tabelle erläutert.
Spalten und Zeilen enthalten Windows-Versionen, die einen SMB-Client oder SMB-Server ausführen können (Spalten und Zeilen sind austauschbar). Eine Zelle am Schnittpunkt einer Spalte und Zeile zeigt an, welche SMB-Protokollversion für die Kommunikation zwischen den jeweiligen Windows-Versionen verwendet wird.
Windows 10
Server 2016 und neuer |
Windows 8.1
Server 2012 R2 |
Windows 8
Server 2012 |
Windows 7
Server 2008 R2 |
Windows Vista
Server 2008 |
Win XP, Server 2003 und älter | |
Windows 10
Server 2016 und neuer |
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 und älter | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 |
CIFS vs. SMB: Die wahrscheinliche Quelle der Verwirrung
Lassen Sie uns anhand eines Beispiels herausfinden, warum die Begriffe CIFS und SMB immer noch von Benutzern verwechselt werden. Dazu nehmen wir an, dass wir einen Dateiserver mit einem konfigurierten SMB-Share auf Windows Server 2019 verwenden und eine Linux-Maschine, die über das SMB-Protokoll mit diesem Dateiserver verbunden ist. In diesem Beispiel verwenden wir die Linux-Distribution Ubuntu 20.04. Beachten Sie, dass die Konfiguration für Ubuntu 22 dieselbe ist.
Wir haben die folgende Konfiguration in unseren Umgebungen:
- Windows Server 2019: 192.168.101.209
- Linux Ubuntu 20.04: 192.168.101.210
- SMB-Share auf Windows Server: \\192.168.101.209\share
In Windows Server 2019 ist das SMB 1.0/CIFS-Protokoll standardmäßig deaktiviert. Um diese Einstellung zu überprüfen und den SMB1.0/CIFS-Client und -Server manuell zu aktivieren/deaktivieren, gehen Sie zu Server-Manager> Rollen und Features hinzufügen> Features.
Wir haben SMB 1.0/CIFS auf unserem Windows Server 2019 deaktiviert. Das bedeutet, dass standardmäßig SMB 3 verwendet wird, mit der Möglichkeit, auf SMB 2 umzusteigen, um die Kompatibilität mit Clients zu gewährleisten, die SMB 2-Versionen (Dialekte) verwenden.
Das CIFS-Protokoll ist standardmäßig in modernen Windows-Versionen wie Windows 10 aus Sicherheitsgründen deaktiviert, und Sie können es bei Bedarf manuell aktivieren.
Hinweis: Im Jahr 2017 wurden massive weltweite Ransomware-Angriffe (WannaCry und NotPetya) durchgeführt, indem Schwachstellen von SMB 1 ausgenutzt wurden. Diese Schwachstellen wurden als EternalBlue, EternalRomance und EternalChampion bezeichnet. Microsoft veröffentlichte Sicherheitsupdates für seine Betriebssysteme ab Windows XP und Windows Server 2003, obwohl diese Betriebssysteme zu diesem Zeitpunkt nicht offiziell unterstützt wurden. Microsoft empfahl die Verwendung von SMB 2 und SMB 3 (Unterstützung der Vorauthentifizierungsintegrität) anstelle von SMB 1.0/CIFS.
Wie oben erwähnt, lautet der Name des SMB-Servers für Linux Samba (samba ist der Paketname). Wir verwenden einen SMB-Server unter Windows. Daher benötigen wir in diesem Beispiel kein Samba, sondern einen SMB-Client für Ubuntu Linux.
Ein SMB-Client für Linux ist in den Linux CIFS Utils enthalten (cifs-utils ist der Paketname). Hier liegt die Verwirrung. Die erste Version dieses Clients für Linux wurde zu einer Zeit erstellt, als SMB 1.0/CIFS weit verbreitet war. Das SMB-Protokoll wurde aktualisiert, SMB-Versionen 2 und 3 wurden veröffentlicht, aber der Name des Linux-SMB-Clients bleibt gleich, und das Paket, das den SMB-Client enthält, heißt immer noch CIFS Utils. Das Paket cifs-utils ist kein Teil von samba.
Wir werden von Linux aus mit CIFS Utils eine Verbindung zu einem SMB-Share auf einem Windows Server 2019 herstellen, um herauszufinden, ob CIFS noch verwendet wird. Um CIFS Utils zu installieren, führen Sie den folgenden Befehl mit Root-Rechten aus:
sudo apt-get install cifs-utils
Erstellen Sie ein Verzeichnis, das als Mount-Punkt für das SMB-Share verwendet werden soll:
mkdir /mnt/share
Verbinden Sie sich mit dem SMB-Dateifreigabe auf einem entfernten Windows-Dateiserver:
mount.cifs //192.168.101.209/share /mnt/share -o user=administrator
Wir verwenden in unserem Beispiel ein Windows-Administratorbenutzerkonto zu Lehrzwecken.
CIFS vs. SMB – welches wird in der aktuellen Sitzung zur Verbindung mit dem Dateiserver verwendet? Überprüfen Sie die SMB-Version der Clients, die mit dem SMB-Share auf dem Windows Server verbunden sind, mit dem PowerShell-Befehl auf Windows Server 2019:
Get-SmbSession | Select-Object -Property ClientComputerName,ClientUserName,Dialect
Wie wir im PowerShell-Output sehen können, wird SMB 3.1.1 für unsere Verbindung von Ubuntu Linux verwendet. SMB 1.0/CIFS wird nicht verwendet, wenn wir uns mit cifs-utils und dem Befehl mount.cifs mit einem auf Windows Server 2019 konfigurierten Dateiserver verbinden.
Wir können auch die SMB-Protokollversion in /proc/mounts mit dem Befehl cat /proc/mounts in Linux überprüfen. Wir können den folgenden Befehl verwenden, um nur die benötigten Ergebnisse zu filtern:
cat /proc/mounts | grep cifs
Wie wir im Output sehen, ist die Protokollversion für die Verbindung zum Dateifreigabe als cifs markiert, aber die angezeigte Version ist 3.1.1 (vers=3.1.1), was keine Version von CIFS ist. Dies ist ein weiteres Beispiel dafür, wie die Begriffe SMB vs. CIFS verwirrt werden können.
Tatsächlich wird SMB 3.1.1 verwendet und nicht CIFS. Wir können es mit einer weiteren Methode beweisen, indem wir nmap verwenden, das ein kostenloses Netzwerk-Entdeckungstool für Analyse und Fehlerbehebung ist.
Um nmap in Ubuntu zu installieren, führen Sie den Befehl als Root aus:
sudo apt-get install nmap
Um alle Hosts zu scannen, die online sind und mit unserem 192.168.101.0/24 Netzwerk verbunden sind, verwenden wir den Befehl:
nmap --script smb-protocols 192.168.101.0/24
Wir sind interessiert daran, das Ergebnis für 192.168.101.209 zu sehen, welches die IP-Adresse unseres Windows Servers 2019 ist, der als Dateiserver fungiert. Linux ist mit dem Dateifreigabe auf diesem Server verbunden. In der Ausgabe sehen wir, dass die Dialekte für die von unserem Windows Server unterstützten SMB-Protokolle 2.02, 2.10, 3.00, 3.02 und 3.11 sind. Es gibt kein SMB 1.0/CIFS, obwohl der Begriff CIFS immer noch in Linux-Konfigurationsdateien und Befehlen verwendet wird.
Wir können manuell die Verwendung von CIFS erzwingen, indem wir den Parameter vers=1.0 im mount-Befehl in Linux (auf der Client-Seite) hinzufügen, um nur das SMB 1.0/CIFS-Protokoll zu verwenden, wenn eine Verbindung zu einer Dateifreigabe auf einem entfernten Server hergestellt wird.
mount -t cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=1.0
oder
mount.cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=1.0
Das Ergebnis lautet wie folgt:
Der Server hat die Verbindung abrupt geschlossen. Dies kann passieren, wenn der Server die von Ihnen verwendete SMB-Version nicht unterstützt. Die Standard-SMB-Version hat sich kürzlich von SMB1 auf SMB2.1 und höher geändert.
Dieses Ergebnis entspricht den vorherigen Ergebnissen unserer SMB vs. CIFS-Untersuchung in modernen Betriebssystemen. CIFS wird nicht verwendet, und SMB 1.0/CIFS ist auf unserem Windows Server deaktiviert.
Wenn wir es auf mindestens SMB 2.0 einstellen, können wir uns mit dem Server verbinden (denken Sie an die Liste der von unserem Windows Server 2019 unterstützten SMB-Dialekte, die in nmap angezeigt werden):
mount.cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=2.0
Bei der Verwendung der grafischen Benutzeroberfläche in Linux oder anderen Betriebssystemen verwenden Sie smb:// in der Adresszeile, um das Netzwerkprotokoll zu definieren, das für die Verbindung zu einem Dateifreigabe auf einem entfernten Server verwendet werden soll.
Beim Eingeben der Adresse zu einer SMB-Dateifreigabe sollten Sie folgendes verwenden:
smb://server-name/share-name
Nicht verwenden Sie:
cifs://server-name/share-name
denn der Client wird versuchen, eine Verbindung über das SMB1.0/CIFS-Protokoll herzustellen, das auf einem Server deaktiviert sein kann (falls der Client überhaupt die Syntax cifs:// unterstützt).
Schlussfolgerung
Da das CIFS-Protokoll veraltet ist, ist SMB eines der Protokolle, die zur Verbindung mit gemeinsam genutztem Speicher auf Dateiservern und NAS verwendet werden (das andere häufig verwendete ist NFS). Da gemeinsam genutzter Speicher besonders anfällig für Datenkorruption, Ransomware und andere Bedrohungen ist, die sich leicht über ein Netzwerk verbreiten können, stellen Sie sicher, dass Sie Dateien und Ordner, die auf gemeinsam genutzten Ressourcen gespeichert sind, sichern, um Datenverlust zu vermeiden. Das Infizieren des Computers auch nur eines Benutzers mit Schreibberechtigungen für gemeinsam genutzte Dateien kann zu Datenverlust für alle Benutzer führen.
NAKIVO Backup & Replication ist eine Datensicherungslösung, die inkrementelle Backups über SMB und NFS von Daten unterstützt, die auf NAS und Windows/Linux-Dateiservern gespeichert sind.