Kann ich Benutzerberechtigungen für eine externe ext4-Festplatte auf mehrere Computer übertragen?

16

Ich habe ein externes USB 3-Laufwerk (2 TB Kapazität), das höchstwahrscheinlich von Maschine zu Maschine verschoben wird. Die Festplatte verfügt über eine GUID-Partitionstabelle und eine ext4-Partition. Ich kann nicht auf den Datenträger schreiben, es sei denn, ich erhöhe den Prozess ( sudo).

Ab sofort denke ich darüber nach, eine oder beide der folgenden Methoden auszuprobieren und möchte die Nachteile der einzelnen Methoden kennen.

  1. chmod 777 /mnt/externalDrive
  2. chown nobody:nogroup /mnt/externalDrive

Was passiert, wenn ich 777 die Erlaubnis gebe und Benutzer1 (UID: 1005) darauf schreibt und die Festplatte später auf einen anderen Computer verschiebe, auf dem Benutzer7 die UID: 1005 hat? Wird Benutzer7 der Eigentümer der Datei auf diesem Computer? Es scheint mir, dass ich in regelmäßigen Abständen chown -R nobody:nogroup /mnt/externalDriveauf der Festplatte laufen muss .

Habe ich eine offensichtliche schlechte Praxis in Erwägung gezogen? Die Festplatte wird höchstwahrscheinlich Videos, Musik und Bilder enthalten, die nicht wie einige Finanzdaten geschützt werden müssen.

Lord Loh.
quelle
Ich bin mir nicht sicher, ob ich dir folge. Haben Sie versucht, die Berechtigungen auf dem externen Laufwerk festzulegen?
Ramesh
1
Ja. Ist das eine gute sache
Lord Loh.

Antworten:

19

Dies ist das Problem bei Mehrbenutzersystemen, insbesondere wenn Sie mehr als eines davon haben. ;) Es gibt keine wirklich gute Möglichkeit, das zu tun, was du willst. Ansätze, die mir in den Sinn kommen, wären

  • Auf jedem Computer, auf dem Sie Ihr externes Laufwerk verwenden, haben Sie dieselbe UID für Ihr Konto (tatsächlich nicht möglich, da höchstwahrscheinlich nicht alle Computer unter Ihrer Kontrolle stehen).
  • Verwenden eines Dateisystems, das die Eigentümer- / Gruppenkonzepte nicht kennt (FAT oder NTFS in den Sinn kommt, aber ... aaah, nein)

Der effektivste Ansatz wäre die Rückkehr zu gängigen Praktiken. Auf den meisten (mindestens) Linux-Systemen gibt es einige Gruppen, die normalerweise gemeinsame GIDs haben. Zum Beispiel wäre das users, was GID 100auf den meisten Linux-Distributionen hat. Wenn Sie es schaffen könnten, Ihr jeweiliges Benutzerkonto in dieser Gruppe zu haben, könnten Sie

  1. Machen Sie alle Dateien und Verzeichnisse auf Ihrem Laufwerk zu Eigentum dieser Gruppe
  2. irgendwie schaffen, entsprechende Gruppenrechte für diese Dateien und Verzeichnisse zu haben
  3. irgendwie schaffen es neue dateien mit entsprechendem gruppenbesitz bzw. Berechtigungen.

Erster und zweiter Punkt sind leicht zu erreichen ( chown, chmod). Der dritte Punkt ist etwas kniffliger.

Der Teil "Gruppeneigentum" ist relativ einfach: Sie können das SGID-Bit für alle Verzeichnisse auf dem Laufwerk festlegen. Das SGID-Bit, das auf Verzeichnisse angewendet wird, weist den Kernel an, sich BSDisch zu verhalten: BSD legt fest, dass jede Datei / jedes Verzeichnis, das unter einer bestimmten Verzeichnisgruppe erstellt wird, nicht der primären Gruppe des Prozesses gehört, der die Datei / das Verzeichnis erstellt (wie Linux), sondern vom Besitzer des Elternverzeichnisses.

Das Erlaubnisbit ist ein bisschen hart. Berechtigungen für neu erstellte Dateien / Verzeichnisse werden (unter anderem) durch umaskeine Bitmaske beeinflusst, die angibt, welche Bits nicht gesetzt werden sollen, wenn dies nicht ausdrücklich angegeben wird. Ein üblicher umaskWert ist beispielsweise 022, dass die Schreibbits für »Gruppe« und »andere« normalerweise nicht gesetzt werden sollten. Sie könnten Ihre ändern umaskzu 002wollen sagen Sie nicht , daß die Schreibberechtigungen für die Gruppe gelöscht werden , aber der Nachteil ist , dass Sie nicht dieser Wert verzeichnisbasierte einstellen und Sie in der Regel nicht wollen , Schreibberechtigungen haben für Ihre primäre Gruppe für jede Datei, die Sie erstellen.

