it-swarm.com.de

Festlegen von Standardberechtigungen für neu erstellte Dateien und Unterverzeichnisse unter einem Linux-Verzeichnis?

Ich habe eine Reihe von Skripten und Anwendungen mit langer Laufzeit, die die Ausgabeergebnisse in einem Verzeichnis speichern, das von einigen wenigen Benutzern gemeinsam genutzt wird. Ich möchte eine Möglichkeit, um sicherzustellen, dass jede Datei und jedes Verzeichnis, die unter diesem freigegebenen Verzeichnis erstellt werden, automatisch über die Berechtigungen u=rwxg=rwxo=r Verfügt.

Ich weiß, dass ich umask 006 Vor meinen verschiedenen Skripten verwenden könnte, aber ich mag diesen Ansatz nicht, da viele Benutzer ihre eigenen Skripten schreiben und möglicherweise vergessen, die umask selbst festzulegen.

Ich möchte wirklich nur, dass das Dateisystem neu erstellte Dateien und Verzeichnisse mit einer bestimmten Berechtigung festlegt, wenn es sich in einem bestimmten Ordner befindet. Ist das überhaupt möglich?

Update : I think kann mit POSIX-ACLs unter Verwendung der Standard-ACL durchgeführt werden Funktionalität, aber im Moment geht mir alles ein bisschen über den Kopf. Wenn jemand erklären kann, wie Standard-ACLs verwendet werden, würde er diese Frage wahrscheinlich gut beantworten.

96
David Dean

Um den richtigen Besitz zu erhalten, können Sie das Gruppen-Setuid-Bit für das Verzeichnis mit setzen

chmod g+rwxs dirname

Dadurch wird sichergestellt, dass die im Verzeichnis erstellten Dateien der Gruppe gehören. Sie sollten dann sicherstellen, dass jeder mit umask 002 oder 007 oder etwas Ähnlichem läuft - aus diesem Grund werden Debian und viele andere Linux-Systeme standardmäßig mit Benutzergruppen konfiguriert.

Ich kenne keine Möglichkeit, die von Ihnen gewünschten Berechtigungen zu erzwingen, wenn die umask des Benutzers zu stark ist.

73
Norman Ramsey

So geht's mit Standard-ACLs, zumindest unter Linux.

Zunächst müssen Sie möglicherweise die ACL-Unterstützung für Ihr Dateisystem aktivieren. Wenn Sie ext4 verwenden, ist es bereits aktiviert. Andere Dateisysteme (z. B. ext3) müssen mit der Option acl gemountet werden. Fügen Sie in diesem Fall die Option zu Ihrem /etc/fstab Hinzu. Wenn sich das Verzeichnis beispielsweise in Ihrem Root-Dateisystem befindet:

/dev/mapper/qz-root   /    ext3    errors=remount-ro,acl   0  1

Dann montiere es wieder:

mount -oremount /

Verwenden Sie jetzt den folgenden Befehl, um die Standard-ACL festzulegen:

setfacl -dm u::rwx,g::rwx,o::r /shared/directory

Alle neuen Dateien in /shared/directory Sollten nun die gewünschten Berechtigungen erhalten. Dies hängt natürlich auch von der Anwendung ab, mit der die Datei erstellt wird. Beispielsweise können die meisten Dateien von Anfang an von niemandem ausgeführt werden (abhängig vom Argument mode für den Aufruf open (2) oder creat (2)), genau wie bei der Verwendung von umask. Einige Dienstprogramme wie cp, tar und rsync versuchen, die Berechtigungen der Quelldatei (en) beizubehalten, wodurch Ihre Standard-ACL ausgeblendet wird, wenn die Quelldatei nicht vorhanden ist Gruppenbeschreibbar.

Hoffe das hilft!

57
pelle

in Ihrem Shell-Skript (oder .bashrc) Sie können etwas verwenden wie:

umask 022

umask ist ein Befehl, der die Einstellungen einer Maske festlegt, die steuert, wie Dateiberechtigungen für neu erstellte Dateien festgelegt werden.

4
user3270784

Es ist hässlich, aber Sie können den Befehl setfacl verwenden, um genau das zu erreichen, was Sie wollen.

Auf einem Solaris-Computer habe ich eine Datei, die die ACLs für Benutzer und Gruppen enthält. Leider müssen Sie alle Benutzer auflisten (zumindest habe ich keinen Weg gefunden, dies anders zu machen):

user::rwx
user:user_a:rwx
user:user_b:rwx
...
group::rwx
mask:rwx
other:r-x
default:user:user_a:rwx
default:user:user_b:rwx
....
default:group::rwx
default:user::rwx
default:mask:rwx
default:other:r-x

Benennen Sie die Datei acl.lst und geben Sie Ihre echten Benutzernamen anstelle von user_X ein.

Sie können diese Acls jetzt in Ihrem Verzeichnis festlegen, indem Sie den folgenden Befehl eingeben:

setfacl -f acl.lst /your/dir/here
4
innaM