Thread Best practice zu Dateiberechtigungen (21 answers)
Opened by bianca at 2020-04-03 09:39

Raubtier
 2020-04-06 10:11
#191706 #191706
User since
2012-05-04
1054 Artikel
BenutzerIn

user image
2020-04-06T06:09:40 bianca
Mit dieser Zeile hier: my @berechttest = (0644,0755);foreach my $test (@berechttest){sysopen my $fh,"$ENV{DOCUMENT_ROOT}/test$test.txt",O_RDWR|O_EXCL|O_CREAT,$test;} bekommen die Dateien 0640 und 0750, wenn ich das per FTP anschaue. Warum? Warum nicht 0644 und 0755?

Haben wir doch versucht zu erklären. Du hast eine umask von 0007. Damit weden alle gesetzten Bits für andere entfernt.

Oktal 07 = Binär 0b111

Du hast also 0644 = 0b 110 010 010
Deine Umask: 0b 000 000 111

Jetzt mit dem Nicht der Umask und-verknüpfen:
Code: (dl )
1
2
3
4
5
6
7
8
9
     110 010 010
&& ~(000 000 111)
=
110 010 010
&& 111 111 000
=
110 010 000
= in oct
6 4 0


Klar?

Die umask von 007 entfernt also alle Bits für "andere", während Berechtigungen für dich und die Gruppe unangetastet bleiben.


Quote
Mit my @berechttest = ('0644','0755');foreach my $test (@berechttest){sysopen my $fh,"$ENV{DOCUMENT_ROOT}/test$test.txt",O_RDWR|O_EXCL|O_CREAT,$test;} (...) wird das immer schlimmer.

Die Berechtigung ist eine Zahl, kein String! Auf diese Weise verwendest du die Zahlen 644 und 755 (im Dezimalsystem), nicht 0644 und 0755 (oktal).

Edit:
diese Erklärung geht mal nur von den untersten 9 Bits aus (also ausführen (001), schreiben (010), lesen (100), die sich 3x für andere, für die Gruppe und für dich wiederholen. Höherwertige Bits sind dann für so Dinge wie Sticky usw. Davon halte dich fern. Daher reicht es in 99.9% der Fälle, nur die untersten 3x3=9 Bits zu betrachten. Die Gruppe von 3 Bits kann super im Oktalsystem dargestellt werden, da dort eine Ziffer von 0 bis 7 genau 3 Bits entspricht. Genau so, wie im Hexadezimalsystem 4 Bits einer Ziffer von 0 bis F entsprechen.
Last edited: 2020-04-06 10:40:29 +0200 (CEST)

View full thread Best practice zu Dateiberechtigungen