2010-06-12 04:06:50 +0000 2010-06-12 04:06:50 +0000
86
86

Wie kann man neue Dateiberechtigungen vom übergeordneten Verzeichnis erben lassen?

Ich habe ein Verzeichnis namens data. Dann führe ich ein Skript unter der Benutzerkennung “robot” aus. robot schreibt in das Verzeichnis data und aktualisiert die Dateien darin. Die Idee ist, dass data sowohl für mich als auch für robot zum Aktualisieren offen ist.

Also richte ich die Berechtigung und die Eigentümergruppe wie folgt ein:

drwxrwxr-x 2 me robot-grp 4096 Jun 11 20:50 data

, wobei sowohl ich als auch der Roboter zur ‘robot-grp’ gehören. Ich ändere die Berechtigung und die Besitzergruppe rekursiv wie das Elternverzeichnis.

Ich lade regelmäßig neue Dateien in das Verzeichnis data mit rsync hoch. Leider erbt die neu hochgeladene Datei nicht die Berechtigung des Elternverzeichnisses, wie ich hoffe. Stattdessen sieht es so aus

-rw-r--r-- 1 me users 6 Jun 11 20:50 new-file.txt

Wenn der Roboter versucht, new-file.txt zu aktualisieren, scheitert er an der fehlenden Dateiberechtigung.

Ich bin nicht sicher, ob das Setzen von umask hilft. Auf jeden Fall folgen die neuen Dateien nicht wirklich.

$ umask -S
u=rwx,g=rx,o=rx

Ich bin oft verwirrt über Unix-Dateirechte. Habe ich überhaupt einen richtigen Plan? Ich benutze Debian Lenny.

Antworten (4)

53
53
53
2010-06-13 02:10:58 +0000

Sie möchten die Standardumask Ihres Systems nicht ändern, das ist ein Sicherheitsrisiko. Die Sticky-Bit-Option wird bis zu einem gewissen Grad funktionieren, aber die Verwendung von ACLs ist der beste Weg. Dies ist einfacher als Sie denken. Das Problem mit einfachen ACLs ist, dass sie standardmäßig nicht rekursiv sind. Wenn Sie eine ACL auf ein Verzeichnis setzen, erben nur die Dateien innerhalb dieses Verzeichnisses die ACL. Wenn Sie ein Unterverzeichnis erstellen, erhält es nicht die übergeordnete ACL, es sei denn, die ACL ist auf rekursiv eingestellt.

Stellen Sie zunächst sicher, dass ACLs für das Volume, auf dem sich das Verzeichnis befindet, aktiviert sind. Wenn Sie tune2fs haben, können Sie Folgendes ausführen:

# tune2fs -l /dev/sda1 | grep acl
Default mount options: user_xattr acl

Wenn Sie nicht über tune2fs verfügen, dann untersuchen Sie fstabs:

# cat /etc/fstab 
/dev/system/root / ext3 defaults 1 1
/dev/system/home /home ext3 defaults 1 2
/dev/storage/data /data ext3 defaults 1 2
LABEL=/boot /boot ext3 defaults 1 2

Die 4. Spalte, in der “defaults” steht, bedeutet, dass auf meinem System (CentOS 5.5) die ACLs eingeschaltet sind. Im Zweifelsfall sollten Sie es bei den Standardeinstellungen belassen. Wenn Sie versuchen, die ACL zu setzen und dies fehlschlägt, gehen Sie zurück und fügen Sie die Option acl in /etc/fstab direkt nach defaults ein: defaults,acl.

Soweit ich weiß, möchten Sie, dass jeder in der Gruppe users Schreibzugriff auf das Datenverzeichnis hat. Das wird durch das Folgende erreicht:

setfacl -Rm g:users:rwX,d:g:users:rwX data/
32
32
32
2010-06-12 04:13:24 +0000

Das Markieren eines Verzeichnisses mit setgid (g+s) führt dazu, dass neue Dateien das Gruppenbesitzrecht des Verzeichnisses erben, aber die Option -g von rsync versucht, dies außer Kraft zu setzen.

4
4
4
2015-09-03 15:36:56 +0000

Andere Antworten gelten für einen allgemeinen Fall, aber da Sie erwähnen, dass rsync eine Quelle des Problems ist, müssen Sie vielleicht nur seinen Aufruf anpassen.

Für den Anfang sorgt das beliebte -a-Flag dafür, dass rsync Berechtigungen kopiert; verwenden Sie -r anstelle von -a oder fügen Sie -no-p (für keine Synchronisierung von Berechtigungen) und -no-g (für keine Synchronisierung von Gruppen) hinzu. Außerdem unterstützt rsync das Flag --chmod, um die Berechtigungen für neu erstellte Dateien zu ändern.

3
3
3
2010-06-12 04:43:45 +0000

Ihre umask ist falsch für die gewünschten Berechtigungen. Sie wollen eine umask von 002. Sie haben derzeit eine umask von 022. Auch die Bemerkung, das Verzeichnis setgid zu machen, ist korrekt, aber ich bin mir nicht sicher, ob die Dateigruppen-Eigentümerschaft etwas ist, das Sie ändern wollen oder nicht.

Unix-Dateiberechtigungen sind eigentlich ein sehr einfaches Modell. Ich selbst finde ACLs völlig verwirrend :-)