ubuntuusers.de

NTFS-3G

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:


Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.

NTFS-3G.png

Von Linux aus kann man auf mit dem proprietären Dateisystem NTFS von Microsoft formatierte Datenträger in vollem Umfang lesend und schreibend zugreifen. Dafür gibt es bei Ubuntu zwei, teilweise zueinander inkompatible Möglichkeiten:

Hinweis:

Dieser Artikel ergänzt den generellen Übersichtsartikel[4] zur Verwendung von Windows-Partitionen unter Linux um spezielle Details zum Dateisystemtreiber NTFS-3G.

Gegenstand dieses Artikels ist nicht das Modul ntfs3, für das ein eigener Artikel sich noch in Arbeit befindet.

Entwickelt und vertrieben wird NTFS-3G heute vom finnischen Unternehmen Tuxera 🇬🇧. Die Software wird in einem dualen Lizenzsystem neben der freien Version (Community Version) auch als "Tuxera NTFS embedded" unter einer proprietären Lizenz für Unternehmen angeboten.

Obwohl NTFS-3G als FUSE[5]-Anwendung die Geschwindigkeit und Performance des Kernel-Moduls nicht erreicht, kann es doch gute Gründe geben, NTFS-3G auch weiterhin einzusetzen:

Installation und Verwendung

Installation

NTFS-3G und FUSE gehören zur Standardinstallation und sind deshalb auf jedem frisch installierten System vorhanden. Sie werden durch die Pakete ntfs-3g und fuse* sowie libfuse* bereitgestellt. Das früher eigenständige Paket ntfsprogs mit Werkzeugprogrammen ist bei Ubuntu in das Paket ntfs-3g integriert.

Dateisystem des Typs NTFS einhängen

Grundsätzlich lässt sich ein Dateisystem des Tps NTFS mit NTFS-3G genau so wie Dateisysteme anderen Typs einbinden. Es sind dabei aber einige Besonderheiten zu beachten:

Achtung!

Dateisysteme, die abwechselnd in Windows oder Linux verwendet werden, dürfen niemals eingehängt werden, wenn sich das jeweils andere System im Ruhezustand ("Hibernation") befindet. In Windows muss außerdem der Schnellstart ausgeschaltet sein.

Um dies sicherzustellen, öffnet man in Windows eine PowerShell mit Administrator-Rechten und gibt folgende Befehlszeile ein:

# Windows PowerShell Administrator
powercfg /h off 

Bei Windows-Systempartitionen erkennt NTFS-3G ggf. den Ruhezustand und hängt diese dann im Nur-Lese-Modus (ro) ein. Außerdem lässt sich das Risiko eines unbeabsichtigten Systemwechsels verringern, wenn man den Bootmanager GRUB so konfiguriert, dass immer das zuletzt benutzte System bevorzugt wird.

Verwendung von ntfs-3g sicherstellen

Seit der Einführung des Kernel-Moduls ntfs3 mit Kernel 5.15 – der ab Ubuntu 20.04 (HWE, nicht LTS!) genutzt werden kann – stehen grundsätzlich drei Treiber zur Nutzung des Dateisystems des Typs NTFS unter Ubuntu zur Verfügung:

  • das neue Kernel-Modul ntfs3

  • der externe FUSE-Treiber ntfs-3g

  • das alte Kernel-Modul ntfs

Hinweis:

Das Kernel-Modul ntfs3 und der externe Dateisystemtreiber ntfs-3g sind zueinander nicht voll kompatibel. Deshalb sollte man es möglichst vermeiden, beide Treiber abwechselnd oder gar gleichzeitig im selben System oder für dasselbe Dateisystem zu verwenden! Insbesondere gilt dies, wenn man in NTFS-3G von der Möglichkeit Gebrauch macht, echte (persistente) Dateirechte einzurichten.

Da zum Einhängen von Dateisystemen des Typs NTFS mittels grafischer Benutzeroberfläche z.B. durch Mausklick im Dateimanager manchmal (versionsabhängig) vorrangig das neue Modul ntfs3 verwendet wird, muss man für den störungsfreien Betrieb mit ntfs-3g dessen ausschließliche Nutzung für die grafische Benutzeroberfläche zuerst sicherstellen. Dafür gibt es zwei Wege:

Modul ntfs3 sperren

Dies ist die zuverlässigste Methode zur Vermeidung von Problemen. Wenn man sicher ist, dass weder man selbst noch ein anderer Benutzer das Modul des Kernels noch benutzen will, dann kann man dieses generell sperren. Damit wird die versehentliche Nutzung von ntfs3 systemweit ausgeschlossen. Man erstellt im Terminal[8] mittels sudoedit[9] eine neue Datei /etc/modprobe.d/blacklist-ntfs3.conf mit folgendem Inhalt:

blacklist ntfs3

Mit einem Neustart wird die gesetzte Einstellung wirksam.

Priorisierung des Treibers ntfs-3g

Ab Ubuntu 23.10 kann für alle Programme, die im Hintergrund auf UDisks[3] zurückgreifen, der für Dateisysteme des Typs NTFS vorrangig zu verwendende Treiber festgelegt werden. Dies ist über die gegebenenfalls mittels sudoedit[9] neu anzulegende Datei /etc/udisks2/mount_options.conf möglich, in der man ntfs-3g wie folgt priorisiert, siehe auch UDisks (Abschnitt „Treiber-bevorzugen-oder-sperren“):

[defaults]
ntfs_drivers=ntfs,ntfs3

Der Wert ntfs ist selbst mehrdeutig, und seine Bedeutung kann sich zukünftig auch ändern. Er steht jedenfalls bis Ubuntu 24.04 sowohl für den Treiber ntfs-3g als auch nachgeordnet für das alte Modul ntfs im Kernel. Besser ist, diese mehrdeutige Bezeichnung zu vermeiden und den Wert ntfs-3g zu verwenden, wenn man NTFS-3G benutzen möchte.

Man kann hier den Wert ntfs3 auch weglassen, dann wird Udisks das Modul im Kernel niemals benutzen.

Die Einstellungen sind sofort nach Abspeichern der Datei für zukünftige Einbindungen verfügbar. War ein Dateisystem aber vor Erstellung der Datei bereits eingebunden, so muss es erst ausgehängt und erneut eingehängt werden, damit die Änderungen wirksam werden.

