2011-03-30 09:02:50 +0000 2011-03-30 09:02:50 +0000
37
37

Wie kann man Dateiberechtigungen so setzen, dass neue Dateien dieselben Berechtigungen erben?

Ich habe einen Ordner, in dem neue Unterordner und Dateien automatisch, durch ein Skript, erstellt werden sollen.

Ich möchte die Benutzer- und Gruppenberechtigungen rekursiv für alle neuen Ordner und Dateien beibehalten, die im übergeordneten Verzeichnis angelegt werden. Ich weiß, dass dazu ein Sticky-Bit gesetzt werden muss, aber ich kann scheinbar keinen Befehl finden, der genau zeigt, was ich brauche.

Das habe ich bis jetzt gemacht:

sudo mkdir -p /path/to/parent
sudo chmod -R 660 myself:somegroup /path/to/parent

Danach möchte ich, dass die 660 Berechtigungen rekursiv auf alle Ordner und Dateien gesetzt werden, die in /path/to/parent liegen.

Allerdings ist alles, was ich bisher versucht habe, fehlgeschlagen. Kann mir bitte jemand helfen?

Eigentlich ist das Oktalflag 660 wahrscheinlich nicht einmal richtig. Die Berechtigungen, die ich möchte, sind:

  1. Verzeichnisse unter /path/to/parent sind ausführbar für Benutzer mit den Rechten
  2. Dateien sind lesbar/schreibbar für den Benutzer selbst und Mitglieder einer Gruppe
  3. Dateien und Verzeichnisse in /path/to/parent sind NICHT weltweit lesbar

Ich verwende Ubuntu 10.0.4 LTS.

Kann mir bitte jemand helfen?

Antworten (3)

64
64
64
2011-03-30 10:28:30 +0000

Die gesuchten Berechtigungsbits sind 0770 und 0660.

  • rw- Berechtigungen → 110 binär → 6 oktal

Die group ownership kann an neue Dateien und Ordner vererbt werden, die in Ihrem Ordner /path/to/parent erstellt werden, indem Sie das setgid-Bit mit chmod g+s wie folgt setzen:

chmod g+s /path/to/parent

Nun wird allen neuen Dateien und Ordnern, die unter /pfad/zu/eltern erstellt werden, die gleiche Gruppe zugewiesen, die auf /pfad/zu/eltern gesetzt ist.


POSIX-Dateiberechtigungen werden nicht vererbt; sie werden vom erstellenden Prozess vergeben und mit seinem aktuellen umask-Wert kombiniert.

Sie können jedoch POSIX ACLs verwenden, um dies zu erreichen. Setzen Sie die Standard-ACL auf ein Verzeichnis:

setfacl -d -m u::rwX,g::rwX,o::- /path/to/parent

Dies wendet setfacl auf das Verzeichnis /path/to/parent an, wobei -m die -default ACLs ändert - diejenigen, die auf neu erstellte Objekte angewendet werden. (Großes X bedeutet, dass nur Verzeichnisse das +x-Bit erhalten.)

(Bei Bedarf können Sie ein u:someuser:rwX oder g:someuser:rwX - vorzugsweise eine Gruppe - zu den ACLs hinzufügen.)


Hinweis: Auf älteren Systemen, die ext3/ext4 verwenden, mussten Sie das Dateisystem mit der Option acl einhängen, da sonst alle ACLs ignoriert wurden und das Setzen neuer ACLs nicht möglich war.

mount -o remount,acl /

Um dies dauerhaft zu setzen, verwenden Sie tune2fs -o acl <device> oder bearbeiten Sie /etc/fstab.

10
10
10
2011-03-30 12:09:01 +0000

Grawity gibt eine ausgezeichnete Antwort, aber ich vermute, dass die bearbeitete Frage die Dinge leicht verändert haben könnte.

Ich würde vorschlagen, das Verzeichnis im Besitz des apache-Benutzers/der apache-Gruppe zu belassen. Dies wird wahrscheinlich entweder apache oder httpd sein, abhängig von Ihrer Distribution.

z.B.

chown -R apache:apache /path/to/parent

Sie können dann etwas tun wie https://serverfault.com/questions/164078/is-adding-users-to-the-group-www-data-safe-on-debian oder sich selbst zur apache-Gruppe hinzufügen, um sicherzustellen, dass Sie Gruppenzugriff auf das Verzeichnis haben. (Etwas wie usermod -aG apache username)

Ich würde nicht das gesamte Verzeichnis mit chmod -R versehen, weil Sie nicht wollen, dass html-Skripte oder jpg’s oder beliebige andere Dinge ausführbar sind. Sie sollten die Berechtigungen nach Bedarf ändern. (Obwohl das Zurücksetzen auf 660 vielleicht nicht die schlechteste Idee ist.)

Etwas, das Sie vielleicht ausprobieren möchten, ist:

chmod o+w file

Das ‘o’ bedeutet ‘andere’ & ‘w’ bedeutet ‘schreiben’. Sie können auch ‘u’ für ‘Benutzer’ & ‘g’ für ‘Gruppe’ haben, sowie ‘r’ & ‘x’, die hoffentlich selbsterklärend sind. Sie können Berechtigungen mit ‘-’ statt ‘+’ entfernen.

2
2
2
2011-03-30 14:22:39 +0000

Ich denke, dass Sie das Problem zu sehr verkomplizieren. Wenn das oberste Verzeichnis für andere nicht zugänglich ist, können andere auch keine Dateien innerhalb des Baums erstellen. Ein Gruppenschreibzugriff ist nicht erforderlich, wenn nur der Apache das Schreiben durchführt.

Diese Schritte sollten das bewirken, was Sie wollen (ersetzen Sie directory in den Befehlen durch das gewünschte Verzeichnis):

  • fügen Sie umask 027 zum apache-Default-Skript /etc/default/apache hinzu. Dadurch wird verhindert, dass andere auf Dateien oder Verzeichnisse zugreifen, die apache erstellt.
  • führen Sie chown www-data:www-data directory in dem Verzeichnis aus, in das Apache schreiben soll.
  • Führen Sie chmod 750 directory in dem Verzeichnis aus, in das der Apache schreiben soll.

Wenn Sie dem Apache erlauben, in ein Verzeichnis zu schreiben, eröffnet dies die Möglichkeit, alle Arten von Malware in den von Ihnen bereitgestellten Inhalt zu injizieren. Überwachen Sie den Inhalt dieses Verzeichnisbaums entsprechend.