Wie erstelle ich ein ext4-formatiertes USB-Laufwerk mit vollen RW-Berechtigungen für jeden Linux-Computer?

14

Ich mag meinen USB - Stick zu formatieren ext4und einfach zu verwenden , wie ich jedes anderes typisches Nicht-Linux - Format - Laufwerk ( FAT32, exFAT, NTFS).

Das heißt, ich möchte in der Lage sein, den USB-Stick an einen meiner Linux-Computer anzuschließen und darauf zu lesen / schreiben, ohne die Berechtigungen anpassen zu müssen , wie z . B. Doing chmododer ähnliches chown.

Ich würde lieber eine GUI-Partitionssoftware wie GParted als Befehlszeilenbefehle verwenden, obwohl ich jede Lösung begrüße!

Ich bin mir sicher, dass ein Beitrag wie dieser für einige ein doppelter Flaggenhimmel ist, aber nachdem ich 6 ~ 10 SO und Forenbeiträge von Google durchsucht hatte, fand ich keine einfache Lösung für meine Frage. Anscheinend ging es bei allem darum, die Berechtigungen auf Benutzerbasis anzupassen. Vielleicht können Sie ext4Laufwerke einfach nicht mit dem gleichen hirnlosen Komfort wie verwenden NTFS.

Alnitak
quelle

Antworten:

19

Wie jedes Dateisystem im Unix-Stil enthält ext4 Standardkonventionen für den Besitz und die Berechtigung von Unix-Dateien. Das heißt, der Benutzer wird durch eine UID-Nummer identifiziert, und jeder Benutzer gehört zu einer oder mehreren Gruppen, wobei jede Gruppe durch seine GID-Nummer identifiziert wird. Jede Datei hat eine Eigentümer-UID und eine Gruppen-Eigentümer-GID. Die drei klassischen Unix-Dateiberechtigungssätze sind:

  • Ein Satz von Berechtigungen für den Eigentümer, identifiziert durch die UID-Nummer des Eigentümers
  • Ein Satz von Berechtigungen für den Gruppenbesitzer, identifiziert durch die GID-Nummer der Gruppe
  • eine Reihe von Berechtigungen für alle anderen

Um auf den Stick zugreifen zu können, ohne die Berechtigungen anpassen zu müssen, müssen Sie sicherstellen, dass alle auf dem Stick erstellten Dateien und Verzeichnisse automatisch über nicht einschränkende Berechtigungen verfügen. Das Problem ist, dass die Berechtigungen für neu erstellte Dateien durch den umaskWert gesteuert werden ... und Sie möchten ihn nicht ständig ändern, 000um Dateien auf dem USB-Stick zu erstellen und für den normalen Gebrauch auf den Standardwert (normalerweise 002oder 022) zurückzukehren . Ein einzelner Fehler kann dazu führen, dass Sie eine wichtige Konfigurationsdatei mit weit geöffneten Berechtigungen erstellen, die die Sicherheit Ihres Benutzerkontos gefährden oder andere kleinere Probleme verursachen kann.

Wenn Sie sicherstellen können, dass die UID-Nummer Ihres normalen Benutzers auf allen Linux-Systemen gleich ist und Sie sich nur um den Zugriff für diesen einen Benutzer kümmern (natürlich plus root), können Sie den USB-Stick einfach auf ext4 formatieren. Mounten Sie es zum ersten Mal und weisen Sie Ihrem regulären Benutzerkonto den Besitz seines Stammverzeichnisses zu, bevor Sie das Dateisystem verwenden.

Angenommen, dies /dev/sdX1ist die USB-Stick-Partition, in der Sie das Dateisystem erstellen möchten, und <username>Ihr Benutzername. Dies können Sie tun, wenn Sie den USB-Stick für die Verwendung einrichten:

sudo mkfs.ext4 /dev/sdX1
sudo mount /dev/sdX1 /mnt
sudo chown <username>: /mnt
sudo umount /mnt

Wenn Sie jedoch nicht garantieren können, dass UID / GID-Nummern übereinstimmen, und / oder mehrere Benutzer den USB-Stick verwenden möchten, müssen Sie nach dem Erstellen von ext4 etwas komplizierteres, aber dennoch einmaliges ausführen Dateisystem auf dem Stick.

Wir müssen eine Standard-ACL im Stammverzeichnis des USB-Stick-Dateisystems festlegen, die jedem in jeder neuen Datei oder jedem neuen Verzeichnis den vollständigen Zugriff zuweist. Um sicherzustellen, dass der Stick mit aktivierter ACL-Unterstützung tune2fsgemountet wird, müssen Sie die in den Metadaten des Dateisystems gespeicherten Standard-Mount-Optionen anpassen.