Hinweis:

Auch schon vor Einführung des Moduls ntfs3 wurde unter Ubuntu ntfs-3g dem alten Kernel-Modul ntfs vorgezogen. Diese Priorisierung gilt weiterhin. Es gibt keinen ersichtlichen Grund, das alte Kernel-Modul ntfs freiwillig zu benützen. Misslingt aber das Einbinden mit ntfs-3g aus irgend einem Grund (z.B. unzulässige Optionen), so kann es sein, dass Ubuntu ausnahmsweise auf das alte Modul ntfs zurückgreift. Da das betreffende Dateisystem dabei aber nur schreibgeschützt eingebunden wird, ergibt sich daraus keine Gefahr eines Datenverlustes.

Temporäres Einbinden mittels grafischer Benutzeroberfläche

Im Dateimanager (z.B. Nautilus) und einigen anderen Programmen (z.B. Laufwerke oder gigolo) kann man Datenträger sehr häufig mit einem Mausklick linke Maustaste einhängen, wobei die Programme sich ggf. benötigte Root-Rechte per PolKit erfragen. Externe Datenträger (z.B. USB-Sticks) werden oftmals schon beim Einstecken automatisch eingebunden.

Standardmäßig wird das betreffende Dateisystem in ein Verzeichnis unterhalb von /media/$USER/ privat und so nur für den Benutzer, der den Klick ausgeführt hat, zugänglich in den Dateibaum gehängt. Einhängepunkt sowie weitere Optionen werden dabei in aller Regel von UDisks vorgegeben; dessen Konfiguration kann bei Bedarf ab Ubuntu 22.04 geändert werden, siehe UDisks (Abschnitt „Konfiguration“).

Versuchen gewöhnliche Benutzer Datenträger mittels grafischer Benutzeroberfläche einzuhängen, so werden sie insbesondere bei im Rechner intern verbauten Datenträgern beim Versuch des Einhängens unter Umständen nach dem Passwort eines Administrators gefragt. Soll ein Datenträger ohne diese Passwortabfrage eingebunden werden können, so ist das notwendige Vorgehen in UDisks (Abschnitt „Systemschutz“) beschrieben.

Temporäres Einbinden mittels Terminal

Anders als beim Einbinden mittels Mausklick muss man bei der Verwendung des Programms mount[1][8] zuerst einen leeren Ordner als Einhängepunkt einrichten[9]. Zur Kennzeichnung der Partition bzw. des Dateisystems kann deren UUID, Label oder auch ein Eintrag in /dev verwendet werden. Außerdem sollte man wann immer möglich den Dateisystemtreiber ntfs-3g direkt angeben. Beispiel:

sudo mount -t ntfs-3g UUID=58CC69AFCC6987D8 /media/Bilder  

oder auch (/dev/sdXY ist dabei an das eigene System anzupassen):

sudo mount -t ntfs-3g /dev/sdXY /media/Bilder  

Gewöhnliche Nutzer können im Terminal[8] mount nur mit mittels eines Eintrags in der Datei fstab[2] verwenden. Sie können aber ohne einen solchen Eintrag eines der auf UDisks aufbauenden Programme, wie gio mount -d oder udisksctl mount -b, je nach deren Verfügbarkeit verwenden. Ein direktes Angeben des Einhängepunktes ist dabei nicht möglich (siehe oben):

gio mount -d /dev/sdXY 

oder alternativ (/dev/sdXY ist dabei an das eigene System anzupassen):

udisksctl mount -b /dev/sdXY -t ntfs-3g 

Eine direkte Angabe des UUID ist hier nicht zulässig. Das Einbinden geschieht dann entsprechend wie beim Einhängen mittels grafischer Benutzeroberfläche.

Statisches Einbinden

Automatisches statisches Einbinden

Soll das Dateisystem statisch während des Systemstarts eingehängt werden, lautet der entsprechende Eintrag in /etc/fstab[2] beispielsweise:

UUID=58CC69AFCC6987D8 /media/Bilder ntfs-3g nodev,nosuid 0 0

Hier kann man noch gemäß eigener Aufgabe allgemeine Optionen für /etc/fstab sowie spezielle Optionen für ntfs-3g gemäß Tabelle 1 und Tabelle 4 ergänzen.

Vorbereitendes statisches Einbinden

Möchte man das Einbinden durch die Option noauto nur vorbereiten – um z.B. das Verzeichnis, in das eingebunden werden soll, bestimmen zu können oder zusätzliche Optionen vorzugeben – so muss man beachten, dass das nachträgliche Einbinden in der grafischen Benutzeroberfläche für unprivilegierte Nutzer nur unter den Voraussetzungen von Temporäres Einbinden mittels grafischer Benutzeroberfläche möglich ist und die betreffenden Nutzer bei Nutzung des Terminals gio mount -d bzw. udisksctl mount -b statt mount verwenden müssen! Beispiel:

UUID=58CC69AFCC6987D8 /media/Bilder ntfs-3g nodev,nosuid,noauto,windows_names,hide_dot_files 0 0

Hier kann man noch gemäß eigener Aufgabe allgemeine Optionen für /etc/fstab sowie für ntfs-3g spezielle Optionen gemäß Tabelle 1 und Tabelle 4 ergänzen.

Das Einhängen erledigt der Nutzer dann entweder mittels Klick in der entsprechenden Anwendung der GUI oder wie oben unter Temporäres Einbinden mittels Terminal beschrieben.

Hinweis:

Bei Einträgen in der /etc/fstab[2] ist zu beachten, dass bei Dateisystemen des Typs NTFS im letzten (6.) Feld die Ziffer 0 (Null) stehen muss, weil NTFS-3G eine automatische Prüfung des Dateisystems beim Einhängen nicht unterstützt. Alternativ darf man auch die beiden letzten Felder frei lassen, weil dann jeweils die Vorgabe 0 gilt.

Seit Ubuntu 22.04 muss außerdem bei NTFS-3G auf die allgemeinen Mount-Optionen user und users verzichtet werden, weil das Einbinden andernfalls scheitert. Siehe: Option user nicht angeben

Besitz- und Zugriffsrechte

