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

85

Ich habe ein Verzeichnis namens data. Dann führe ich ein Skript unter der Benutzer-ID 'robot' aus. Der Roboter schreibt in das dataVerzeichnis und aktualisiert die darin enthaltenen Dateien. Die Idee ist datasowohl für mich als auch für den Roboter offen zu aktualisieren.

So richte ich die Berechtigungs- und Eigentümergruppe ein

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

wo sowohl ich als auch roboter zur 'roboter-grp' gehören. Ich ändere die Berechtigung und die Eigentümergruppe rekursiv wie das übergeordnete Verzeichnis.

Ich lade regelmäßig neue Dateien in das dataVerzeichnis mit rsync. Leider erben neu hochgeladene Dateien nicht die Berechtigung des übergeordneten Verzeichnisses, 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, ein Update durchzuführen new-file.txt, schlägt dies aufgrund fehlender Dateiberechtigungen fehl.

Ich bin mir nicht sicher, ob das Setzen von umask hilft. In jedem Fall folgen die neuen Dateien nicht wirklich darauf.

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

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

Wai Yip Tung
quelle

Antworten:

53

Sie möchten die Standard-Umask Ihres Systems nicht ändern, da dies ein Sicherheitsrisiko darstellt. Die Sticky-Bit-Option funktioniert bis zu einem gewissen Grad, aber die Verwendung von ACLs ist der beste Weg. Das ist einfacher als Sie denken. Das Problem bei einfachen ACLs ist, dass sie standardmäßig nicht rekursiv sind. Wenn Sie eine ACL für ein Verzeichnis festlegen, erben nur die Dateien in diesem Verzeichnis die ACL. Wenn Sie ein Unterverzeichnis erstellen, wird die übergeordnete ACL nur dann abgerufen, wenn für die ACL die Option "recurse" festgelegt ist.

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

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

Wenn Sie nicht haben tune2fs, dann prüfen 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 vierte Spalte mit der Aufschrift "Standard" bedeutet, dass auf meinem System (CentOS 5.5) ACLs aktiviert sind. Wenn Sie Zweifel haben, belassen Sie die Standardeinstellungen. Wenn Sie versuchen , die ACL und Fehler aufgeführt, gehen Sie zurück und fügen Sie die acl - Option in / etc / fstab direkt nach Standardwerte: defaults,acl.

Soweit ich weiß, soll jeder in der Benutzergruppe Schreibzugriff auf das Datenverzeichnis haben. Dies wird folgendermaßen erreicht:

setfacl -Rm g:users:rwX,d:g:users:rwX data/
churnd
quelle
Ich habe diesen Befehl verwendet, aber mein Problem wurde nicht behoben. Wie kann ich diesen Befehl bitte rückgängig machen?
Itai Ganot
Hab den Trick auf Ubuntu mit gemacht sudo setfacl -Rm g:users:rwX,d:g:users:rwX /var/www/logs_or_something. Hatte ein Problem mit PHPUnit-Tests. Nach dem Erstellen von Protokolldateien aus laufenden Tests konnte der Apache-Benutzer diese www-datanicht schreiben / lesen.
S3M3N
2
@Itai Ganot - nach der setfaclman - Seite , -boder --remove-allentfernt die erweiterte ACLs.
Jww
Also, würden Sie nur setfacl -Rm g:users:rwX,d:g:users:rwX data/am Ende anhängen /etc/fstab?
3.
@ piña no. Die einzige Änderung, die Sie an / etc / fstab vornehmen, ist die Änderung defaultsan defaults,acl. setfaclist ein Befehl, den Sie vom Terminal aus ausführen sollten. data/sollte durch den Pfad zu dem Verzeichnis ersetzt werden, das Sie ändern möchten.
Segfault
32

Das Markieren eines Verzeichnisses setgid ( g+s) bewirkt , dass neue Dateien den Gruppeneigentum des Verzeichnisses erben. Die -gOption von rsync versucht jedoch, diesen zu überschreiben.

Ignacio Vazquez-Abrams
quelle
11
Das setgid-Bit bewirkt, dass erstellte Dateien nur die Gruppe erben, / wenn / die Person, die die neue Datei erstellt, Mitglied dieser Gruppe ist. Wenn der erstellende Benutzer der Eigentümer, aber kein Mitglied der Gruppe ist oder das Verzeichnis von der Welt beschreibbar ist, führt das Bit "setgid" nichts aus. Und die umask für alle Benutzer, die Dateien erstellen, muss noch festgelegt werden, um den entsprechenden Gruppenzugriff zu ermöglichen.
Dannysauer
1
@dannysauer "Wenn der erstellende Benutzer der Besitzer, aber kein Mitglied der Gruppe ist ... wird das Setgid-Bit nichts tun." - Danke. Macht jetzt Sinn - aber ohne Rückmeldung von rsync, habe ich mich gefragt, warum es nicht funktioniert hat.
user12345
4

Im Allgemeinen gelten andere Antworten. Wenn Sie jedoch erwähnen, dass rsync die Ursache des Problems ist, müssen Sie möglicherweise nur den Aufruf optimieren.

Zu Beginn -amacht das beliebte Flag rsync-Kopierberechtigungen; Verwenden -rSie statt -aoder add -no-p(für keine Berechtigungssynchronisierung) und -no-g(für keine Gruppensynchronisierung). Außerdem unterstützt rsync das --chmodFlag zum Ändern der Berechtigungen für neu erstellte Dateien.

mbq
quelle
3

Ihre umask ist falsch für die Berechtigungen, die Sie möchten. Sie möchten eine Umask von 002. Sie haben derzeit eine Umask von 022. Außerdem ist der Kommentar zum Festlegen der Verzeichnis-Setgid korrekt, aber ich bin nicht sicher, ob Sie die Dateigruppen-Inhaberschaft ändern möchten oder nicht.

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

Alleswissend
quelle
4
"Unix-Dateiberechtigungen sind eigentlich ein sehr einfaches Modell. Ich finde ACLs völlig verwirrend." - Ich fühle irgendwie das Gegenteil (aber trotzdem +1). ACLs (und Allow / Deny ACEs) sind einfach und Unix-Berechtigungen machen keinen Sinn. Aber das kommt von einem Typen, der unter einer Postfix / Dovecot / Clam / SpamAssassin-Installation leidet.
Jww