sudo mkfs.ext4 /dev/sdX1
sudo tune2fs -o acl /dev/sdX1
sudo mount /dev/sdX1 /mnt
sudo chown <username>: /mnt
chmod 777 /mnt
setfacl -m d:u::rwx,d:g::rwx,d:o::rwx /mnt
sudo umount /mnt

Angenommen, alle Ihre Systeme unterstützen ACLs auf ext4-Dateisystemen und jedes von Ihnen verwendete Tool zum Mounten von Wechselmedien ignoriert die aclMount-Option nicht. Sie sollten jetzt einen USB-Stick haben, auf dem alle darauf erstellten Dateien Berechtigungen -rw-rw-rw-und alle haben erstellte Unterverzeichnisse werden drwxrwxrwx+. Das Pluszeichen zeigt an, dass das Unterverzeichnis über eine ACL verfügt: Der für das Stammverzeichnis des Sticks konfigurierte benutzerdefinierte Standardberechtigungssatz wird auch von den Unterverzeichnissen geerbt und verhält sich gleich.

Die Eigentümer-UID / GID stimmt weiterhin mit der UID und der primären GID des Benutzers überein, der die Datei im Dateisystem erstellt hat. Aufgrund der entspannten Datei- und Verzeichnisberechtigungen sollte dies jedoch kein großes Problem darstellen.

Das einzige Problem, das ich erwarten könnte, ist, dass beim Kopieren von Dateien auf den USB-Stick standardmäßig versucht wird, die Dateiberechtigungen des Originals zu duplizieren, was in diesem Fall nicht gewünscht wird.

Wenn Sie beispielsweise eine Datei auf System A mit den Berechtigungen -rw-r - r-- erstellen und auf den Stick kopieren, verschieben Sie den Stick mit nicht übereinstimmenden UID-Nummern nach System B. Sie können die Datei auf System B weiterhin lesen, sie jedoch nicht auf dem Stick überschreiben, ohne zuvor die Originaldatei explizit zu löschen oder umzubenennen. Sie können dies jedoch tun, solange Sie Schreibzugriff auf das Verzeichnis haben, in dem sich die Datei befindet .

Dies kann tatsächlich eine nützliche Funktion sein: Wenn Sie dieselbe Datei auf mehreren Systemen ändern, werden Sie jedes Mal dazu gebracht, eine neue Version der Datei zu speichern, anstatt die One True File zu überschreiben ... und wenn die Datei wichtig ist, ist dies wichtig könnte tatsächlich eine gute Sache sein.

telcoM
quelle
2
Das wäre Reddit, Gold würde dir gegeben werden ;-) Vielen Dank!
jgomo3
Das Kopierproblem beißt mich ein wenig. Ich benutze rsync, um das zu umgehen rsync -rlt --no-p --chmod=ugo=rwX. Dies verwendet die Standardeinstellungen des Ziels, dh wie in den ACL-Berechtigungen angegeben.
Sircolinton
Problem: Ich habe Ihre zweite Methode ausprobiert und bin im ersten Schritt geblieben. Habe mein USB-Laufwerk (ext4) an / media / user / myUsbDriveName gemountet, dann sagte mkfs.ext4 / dev / sdb1: Es ist gemountet, willst du trotzdem fortfahren? Ja: Dateisystem kann nicht erstellt werden, da es bereitgestellt ist. OK, also habe ich es abmontiert (was meine ext-Festplatte ausgeschaltet hat) und es erneut versucht. Ergebnis: / dev / sdb1 existiert nicht
gloschtla
@gloschtla Sie versuchen wahrscheinlich, das Mounten / Aufheben der Bereitstellung mit einem GUI-Tool oder ähnlichem durchzuführen udisksctl, wodurch das Gerät auch für das sofortige Herausziehen des Netzsteckers beim Aufheben der Bereitstellung vorbereitet wird. mkfs.ext4Führen Sie dies für den Schritt nach dem Einstecken der Festplatte, jedoch vor dem eigentlichen Mounten aus, da Sie niemals mkfseine gemountete Diskette verwenden sollten.
TelcoM
Ich habe es geschafft, Ihr zweites Tutorial durchzugehen, nachdem ich mit gParted die vorhandene ext4-Partition (dev / sdb1) gelöscht hatte. Also folgte ich Ihrem Tutorial mit / dev / sdb
gloschtla