NTFS-3G kennt mehrere Methoden, wie Besitz- und Zugriffsrechte[6] unter Linux und Windows sich zueinander verhalten und sich teilweise erheblich unterscheiden. Die möglichen drei Betriebsarten und ihre möglichen Varianten werden im folgenden Artikel erklärt:

  1. Ohne User-MappingSimulation von Dateirechten

  2. Mit User-Mapping, aber ohne User-Mapping-Datei → "default user mapping"

  3. Mit User-Mapping und mit User-Mapping-Datei → Gebundenes User-Mapping

Zu den Unterschieden siehe Zugriff im jeweils anderen Betriebssystem.

Standard-Einstellungen

Die für automatisches Einbinden externer Dateisysteme sowie fürs Einbinden mittels Mausklick bzw. über gio mount -d oder udisksctl mount -b gültigen Standard-Einstellungen werden durch UDisks für jeden Dateisystemtyp festgelegt und können sich zwischen Ubuntu- und Kernel-Versionen ändern.

In Ubuntu 22.04 LTS gilt für die Besitz- und Zugriffsrechte[6]:

  • Alle Ordner und Dateien sind Eigentum von Root oder des jeweiligen Benutzers (uid=$USER,gid=$USER).

  • Alle haben vollen Zugriff (Modus 0777 bzw. umask=000)

  • Im Dateisystem vorhandene Besitz- und Zugriffsrechte werden ignoriert, gleichgültig ob diese in Windows oder Linux eingerichtet wurden.

  • Im eingehängten Dateisystem können auch keine Besitz- oder Zugriffsrechte eingerichtet, geändert oder verwaltet werden.

Die Standard-Einstellungen für die Besitz- und Zugriffsrechte[6] gelten nicht, wenn sich im Dateisystem eine Datei .NTFS-3G/UserMapping befindet (s.u. Praktische Hinweise).

Alle Standard-Einstellungen können generell durch Konfiguration von Udisks[3] oder individuell für einen Datenträger durch einen vorbereitenden Eintrag in /etc/fstab[2] überschrieben werden.

Achtung!

Es kann ein erhebliches Sicherheitsrisiko bedeuten, Dateisysteme des Typs NTFS mit sensiblen Daten unter den Standard-Einstellungen von NTFS-3G einzubinden, weil dann dort jedermann uneingeschränkten Zugriff auf alle Dateien hat. Ganz besonders gilt dies für Windows-Systempartitionen in Dual-Boot-Systemen.

Simulation von Dateirechten

Ähnlich wie auch beim Einbinden eines Dateisystems des Typs VFAT oder exFAT[4] möglich, kann NTFS-3G beim Einbinden von Dateisystemen für diese Besitz- und Zugriffsrechte simulieren. Die simulierten Dateirechte gelten dann nur, solange das Dateisystem eingebunden bleibt (sind transient), und können bei jedem erneuten Einbinden wieder unabhängig von ihren vorherigen Werten neu festgelegt werden. Echte (persistente) Dateirechte, falls vorhanden, werden ignoriert.

Die simulierten Dateirechte gelten immer für das gesamte eingebundene Dateisystem und auch für alle nach dem Einbinden dort erzeugten oder dorthin kopierten bzw, verschobenen Ordner und Dateien. Sie können mit dem Befehl chmod allenfalls weiter eingeschränkt, nicht aber erweitert werden. Der Befehl chown ist bei simulierten Dateirechten unwirksam.

Optionen uid und gid

Mit den Optionen uid=UID und gid=GID legt man fest, welcher Benutzer und welche Gruppe simuliert werden. Für UID und GID kann man wahlweise die numerischen Werte oder die Namen eintragen. Fehlt der Eintrag für gid, so wird die Hauptgruppe des angegebenen Benutzers gewählt. Fehlt hingegen der Eintrag für uid, so erscheint root als Eigentümer.

Optionen umask, fmask und dmask

Auch die Zugriffsrechte auf Ordner und Dateien können bereits beim Einbinden eingeschränkt werden. Möchte man für Ordner und Dateien die gleichen Einschränkungen vornehmen, geschieht dies mittels umask. Getrennte Einschränkungen sind mit dmask (für Ordner) und fmask (für Dateien) möglich.

Bei diesen Optionen handelt es sich um negative Maskierungen in oktaler Darstellung (siehe dazu Unix-Dateirechte und umask), d.h. die angegebenen Bits werden aus der Standard-Einstellung gelöscht. So bewirkt z.B. die Option umask=0027 auf internen Dateisystemen den Modus 0750.

Hinweis:

Die hier verwendete „negative“ Maskierung darf nicht mit der „positiven“ Maskierung verwechselt werden, die z.B. in Samba verwendet wird.

Die Optionen uid und gid bieten zusammen mit umask, fmask und dmask bei Dual-Boot einen gewissen Schutz gegen unerlaubte Zugriffe im Windows-Dateisystem. Einen noch wirksameren Schutz bietet jedoch das gebundene User-Mapping.

⚓︎

Echte (persistente) Linux-Dateirechte

In NTFS können im Gegensatz zu VFAT (FAT16/32) und exFAT echte, an die Datei gebundene Besitz- und Zugriffsrechte verwaltet werden. Hiervon macht Windows stets Gebrauch. Auch für Linux besteht diese Möglichkeit. Dafür gibt es grundsätzlich zwei Wege:

  1. Entweder der Dateisystemtreiber legt neben der vorhandenen Rechteverwaltung von Windows eine von dieser unabhängige eigene, nur in Linux verwendete und nur für Linux gültige Rechteverwaltung an,

  2. Oder der Dateisystemtreiber realisiert seine Rechteverwaltung für Linux auf der Basis der Windows-Rechteverwaltung und fügt die Linux-Rechteverwaltung in diese ein.

NTFS-3G geht den zweiten Weg. Da aber die Verwaltung von Besitz- und Zugriffsrechten in Windows anders strukturiert ist als in Linux, muss dafür deren Struktur von Linux auf diejenige in Windows abgebildet ("gemappt") werden. Das Verfahren nennt sich User-Mapping.

Achtung!