Dies kann mithilfe von ACLs behoben werden: In einer ACL können Sie einen maskund einen defaultBerechtigungssatz festlegen, der für alle Dateien und Verzeichnisse gilt, die in einem Verzeichnis mit diesem ACL-Satz erstellt wurden. Eine mögliche Lösung für Ihr Problem wäre also

  • Stellen Sie sicher, dass Sie auf allen Systemen, auf denen Sie Ihr externes Laufwerk verwenden möchten, Mitglied einer gemeinsamen Gruppe sind
  • Machen Sie alle Dateien und Verzeichnisse auf Ihrem Laufwerk zu Eigentum dieser Gruppe und setzen Sie das SGID-Bit für alle Verzeichnisse
  • Ändern Sie die Zugriffssteuerungsliste aller Verzeichnisse so, dass sie eine Maske und Standardberechtigungen enthält, die den Kernel anweisen, jede neue Datei / jedes neue Verzeichnis mit für die Gruppe festgelegten Schreibberechtigungen zu erstellen.

Siehe setfacl(1)und acl(5)für weitere Details.

Andreas Wiese
quelle
1
In ext4, spinics.net/lists/linux-fsdevel/msg57240.html , schwebte ein Patch für sein und gid-Mapping herum , aber ich glaube nicht, dass er
durchgekommen
10

Es gibt noch eine ähnliche Frage und bindfs wird dort vorgeschlagen:

mkdir /home/$user/sda1
bindfs -u $user -g $group /mnt/sda1 /home/$user/sda1

OSX-Benutzer schlagen folgende noownersMount-Option vor:

Ignorieren Sie das Eigentumsfeld für das gesamte Volume. Dies bewirkt, dass alle Objekte als Eigentum der Benutzer-ID 99 und der Gruppen-ID 99 angezeigt werden. Die Benutzer-ID 99 wird als die aktuell gültige Benutzer-ID interpretiert, während die Gruppen-ID 99 direkt verwendet und in "unbekannt" übersetzt wird.

Michael Shigorin
quelle
bindfs ist ziemlich langsam. Wahrscheinlich, weil es sich um ein FUSE-Dateisystem handelt.
Navin
4

Der Eigentümer und die Gruppe einer Datei werden als Nummern gespeichert. Die Datei wird also im Besitz von uid = 1005 sein, unabhängig davon, mit welchem ​​Benutzer (oder überhaupt keinem) das System verbunden ist.

Wenn Sie den Benutzer / die Gruppe in "Niemand" ändern, wird Ihr Problem nicht behoben. Dann darf nur der Benutzer nobody (oder Mitglieder der Gruppe nobody) auf die Dateien zugreifen.

Leider glaube ich nicht, dass es eine Möglichkeit gibt, die Berechtigungsprüfung für ext4 zu deaktivieren. Siehe zum Beispiel Ist es möglich, Dateiberechtigungen auf einem ext3- oder ext4-Dateisystem zu deaktivieren?

derobert
quelle
2

Andreas Wiese sagt, wenn Sie eine gemeinsame Gruppen-ID für alle Hosts haben, können Sie Ihr Problem mit setgidBit und ACL lösen

Ich stelle die Frage Vordefinierte Gruppen-IDs in Linux-Distributionen?

Nach eigenen Recherchen wurde festgestellt, dass solche Gruppen in allen betroffenen Distributionen existieren: sysGruppenfreigabe-ID 3unter Debian, Ubuntu, RedHat, Fedora, CentOS, Suse, FreeBSD, OpenBSD, NetBSD, MacOSX, Solaris.

Mit diesem:

$ sudo chgrp -R sys /mnt/data/dir
$ sudo chmod -R g+s /mnt/data/dir
$ sudo setfacl -R -m g:sys:rwx /mnt/data/dir
$ sudo setfacl -R -d -m g:sys:rwx /mnt/data/dir

und Geschmack davon:

$ sudo adduser user sys

Sie userkönnen jede Datei lesen / schreiben /dir.

Die meisten Jobs mögen setgidetwas tun, aber leider haben Sie normalerweise wenig Kontrolle darüber umask. Daher wird ACL verwendet, um eine vollständige Lösung bereitzustellen.

Siehe auch:

gavenkoa
quelle