Linux: Gruppenbesitz an Dateien verlieren

8

Ich habe ein Projekt mit einer Reihe von Dateien, die ich unter Linux erstellt habe.

Und ich musste einem anderen Benutzer eine Schreibberechtigung erteilen. Also habe ich eine "Entwickler" -Gruppe erstellt, der er und ich angehören, und den Besitz der Dateien in diese Gruppe geändert.

Eine typische Datei verfügt jetzt über die folgenden Berechtigungen:

-rw-rw-r--  1 phil dev   5617 Jul 14 15:45 profile.html

Wenn ich jedoch die Datei profile.html bearbeite, wird sie auf diese Weise auf mich zurückgesetzt, und mein Kollege verliert die Fähigkeit zum Bearbeiten.

-rw-rw-r--  1 phil phil  5617 Jul 14 15:45 profile.html

Wie vermeide ich, dass es so zurückkehrt? War es falsch, den Besitzer zu wechseln? Oder wurde es mit den falschen Optionen gemacht? Oder hat das mit meiner Editor-Konfiguration (Emacs) zu tun?

Interstar
quelle

Antworten:

17

In dem enthaltenen Ordner möchten Sie die Gruppe in dev ändern und dann mark it set-gid verwenden.

chgrp dev <containing-folder>
chmod g+ws <containing-folder>

Das gesetzte gid-Bit erstellt Dateien, die in diesem Ordner erstellt wurden, um die Gruppe des Ordners zu erben und das setgid-Bit in neuen Ordnern zu markieren. Sie sollten beim Verschieben von Dateien in das Verzeichnis vorsichtig sein, da dadurch die vorhandenen Berechtigungen erhalten bleiben.

Frenchie
quelle
nur ein Heilmittel (siehe meine Antwort)
asdmin
7

Sie können das Dateisystem (unter der Annahme von ext2 / 3) auch mit der Option grpid mount mounten. Dadurch wird der Gruppenbesitzer beim Erstellen einer neuen Datei in einem Verzeichnis mit dem übergeordneten Verzeichnis identisch. Dann würden Sie es einfach so machen, dass das Verzeichnis, in dem diese Dateien existieren, der Gruppe 'dev' gehört.

So stellen Sie es erneut bereit, wenn es sich um die Root-Partition handelt (Beispiel):

sudo mount -o remount,grpid,rw,relatime,errors=remount-ro /

Aus 'man mount 8':

grpid or bsdgroups / nogrpid or sysvgroups
These options define what group id a newly created file gets.

Wenn grpid festgelegt ist, wird die Gruppen-ID des Verzeichnisses verwendet, in dem es erstellt wurde. Andernfalls (Standardeinstellung) wird die fsgid des aktuellen Prozesses verwendet, es sei denn, für das Verzeichnis ist das setgid-Bit gesetzt. In diesem Fall wird die gid aus dem übergeordneten Verzeichnis übernommen und das setgid-Bit wird auch gesetzt, wenn es sich um ein Verzeichnis selbst handelt.

Kyle Brandt
quelle
Sehr nützlicher Leckerbissen zu wissen +1
Frenchie
Wird dadurch auch die Schreibberechtigung der Gruppe beibehalten, wenn Sie eine Datei erstellen oder kopieren?
KB
1

Das Standardverhalten für Emacs besteht darin, die Sicherungsdatei durch Umbenennen zu erstellen. Aus dem Emacs-Handbuch:

Emacs kann die Originaldatei so umbenennen, dass sie zu einer Sicherungsdatei wird, und dann den zu speichernden Puffer in eine neue Datei schreiben. Nach diesem Verfahren beziehen sich alle anderen Namen (dh feste Links) der Originaldatei auf die Sicherungsdatei. Die neue Datei gehört dem Benutzer, der die Bearbeitung durchführt, und ihre Gruppe ist die Standardeinstellung für neue Dateien, die vom Benutzer in diesem Verzeichnis geschrieben wurden. Vom Benutzer in diesem Verzeichnis.

Es gibt verschiedene Möglichkeiten, dies zu ändern.

  • Stellen Sie die Gruppe und das Sticky-Bit ein, wie andere beschreiben.
  • Führen Sie 'newgrp dev' aus, bevor Sie die Datei bearbeiten, sodass Ihre Standardgruppe dev ist.

Oder emacs spezifisch:

  • Setzen Sie das Datei-Kostbarkeits-Flag in Emacs, wodurch das Verhalten geändert wird, um die Gruppe beizubehalten, aber andere Nebenwirkungen hat.
  • Stellen Sie Backup-by-Copying-When-Mismatch in Emacs ein, bei dem das Kopieren anstelle des Umbenennens verwendet wird, wenn sich der Eigentümer oder die Gruppe dadurch ändern würde.

Fügen Sie also zu Ihren .emacs hinzu:

(setq backup-by-copying-when-mismatch 't)

Meine Präferenz ist eigentlich 'newgrp dev', da es sich um einen expliziten Wechsel vom "persönlichen" Modus (die Dateien, die ich bearbeite, sind nur meine) zum Gruppenentwicklungsmodus handelt (die Dateien, die ich jetzt bearbeite, werden von der Gruppe gemeinsam genutzt).

jmanning2k
quelle
Dies ist die beste Antwort hier.
Christopher Neylan