Auch der Kernel-Treiber ntfs3 kann für Linux persistente, an die Datei gebundene Besitz- und Zugriffsrechte einrichten und verwalten. Dies geschieht jedoch auf andere Art als bei NTFS-3G und ist zu dessen Rechteverwaltung nicht kompatibel. Lässt es sich nicht vermeiden, beide Treiber zu verwenden, sollte man bei NTFS-3G unbedingt auf die Verwendung echter, persistenter Dateirechte verzichten!

Optionen permissions und acl

Ist eine der Mount-Optionen permissions oder acl angegeben, dann richtet NTFS-3G für Linux eine vollwertige Verwaltung von Besitz- und Zugriffsrechten ein. Diese Rechte sind dann im Gegensatz zu den über die Optionen uid, gid und umask simulierten Rechten persistent, d.h. sie bleiben auch nach dem Aushängen des Dateisystems bestehen. Auch lassen sich dann die Befehle chown, chgrp sowie chmod ohne Einschränkungen zum nachträglichen Ändern von Dateirechten verwenden.

Mapping von UID und GID

In einem Linux-System werden Benutzer und Gruppen über ihre UID und GID identifiziert. In einem Windows-System geschieht dies jedoch über einen komplex aufgebauten, zuweilen langen "Security Identifier" (SID). Wenn man in einem Dateisystem des Tps NTFS die dort von Windows verwendete Dateistruktur auch für Linux verwenden will, dann muss man UID und GID auf einen SID abbilden. Eine solche Übertragung von Daten aus einer Datenstruktur in eine andere nennt man "Mapping". Weil dafür keine weiteren Informationen nötig sind – z.B. welcher SID dafür gewählt werden muss – nennt Tuxera dieses Verfahren etwas unglücklich "default user mapping".

Hinweis:

Die Bezeichnung "default user mapping" kann sehr leicht missverstanden werden. Es werden nicht etwa unterschiedliche Benutzer ("User") einander zugeordnet, sondern es werden lediglich die Kennungen für Benutzer und Gruppen aus einer Datenstruktur in eine andere überführt. Und default bedeutet hier nicht etwa, dass dieses Verfahren angewendet würde, wenn gar keine Mount-Optionen angegeben sind. Es setzt vielmehr eine der Optionen permissions oder acl voraus.

Oder anders: Das "default user mapping" ist jenes User-Mapping, welches automatisch angewendet wird, wenn eines benötigt wird, aber der Anwender selbst keines definiert hat.

Da möglicherweise auf dasselbe Dateisystem auch von einem Windows-System aus zugegriffen werden soll, verwendet NTFS-3G bei diesem Verfahren nun für jeden UID bzw. GID einen SID aus einem Bereich, der nicht auch von Windows verwendet wird. Wenn man darauf achtet, dass niemals der gleiche SID unter Windows und Linux verwendet wird, dann können bei diesem "default user mapping" in derselben Datenstruktur Linux- und Windows -Dateirechte ohne sich gegenseitige Beeinträchtigung nebeneinander bestehen. Dabei gilt dann:

  • Weil NTFS-3G beim "default user mapping" für jeden UID bzw. GID immer den gleichen SID wählt, kann auf solche Datenträger problemlos auch von anderen Linux-Systemen aus zugegriffen werden.

  • Weil im "default user mapping" die in Windows- und in Linux-Systemen verwendeten SID strikt getrennt zu halten sind, ist es nicht zulässig, derselben Datei oder demselben Ordner in beiden Systemen Besitzer oder Gruppe zuzuweisen. Würde man z.B. in Linux mittels chown einer in Windows angelegten Datei einen Besitzer zuweisen, so würde man damit die Zuweisung von Windows zerstören. Entsprechendes gilt auch umgekehrt.

In der Praxis bedeutet dies vor allem, dass man dann, wenn es in einem Linux- und in einem Windows-System den gleichen Benutzer A gibt, auf gar keinen Fall in beiden Systemen A zum Benutzer derselben Datei machen darf, wie man es vielleicht vom Kernel-Treiber ntfs3 her gewohnt ist.

Mapping der Zugriffsrechte

Außer den UID und GID von Besitzer und Gruppe müssen für jede Datei und jeden Ordner aus Linux auch noch die jeweiligen Zugriffsrechte in die auch von Windows benutzte Datenstruktur übertragen werden. In Windows werden die 26 Zugriffsrechte über die "Access Control List" (ACL), festgelegt, die aber leider mit der in Ubuntu optional verwendeten POSIX-ACL[7] nicht identisch ist. Die Optionen permissions und acl unterscheiden sich nur darin, wie Zugriffsrechte aus Linux in Windows-ACL übertragen werden.

⚓︎

Tabelle 1: Optionen zur Steuerung der Besitz- und Zugriffsrechte
Option Beschreibung
permissions Die in Linux immer verwendeten UNIX-Dateirechte Lesen, Schreiben, Ausführen werden in die Windows-ACL übertragen, was keinerlei Probleme bereitet. NTFS-3G bildet dabei auch noch die Sonderrechte ab. Die Verwaltung der gesamten UNIX-Dateirechte in einem Dateisystem des Typs NTFS stellt sich in Linux genauso dar wie in einem üblichen Linux-Dateisystem wie z.B. ext3/4.
acl Diese Option schließt automatisch die Option permissions mit ein, und zusätzlich werden noch die in Ubuntu optionalen POSIX-ACL[7] in die Windows-ACL übertragen. Auch dies ist lückenlos möglich, wobei allerdings auch von Windows nicht interpretierbare ACL entstehen können. Dies spielt im default user mapping keine Rolle, weil die SID-Bereiche für Windows und Linux getrennt bleiben.
usermapping= Identifiziert die zu verwendende User-Mapping-Datei. Siehe Gebundenes User-Mapping. Wenn eine solche Datei gefunden wird, werden die hier folgenden Optionen ignoriert.
uid= Definiert bei simulierten Dateirechten Besitzer und Gruppe. Siehe Optionen uid/gid. Unwirksam bei User-Mapping.
gid=
dmask= Deaktiviert genannte Zugriffsrechte. Siehe Optionen dmask / fmask / umask. Unwirksam bei User-Mapping.
fmask=
umask=

Experten-Info:

