Hi hotti,
SuExec ist ja ne feine Sache. D.h., mein Webserver läuft unter derselben id wie ich als FTP-User. Eigentlich müsste da ja auch die umask gleich sein, […]
Nein, muss sie nicht. Die umask ist nicht grundsätzlich per User festgelegt, sondern jeder Prozess kann sich die umask nach belieben ändern. Das geht in Perl, wie auch in PHP. Standardmäßig arbeitet ein Prozess meines Wissens nach mit der umask seines Elternprozesses, also des Prozesses, der ihn gestartet hat.
Wenn du eine Datei über CGI (Perl?) hochlädst, dann wird diese CGI-Prozess vom Apache (bzw. allg. Webserver) gestartet. Ich könnte mir denken, dass der Apache sich selber eine restriktivere umask setzt, welche sich dann eben auch auf die ausgeführten CGI-Prozesse auswirkt. Gut vorstellbar wäre allerdings auch, dass SuExec aus Sicherheitsgründen für alle Prozesse die es ausführt eine restriktive umask setzt - das würde auch gut zum Security Model „Is the directory/target NOT writable by anyone else?” passen.
Kurz um: Verschiedene umasks für verschiedene Prozesse sind keineswegs verwunderlich.
Was ich auch nicht verstehe, dieselbe Datei, die der Webserver mit 600 schreibt, ist im Browser nicht anzeigbar (403 Forbidden). Andererseits sind Dateien, die ich per HTTP hochlade für CGI-Prozesse mit 600 lesbar (und werden mit 700 auch ausgeführt).
Das ist relativ simpel, für eine Datei welche der Apache direkt ausliefert, kommt SuExec gar nicht zum Einsatz. SuExec ist (nur) dafür gedacht, CGI-Scripte auszuführen, nicht jedosch statische Inhalte auszuliefern.
Wenn du nun also eine Datei hast, welche im Bezug auf User und Gruppe dir gehört und die Rechte 600 besitzt, kann der Apache die Datei schlicht und einfach nicht lesen. Selbiges gilt natürlich auch für Ordner, probier doch mal, einem dir gehörenden Ordner die Rechte für Gruppe und Welt zu entziehen (700) - Apache wird dir dann keine Inhalte dieses Ordners mehr ausliefern können.
Anders, wenn Apache ein CGI-Script ausführt. In dem Fall wechselt Apache zum konfigurierten User (dir) und führt das Script dann unter deiner Benutzerkennung aus. Damit können dann natürlich auch Dateien mit den Rechten 600 gelesen werden. Dass ein Script mit 700 ausgeführt wird, liegt übrigens auch nur daran, dass der Ornder in dem das Script liegt sicherlich nicht 700 hat, denn sonst könnte Apache die hier genannten Bedingungen gar nicht prüfen.
Viele Grüße,
~ Dennis.