Thread Best practice zu Dateiberechtigungen
(21 answers)
Opened by bianca at 2020-04-03 09:39 2020-04-06T06:09:40 bianca Ich würde in nahezu allen Fällen open nutzen und nicht sysopen und mkdir ohne Berechtigungen nutzen. Das war übrigens auch das, was Raubtier empfohlen hatte. 2020-04-06T06:09:40 bianca Das hatten sowohl Raubtier als auch ich schon mal beschrieben, da gehen mir so langsam die Worte aus. Hier ein letzter Versuch: Alle Berechtigungen, die in der umask drinstehen, werden von denen entfernt, die Du bei sysopen und mkdir angibst. Du hast eine umask von 0007, in Buchstaben: ------rwx, also werden bei mkdir und sysopen alle Berechtigungen entfernt, die Du für "others" angegeben hast. 2020-04-06T06:09:40 bianca Diese Ids sagen Dir, ob Deine CGI-Skripte unter Deiner Benutzerkennung laufen oder nicht. Denn wenn sie unter Deiner eigenen Benutzerkennung ablaufen, kannst Du die Berechtigungen für andere abdrehen. Die sind somit für Dein Skript wichtiger als alle Ausprobiererei. 2020-04-06T06:09:40 bianca Zum wiederholten Mal: Das kannst Du nicht, weil Dir Deine umask ------rwx aus rwxr-xr-x ein rwxr-x--- macht. Wenn Du gezielt eine Datei mit 0755 anlegen willst, dann musst Du entweder vorher die umask ändern, oder nach dem Anlegen der Datei mit chmod die Berechtigung auf 0755 setzen. 2020-04-06T06:09:40 bianca Siehe oben. umask wirkt. Vielleicht verstehst Du's ja anhand dieser Beispiele. 2020-04-06T06:09:40 bianca Das ganze gibt's schon in den Programmiersprache C, Pascal und Java. Und ja, es hat seine Richtigkeit. Code: (dl
)
perl -E "say 'Die Zahlen sind gleich' if 0644 == 420" Eine führende Null in einem Literal bedeutet in diesen Programmiersprachen, dass die Zahl eben nicht im Dezimalsystem, sondern im Oktalsystem zu lesen ist. Der Wikipedia-Eintrag Oktalsystem weist auch darauf hin, dass die führende Null als Kennzeichnung "zu schwer zu entdeckenden Flüchtigkeitsfehlern führen kann". Wenn Du die Zahl an Deinen Dateinamen dranhängst, dann gibt Perl sie so aus, wie Perl eben Zahlen ausgibt: Im Dezimalsystem. Wenn Du es im Oktalsystem haben willst, dann brauchst Du printf und das %o-Format. 2020-04-06T06:09:40 bianca Sorry: Hier fängst Du nun wirklich an, herumzustochern. In keiner Dokumentation steht, dass Du die Berechtigungen als Strings angeben kannst. Mach sowas nicht. Bei Strings wirkt die schwarze Magie der führenden Null nicht und Du verfütterst die Dezimalzahlen 644 und 750 als Modus. 644 ist in Oktal 01200, Du erzeugst also eine Datei namens test0644.txt mit --w------T 2020-04-06T06:09:40 bianca Ja, das wird schlimmer. Mit sprintf("%04o",'0644') erzeugst Du einen String '1204'. Den interpretiert Perl dezimal als 1204, und sysopen macht daraus --w-rwSr--. Das ist alles so schräg wie Oktalzahlen nun eben mal sind, aber eben auch so beschrieben. Wenn Du Oktalzahlen vermeiden willst, dann nimm die Konstanten von Fcntl: 0644 entspricht S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH, und umask 027 kannst Du auch schreiben als umask S_IWGRP | S_IROTH | S_IWOTH | S_IXOTH oder kürzer umask S_IWGRP | S_IRWXO. |