Die Option acl ist in NTFS-3G nur dann verfügbar, wenn diese bereits beim Kompilieren vorgesehen wurde. Bei Ubuntu ist dies Standard.

Siehe auch Tabelle 4.

Eigenschaften im fremden Dateisystem

Greift man in einem Windows-System auf ein Dateisystem zu, auf der in einem Linux-System mit dem "default_user_mapping" Dateien angelegt wurden, dann haben alle Benutzer und Gruppen von Linux in Windows einen SID, aber damit noch keinen Namen. Sie sind damit als weitere, namenlose Benutzer dem Windows-System eingegliedert, und andere Windows-Benutzer haben dort für diese Dateien genau die Rechte, die in Linux "Anderen" zugeteilt wurden. In umgekehrter Richtung ist es jedoch anders: Durch das "default user mapping" werden den Windows-Benutzern unter Linux keine UID und GID zugeordnet. Sie werden damit auch nicht ins Linux-System eingefügt. Ihre Dateien gehören damit unter Linux dem Benutzer root, und jedermann hat darauf vollen Zugriff.

⚓︎

Windows-Kompatibilität

Vor allem in einem Dual-Boot-System würde man gerne Ordnern und Dateien im Windows- und im Linux-System die gleichen Besitz- und Zugriffsrechte zuweisen. Das "default user mapping" kann dieses nicht leisten. Mehr noch: Es verbietet sogar, dies nachträglich noch von Hand vorzunehmen.

Anders wäre dies, wenn NTFS-3G den betroffenen Dateien von vornherein, d.h. schon beim Einbinden, für das Mappen von UID und GID genau den SID zuweisen würde, der ihr bereits in Windows zugeordnet ist. Das User-Mapping ermöglicht dies zwar grundsätzlich; da jedoch NTFS-3G selber diesen SID ja gar nicht kennt, muss man ihm dieser mittels einer User-Mapping-Datei mitgeteilt werden.

Gebundenes User-Mapping

Durch die User-Mapping-Datei wird nun die Linux-Benutzerverwaltung ganz speziell an ein ganz bestimmtes Windows-System gebunden. Bei diesem gebundenen User-Mapping kann dann der Treiber NTFS-3G nach einem vorgegebenen, bei permissions und acl unterschiedlichen Schema auch die Zugriffsrechte synchronisieren, sodass eine im Rahmen der Möglichkeiten optimale Übereinstimmung der Dateieigenschaften mit Windows erreicht wird.

Im gebundenen User-Mapping kann NTFS-3G die UID und GID aber immer nur mit Hilfe genau dieser User-Mapping-Datei aus den verwendeten SID rekonstruieren. Im Gegensatz zum "default user mapping" kann dieses gebundene User-Mapping deshalb nicht für alle Linux-Systeme gleichermaßen gültig sein. Ohne die User-Mapping-Datei oder auch mit einer anderen, inhaltlich verschiedenen User-Mapping-Datei läuft das Linux-Rechtesystem beim gebundenen User-Mapping ins Leere.

Das vom "default user mapping" grundsätzlich verschiedene gebundene User-Mapping wird der Einfachheit halber oft auch ohne Attribut als User-Mapping bezeichnet.

User-Mapping-Datei

Struktur

Die User-Mapping-Datei ist eine reine Textdatei. Die einzelnen Zeilen dieser Datei sind durch Doppelpunkte in drei Felder unterteilt. Das erste Feld enthält einen UID, das zweite einen GID und das dritte den jeweils zugeordneten SID. Wegen der andersartigen Gruppen-Struktur kann es sinnvoll sein, einem Benutzer und seiner Hauptgruppe einen gemeinsamen SID zuzuordnen. Dann werden in derselben Zeile beide Felder, das für den UID und das für den GID, ausgefüllt. Soll der SID aber nur entweder für einen UID oder einen GID gelten, dann lässt man das nicht gebrauchte Feld frei. Beispiel:

:1000:S-1-5-21-4055622046-905823102-1685531486-1003
:users:S-1-5-21-4055622046-905823102-1685531486-513
1000:1000:S-1-5-21-4055622046-905823102-1685531486-1001

Statt numerischer UID und GID dürfen auch Benutzer- und Gruppenname eingetragen werden. Und wichtig: Die User-Mapping-Datei muss mit einem Zeilenwechsel ("Leerzeile") abgeschlossen werden!

Name und Ort

Diese User-Mapping-Datei darf sich mit beliebigem Namen an jeder Stelle im Dateisystem befinden. Mit der zusätzlichen Mount-Option usermapping wird der Pfad zu dieser User-Mapping-Datei festgelegt. Beispiel für einen Eintrag in /etc/fstab:

/dev/sdb1 /media/sdb1 -t ntfs-3g defaults,usermapping=.NTFS-3G/UserMapping

Ein absoluter Pfad bezieht sich dabei immer auf das gesamte Dateisystem des einbindenden Rechners, ein relativer Pfad (wie im Beispiel) bezieht sich auf das Wurzelverzeichnis de einzubindenden Dateisystems des Typs NTFS. Es ist oft sinnvoll, für die Datei einen versteckten Pfad zu wählen.

Wird die Option usermapping nicht angegeben, sucht NTFS-3G automatisch unabhängig von den übrigen Mount-Optionen immer im einzubindendem Dateisystem nach der versteckten Datei .NTFS-3G/UserMapping.

Findet nun NTFS-3G eine User-Mapping-Datei, so werden ggf. vorhandene Optionen uid, gid, umask, dmask, fmask ignoriert und automatisch die Option permissions aktiviert sowie für das weitere Vorgehen (ggf. transparent) die Option acl zugrunde gelegt.

Datei erstellen

Wenn man die SID für alle betroffenen Benutzer und Gruppen kennt, lässt sich die UserMaping-Datei leicht in jedem Editor von Hand erstellen. Um die SID aller in einem Windows-System vorhandenen Benutzer und Gruppen zu erhalten, öffnet man dort eine PowerShell als Administrator und gibt nacheinander folgende Zeilen ein:

# Windows PowerShell Administrator:
get-localuser | select name,sid
get-localgroup | select name,sid 

Daraus wählt man die benötigten SID aus.

