Tach!
Dann bleibt noch die Frage, warum das Verzeichnis für Gruppe und andere lesbar sein muss.
Weil Verzeichnislesbarkeit für die Welt in einem Webserver-Umfeld durchaus normal ist?
Gut, alles klar, dann werd ich mich mal umstellen und die anwendungsspezifischen Daten inklusive der sensiblen nicht nur anwendungsspezifisch sondern weltweit lesbar berechtigen. Wenn das so üblich ist, dann wird das wohl so richtig sein.
Zu dem zugewiesene User- und Gruppen-Account hast du noch gar nichts gesagt. Das ist auch "default".
Das ist der, unter dem die Anwendung läuft. Bestenfalls ist das ein separater Account. Jedenfalls ist das auch der Account, der die Daten wieder lesen muss. Ich weiß zwar nicht, welche anderen Accounts die Daten noch lesen können müssen, aber wenn das so üblich ist ...
0777 ist für den zweiten Parameter von mkdir() übrigens Standard - und es entspricht der üblichen Vorgehensweise in PHP, in den Fällen, wo man die vorderen Parameter nicht mit abweichenden Werten belegen will, sondern den Defaultwert will, aber an die hinteren Parameter ran muss, den Defaultwert explizit anzugeben.
Im vorliegenden Fall wurde nach dem Erstellen des Verzeichnisses mit chmod() cie Berechtigung auf 0700 gesetzt. Das ist natürlich falsch, weil es kein Standard ist, deswegen wurde es ja in Christians Alternative zu der verwendeten Funktion auf 0777 gesetzt. Die auf 0077 gesetzte umask in Jörgs Code ist somit wohl auch falsch, weil kein Standard. (Die Hinweise im PHP-Handbuch, dass das Setzen der Umask unter bestimmten Serverkonfigurationen ungewünschte Nebenwirkungen hat, weil das auf mehr als den aktuellen Prozess wirkt, kann man sicher auch vernachlässigen. 0777 als Recht und die Default-Umask - wie auch immer sie grad von irgendwem anders umgebogen wurde - werden schon alle so richten, wie es der Standard braucht.)
Ich schätze es deutlich höher, nur genau die benötigten Rechte zu vergeben.
Welche Rechte sind das?
So wie es die Anwendung braucht. Lesen und Schreiben für sie selbst und andere Accounts brauchen nichts. Jedenfalls geht aus dem im OP (nicht) verlinkten Artikel nicht hervor, dass das sessionbasierte Loginsystem ein anwendungsübergeifendes sein soll.
Und wieso willst du dich darauf verlassen, dass die benötigten Rechte in allen Skripten korrekt explizit gesetzt wurden?
Ich verlasse mich darauf, dass ich solchen zentralen Code nicht mehrfach kopiere sondern er nur in einer Datei (oder einen Modul oder wie auch immer das Pojekt gegliedert ist) steht, die bei Bedarf von den anderen referenziert wird.
Das ist eigentlich Admin-Aufgabe, es zu definieren, und OS-Aufgabe, es zu forcieren.
Und ich als kleiner Anwendungsprogrammierer darf mich um die Sicherheit nicht selbst kümmern? Wahrscheinlich nicht, weil es kein Standard ist. Das bestätigen ja auch die vielen Meldungen in den heise News über Sicherheitslücken in den Anwendungen. Man sollte denen mal sagen, dass Sicherheitslücken nicht entstehen zu lassen, reine Administratoren-Aufgabe ist.
Vielleicht hab ich auch wieder nur grad alles falsch verstanden ( - wie neulich bei den RewriteRules vom Zend Framework. Nur leider hat es mir keiner erklären können.)
dedlfix.