Noch einfacher geht es mit dem von Tuxera mitgelieferten Hilfsprogramm ntfsusermap. Man hängt das einzubindende Dateisystem (hier z.B./dev/sdb1) zunächst nicht ein und gibt in Linux in einem Terminal folgende Befehlszeile ein:

# Linux Terminal:
sudo ntfsusermap /dev/sdbXY 

Man wird nun für alle Dateien im betreffenden Dateisystem, bei denen zwar ein SID, aber UID oder GID noch nicht festgelegt sind (d.h. die in Windows erstellten Ordner und Dateien) gefragt, welchem Besitzer und welcher Gruppe diese in Linux zugeordnet werden sollen. Aus diesen Informationen erstellt das Programm dann eine vollständige User-Mapping-Datei, die nur noch an die gewünschte Stelle kopiert werden muss. Nach dem (ggf. erneuten) Einhängen des Dateisystems wird sie dann berücksichtigt.

Es kann sein, dass diese User-Mapping-Datei nicht alle Benutzer des Linux-Systems umfasst, weil es im Windows-System kein passendes Nutzerkonto (account) gibt oder im Dateisystem noch keine passenden Dateien vorhanden sind. Für diese „überzähligen“ Benutzer geht dann NTFS-3G gemäß dem "default user mapping" vor.

Rangfolge der Optionen

Manche der für NTFS-3G zulässigen Mount-Optionen schließen einander aus:

  • Die für die transiente Simulation von Dateirechten relevanten Optionen uid=…, gid=…, umask=…, dmask=…, fmask=… und die für persistente Dateirechte relevanten Optionen permissions und acl schließen einander aus.

  • Die Option acl umfasst die Option permissions und hat deshalb stets Vorrang vor dieser.

Man wird es nach Möglichkeit vermeiden, einander widersprechende Optionen in einem Mount-Befehl oder in einer Zeile der Datei fstab zu verwenden. Sollte dies trotzdem einmal geschehen, gilt folgende Rangfolge (absteigende Priorität):

  • Wenn NTFS-3G keine User-Mapping-Datei vorfindet:

    1. uid=…, gid=…, umask=…, dmask=…, fmask=…

    2. acl

    3. permissions

  • Wenn eine User-Mapping-Datei gefunden wird:

    1. acl

    2. permissions

    3. Falls weder permissions noch acl angegeben ist, gilt transparent permissions.

    4. uid=…, gid=…, umask=…, dmask=…, fmask=… werden ignoriert.

Praktische Hinweise

  • Bei Datenträgern, die nur zum Datenaustausch dienen (USB-Sticks, SD-Karten usw.), wird man meist auf persistente Dateirechte verzichten.

  • Möchte man auf solchen Datenträgern aber eine persistente Verwaltung von Linux-Dateirechten einrichten, die auch beim automatischen Einhängen oder Einhängen mit Mausklick wirksam wird, kann man am Ort .NTFS-3G/UserMapping eine triviale User-Mapping-Datei ohne Angabe von UID und GID anbringen, dort z.B. folgende Zeile

    ::S-1-5-21-3141592653-589793238-462643383-10000

    eintragen und diese mit abschließen (wichtig!). Die ersten beiden Felder für UID und GID bleiben leer, der SID muss beginnen mit S-1-5-21-, es folgen beliebig wählbare Zahlen kleiner 232, und die letzte der Zahlen muss mindestens 10000 sein. Die Datei wird beim Einhängen gefunden, bewirkt aber nichts weiter, als dass das Dateisystem transparent mit der Option permissions eingehängt wird (acl würde UID und/oder GID benötigen). Eine Bindung an ein bestimmtes Windows-System entsteht dadurch nicht.

  • Für Dateisysteme, auf denen man die Datei- und Rechteverwaltungen von Windows und Linux getrennt halten will und möglicherweise von jeweils anderen System aus nur lesend zugreifen möchte, bietet sich das "default user mapping" mittels einer der Optionen permissions oder acl (s.o.) an. Doch dieses bietet keinen wirksamen Schutz vor unerlaubten oder versehentlichen Übergriffen!

  • Für interne Dateisysteme des Typs NTFS in Dual-Boot Systemen bietet das gebundene User-Mapping mit User-Mapping-Datei die bestmögliche Anpassung der Benutzer- und Zugriffsrechte-Verwaltungen und damit gleichzeitig den besten Schutz gegen unerlaubte Übergriffe ins jeweils andere System. Die User-Mapping-Datei bringt man dann bevorzugt am vorgeschlagenen Ort .NTFS-3G/UserMapping unter.

  • Bei externen Datenträgern, die zwar in der Regel in einer bestimmten Kombination eines Windows- und eines Linux-Systems, aber gelegentlich auch anders verwendet werden, kann man die User-Mapping-Datei an einem Ort unterbringen, an dem sie nur über die Mount-Option usermapping=… gefunden wird.

Zugriff im jeweils anderen Betriebssystem

Je nach den Optionen in NTFS-3G unterscheiden sich für Ordner und Dateien, die im jeweils anderen Betriebssystem erstellt wurden, die Besitz- und Zugriffsrechte. Eine verkürzte tabellarische Übersicht kann hier eine erste Orientierung bieten:

Tabelle 2: Besitz und Zugriff in Windows, Dateien in Linux angelegt
Betriebsart Zugriff in Windows
kein User-Mapping Besitzer ist die Gruppe Administratoren. Jeder hat Vollzugriff.
default user mapping Falls uid, gid, dmask, fmask oder umask angegeben sind, dann wie 'kein User-Mapping'. Andernfalls Besitzer fremde SID. Die Zugriffsrechte für Windows-Benutzer werden über Jeder erteilt. Die Zugriffsrechte von Jeder entsprechen dabei den Zugriffsrechten in Linux für Andere. Die Standard-Windows-Gruppen Administratoren und System haben alle Rechte außer Vollzugriff. Die Rechte des Linux-Besitzer und -Gruppe werden auf ein unbekanntes Konto mit fremdem SID abgebildet.
gebundenes User-Mapping Gegebenenfalls werden uid, gid, dmask, fmask und umask ignoriert. Besitzrechte werden gemäß User-Mapping-Datei auf den SID übertragen, Zugriffsrechte werden je nach Option permissions oder acl auf Windows-ACL übernommen.
Tabelle 3: Besitz und Zugriff in Linux, Dateien in Windows angelegt
Betriebsart Zugriff in Linux
kein User-Mapping Gegebenenfalls Simulation von Dateirechten mittels uid, gid, dmask, fmask und umask. Sonst Besitzer und Gruppe entweder root:root oder $USER:$USER, und jedermann hat alle Rechte (rwx).
default user mapping Falls uid, gid, dmask, fmask oder umask angegeben, dann wie 'kein User-Mapping'. Andernfalls Besitzer und Gruppe immer root:root, und jedermann hat alle Rechte (rwx).
gebundenes User-Mapping Gegebenenfalls werden uid, gid, dmask, fmask und umask ignoriert. Besitzrechte werden gemäß User-Mapping-Datei von SID übernommen, Zugriffsrechte werden von Windows-ACL je nach Option permissions oder acl auf UNIX-Dateirechte oder POSIX-ACL[7] übertragen.

Ein mittels trivialer User-Mapping-Datei ohne Angabe von UID und GID nur scheinbar gebundenes User-Mapping (siehe Praktische Hinweise) verhält sich wie ein "default user mapping" mit der Option permissions, jedoch werden ggf. die Optionen uid, gid und umask ignoriert.

Weitere Optionen

Im NTFS-3G-Handbuch 🇬🇧 werden 37 spezielle Mount-Optionen aufgeführt, die NTFS-3G zusätzlich zu den Standard-Optionen von mount unterstützt. Es würde zu weit führen, alle diese hier aufzuzählen. Außer den bereits beschriebenen sind davon noch folgende von besonderer praktischer Bedeutung:

⚓︎

Tabelle 4: Ausgewählte Optionen für ntfs-3g
Option Beschreibung
compression In als „komprimiert“ gekennzeichneten Ordnern werden neue Dateien automatisch komprimiert gespeichert. Bereits existierende Dateien werden aber nicht automatisch komprimiert. Ist Vorgabe.
nocompression Neu hinzukommende Dateien werden unkomprimiert gespeichert, auch in als „komprimiert“ gekennzeichneten Ordnern. Existierende komprimierte Dateien können trotzdem gelesen und verändert werden.
hide_dot_files Unter Linux versteckte neue oder neu benannte Dateien (deren Name mit einem Punkt beginnt) werden auch für Windows als „versteckt“ gekennzeichnet. Bereits existierende Dateien werden aber nicht automatisch versteckt.
hide_hid_files Unter Windows versteckte Dateien werden auch unter Linux nicht angezeigt.
inherit Wie in Windows werden beim Anlegen neuer Unterordner und Dateien die Zugriffsrechte vom jeweiligen Ordner übernommen („geerbt“). Die Eigentumsrechte werden davon nicht berührt.
recover NTFS-3G wird versuchen, auch ein von Windows nicht ordnungsgemäß ausgehängtes Dateisystem einzuhängen. Ist Standard.
norecover Dateisysteme, die unter Windows nicht ordnungsgemäß ausgehängt wurden, werden nicht eingehängt.
windows_names Beim Anlegen und Umbenennen sind nur in Windows erlaubte Dateinamen zulässig. Alle Steuerzeichen (ASCII 0-31) und die Zeichen " * : < > ? / \ | sind verboten. Dies ist für den Dateisystemtreiber selbst optional; wird aber von UDisks standardmäßig vorgegeben und gilt daher für z.B. gio mount -d und udisksctl -b.

Die Mount-Option force ist obsolet und durch die Option recover ersetzt.

Siehe auch Tabelle 1.

Verknüpfungen

NTFS-3G unterstützt sowohl feste als auch symbolische Verknüpfungen (Hardlinks und Symbolische Links) in Dateisystemen des Typs NTFS. In Linux per ln- s erzeugte und auch funktionelle symbolische Links sind jedoch nicht zu Windows kompatibel und erscheinen deshalb dort als ungültig. Symbolische Links sind somit nur bei ausschließlich von Linux verwendeten Dateisystemen sinnvoll und können dann auch auf Ziele außerhalb des Dateisystems zeigen.

Ebenso erkennen auch die Treiber NTFS-3G und ntfs3 die mit dem jeweils anderen Treiber angelegten Symlinks nicht an.

Daten-Sicherheit

Journaling

NTFS-3G unterstützt „Partielles Journaling“ und entspricht damit ungefähr der Standard-Einstellung bei ext3/4. Dies bedeutet, dass nach einem ungeregelten Abbruch (auch Absturz) das inkonsistent gewordene Dateisystem als Ganzes wieder repariert werden kann. Dateien, bei denen im Moment des Abbruchs gerade Schreibvorgänge im Gange waren, können aber trotzdem beschädigt sein. Ein Datenverlust kann deshalb nicht sicher ausgeschlossen werden.

Ein bei ext3/4 optional einstellbares "Full Journaling" lässt sich mit NTFS-3G nicht verwirklichen.

Dateisystem-Inkonsistenz

Dateisysteme mit fehlerhaftem Journal werden standardmäßig von NTFS-3G eingelesen und dabei repariert. Dies lässt sich durch die Mount-Option norecover unterbinden. Stärker beschädigte Dateisysteme können eventuell von NTFS-3G nicht repariert werden; es kann sein, dass diese sich dann auch gar nicht mehr einbinden lassen, ohne dass vorher in Windows eine Reparatur mittels chkdsk /f durchgeführt wird.

Auch das Tool ntfsfix (s.u.) kann oftmals ein solches stark beschädigtes Dateisystem nicht reparieren; es setzt deshalb einen Merker ("Dirty-Bit"), welcher beim nächsten Einbinden in Windows dort automatisch die Ausführung von chkdsk veranlasst. Bei ntfsfix -d unterbleibt das Setzen dieses Merkers.

Werkzeugprogramme

In allen derzeit für Ubuntu verfügbaren Paketen von NTFS-3G sind die Hilfsprogramme der Tool-Sammlung "ntfsprogs" bereits enthalten.

Auch GParted benötigt zum Erstellen und Bearbeiten von Datenträgern den Typs NTFS die Routinen von "ntfsprogs".

Um Versionsnummer und Syntax der einzelnen Routinen zu erhalten, genügt es, diese in einem Terminal ohne Parameter aufzurufen.

Derzeit sind folgende Routinen vorhanden (Stand April 2024):

Tabelle 5: Programme in der Sammlung ntfsprogs
Befehl Beschreibung
mkntfs Formatiert eine Partition mit dem Dateisystem NTFS.
ntfs.probe Prüft die Einhängbarkeit eines Dateisystems.
ntfscat Liest Dateien und gibt deren Inhalt aus.
ntfsclone Erstellt ein Abbild eines Dateisystems oder stellt dieses aus dem Abbild wieder her.
ntfscluster Ermittelt den Besitzer eines bestimmten Sektors oder Clusters im Dateisystem.
ntfscmp Dateisysteme vergleichen.
ntfscp Überschreibt Dateien.
ntfsdecrypt Entschlüsselt Dateisystem oder einzelne Dateien.
ntfsfallocate Ordnet Cluster einem bestimmten Attribut oder einer bestimmten Datei zu.
ntfsfix Identifiziert Fehler im Dateisystem und versucht deren Bereinigung. Zwingt zusätzlich Windows, beim nächsten Start das Dateisystem mittels chkdsk zu prüfen und ggf. zu reparieren. Dieses Programm ist kein vollwertiges Äquivalent zum Windows-Befehl chkdsk, da zwar Dateifehler zuverlässig erkannt werden, doch können damit derzeit noch nicht alle auch repariert werden.
ntfsinfo Zeigt einige Informationen zu einem Dateisystem oder zu einer darin befindlichen Datei/Ordner.
ntfslabel Zeigt das Label eines Dateisystems an und erlaubt es, dieses zu verändern.
ntfsls Listet Informationen über Dateien in einem Verzeichnis auf.
ntfsmove Ändert Dateinamen oder verschiebt Datei in einen anderen Ordner.
ntfsrecover Stellt die durch Windows übergebenen Aktualisierungen wieder her.
ntfsresize Ändert die Größe des Dateisystems (und der Partition?). Kann (angeblich) auch ohne vorherige Defragmentierung verwendet werden.
ntfssecaudit Überprüft und bearbeitet Sicherheits-Informationen einer Datei.
ntfstruncate Kürzt spezifizierte Attribute von Inodes.
ntfsundelete Stellt gelöschte Dateien wieder her.
ntfsusermap Hilft ein Mapping von Windows-Benutzern und -Gruppen zu Linux-Benutzern und -Gruppen zu erstellen.
ntfswipe Löscht diverse (über Optionen ausgewählte) Metadaten.

Die früher vorhandene Routine ntfsmount ist durch den Befehl ntfs-3g ersetzt.

Zur Anwendung der Routinen braucht das betroffene Dateisystem nicht eingebunden (gemountet) zu sein. Deshalb können die meisten Routinen auch im Zusammenhang mit dem Modul ntfs3 des Kernels verwendet werden.

Möchte man den Treiber ntfs-3g nicht verwenden, wohl aber die Werkzeugprogramme, so kann man ntfs-3g durch folgende Programmzeile deaktivieren:

sudo chmod -x /bin/ntfs-3g  

Problembehebung

Dateioperationen werden langsamer

Das Dateisystem NTFS neigt bekanntlich zur Fragmentierung, wodurch sich bei mechanischen Laufwerken der Zugriff u.U. wesentlich verlangsamt. Diese sollten deshalb nach längerem Gebrauch defragmentiert werden. Wenn möglich, sollte man die Defragmentierung unter Windows vornehmen. Von der Defragmentierung unter Linux wird abgeraten. Bei Flash-Speichern, vor allem auch SSD, ist eine Defragmentierung grundsätzlich nicht sinnvoll.

Remount nicht möglich

Hat man z.B. ein Dateisystem mit Option ro eingebunden, funktioniert ein Remount mit Schreibrechten nicht (Stand Ubuntu 22.04), weil ntfs-3g die Mount-Option remount nicht unterstützt.

Zur Abhilfe kann man das Dateisystem aushängen und dann mit der Option rw erneut einhängen.

⚓︎

Optionen user, users und nouser unzulässig

Seit Ubuntu 22.04 führt ntfs-3g den Befehl mount bzw. Einträge in der Datei fstab nicht mehr erfolgreich aus, wenn eine der Optionen user, users und nouser verwendet wird. Dies kann zum Scheitern des Rechnerstarts führen.

Abhilfe:

  • In der Datei /etc/fstab die Optionen user, users oder nouser mit ntfs-3g nicht mehr verwenden.

  • Zur Einbindung ohne Root-Rechte nicht mehr mount, sondern die auf UDisks zurückgreifenden Befehle gio mount -d oder udisksctl mount -b verwenden. Desktops greifen für das Einhängen per Hotplug oder Mausklick ebenfalls auf diese Programme zu.

Dateinamen werden unkenntlich

Enthält ein Dateiname eines oder mehrere der Steuerzeichen (ASCII 0-31) oder der Sonderzeichen " * : < > ? / \ |, so wird die Datei beim Einhängen in Windows umbenannt und ist so anschließend auch in Linux nicht mehr erkennbar.

Abhilfe: NTFS erlaubt grundsätzlich im Dateinamen auch von Windows nicht akzeptierte Zeichen. Mit der Option windows_names lässt sich dies unterbinden. Von UDisks wird diese Option standardmäßig für udisksctl mount -b, gio mount -d und damit auch für das Einbinden mittels GUI vorgegeben. Bei Einträgen in fstab und beim Befehl mount muss man sie hingegen explizit angeben.

Nach 'ntfsfix' scheitert Einhängen

Hat man eine Partition mit ntfsfix überprüft oder repariert, dann lässt sie sich manchmal anschließend nicht mehr einhängen, auch nicht mit der Option norecover.

Abhilfe: ntfsfix setzt standardmäßig für die Partition das "Dirty-Bit" (s.o.). Will man auf die empfohlene zusätzliche Überprüfung in Windows mittels chkdsk /f verzichten, dann genügt es, ntfsfix -d auszuführen. Danach lässt sich die Partition dann meistens ohne weiteres einhängen.

Diese Revision wurde am 1. September 2024 10:18 von kB erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Windows, System, Dateisystem