Upload Script setzt falsche Chmod, Besitzer und Gruppen Rechte

  • Hallo,
    Ich hab ein kleines Problem und zwar hab ich ein PHP Upload Script, wenn ich jetzt damit etwas hochlade dann setzt mir das Script falsche Chmod Rechte nämlich 777 wobei Standart ja eigentlich 644 sein sollte. Als Benutzer und Gruppe wird auch der Root eingetragen und nicht der Inhaber des Webs.


    Das ist aber nur bei dem PHP Upload so, wenn ich über FTP etwas hochlade wird alles richtig gesetzt, also müsste eine Angabe in der PHP.ini falsch sein, denn das Script war auch schon auf meinem alten Server in Betrieb und dort hat es auch alle Rechte richtig gesetzt. Kann mir jemand sagen welche Angaben dafür in der PHP.ini zuständig sind, ich kann nämlich leider auch über Google nicht wirklich was finden :rolleyes:


    Grüße,
    shifty

  • Ok, also dafür zuständig ist wohl die...


    /etc/apache2/envvars


    Dort steht alles auf www-data deshalb wird eben dieser Benutzer auch beim PHP Upload eingetragen. Bloss welchen Benutzer trag ich jetzt dort ein, wo werden die denn definiert? Denn www-data schreibt mir eben alles mit Chmod 777.

  • Verwendest du suexec? Dann würde PHP nicht unter diesem Benutzer ausgeführt werden, sondern unter dem, der das PHP-Skript besitzt. Mit welchem Benutzer werden die Dateien denn nun angelegt? root oder www-data?


    Zunächst mal solltest du aber testen, ob chmod nicht vom Uploadskript gesetzt wird. Einfach mal ein eigenes Testskript schreiben, das eine Datei anlegt, und nachsehen, ob dort die gleichen Probleme auftreten.

  • Ich glaube dein Script setzt mittels chmod() die Rechte selbst, das machen sehr viele Scripte, damit das bekannte Besitzer/Gruppen Problem umgangen wird, da jeder Zugriff darauf hat ;)



    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Ok, also sorry wegen meinem ersten Beitrag, es werden mir www-data Rechte gesetzt, keine Root Rechte.


    Als Beispiel mal ein hochgeladenes Testbild:
    Chmod: 777 | Benutzer/Gruppe: www-data


    [Blockierte Grafik: http://s2.imgimg.de/uploads/rechteverwaltung8274e38djpg.jpg]


    Das erstellte Thumbnail fürs Testbild:
    Chmod: 644 | Benutzer/Gruppe: www-data
    [Blockierte Grafik: http://s2.imgimg.de/uploads/re…ltungthumbd05b30f2jpg.jpg]


    Wie ihr seht wird bei diesem Script ein hochgeladenes Bild mit den Rechten von "www-data" versehen sollte aber eigentlich die Rechte "10000" haben, dass Original Bild bekommt dabei Chmod 777 und das erzeugte Thumbnail bekommt den richtigen Chmod 644. Macht beim Script keinen Unterschied, nur kann ich die so hochgeladenen Bilder eben nicht mehr über FTP dieses Webs löschen, sondern nur noch über das Script selbst.


    Ok, hier noch ein zweites Script.


    Mein Testbild:
    Chmod: 644 | Benutzer/Gruppe: www-data
    [Blockierte Grafik: http://s2.imgimg.de/uploads/rechteffaf754cjpg.jpg]


    Thumbnail:
    Chmod: 644 | Benutzer/Gruppe: www-data
    [Blockierte Grafik: http://s2.imgimg.de/uploads/rechteffaf754cjpg.jpg]


    Damit ist mir nun klar das im ersten Script die Rechte mit Chmod 777 gesetzt werden, kann ich also selbst ändern. Aber das mit dem Benutzer und der Gruppe ist ja bei beiden falsch, somit muss wohl was am Apachen geändert werden.


    Ich selbst hab Suexec nicht installiert, ist nämlich noch so ziemlich das Original Image von Netcup, also Debian Etch mit Syscp! Der Ordner von Suexec ist aber vorhanden, ist nur die Datei www-data drinne:


    /etc/apache2/suexec/www-data

    Code
    /var/www
    public_html/cgi-bin
    # The first two lines contain the suexec document root and the suexec userdir
    # suffix. Both features can be disabled separately by prepending a # character.
    # This config file is only used by the apache2-suexec-custom package.

    Und halt die envvars:


    /etc/apache2/envvars

    Der Apache 2 Handler sieht halt so aus:
    http://s2.imgimg.de/uploads/apache2handler6f1fb213jpg.jpg
    Weiß jemand für was das (33)/33 steht?

  • Der Apache läuft wie konfiguriert unter www-data, somit werden auch die Dateien als www-data angelegt. Wenn das nicht gewünscht ist, müsste der Besitzer der nachträglich geändert werden vom Skript. Die PHP-Funktion dafür ist chown(), allerdings könnte das möglicherweise durch Safemode eingeschränkt sein. Wenn die Dateien gleich richtig angelegt werden sollen, solltest du dir mal suExec genauer anschauen. Allerdings gehört da mehr dazu als die Änderung einer Konfigurationsdatei.


    33 ist sowohl die UID (Benutzernummer) als auch die GID (Gruppennummer) von www-data.

  • Das nachträgliche ändern hab ich schon gemacht, ist ja auch kein Problem, allerdings auch keine wirkliche Lösung ;)


    Der Safe Mod ist nur für mein Web also "Local" auf Off der Master ist "On".


    Um nochmal zu suExec zu kommen, kannst du mir vielleicht ein paar Seiten nenne die dieses Thema behandeln, vielleicht hast du selbst schon Erfahrungen damit gemacht?

  • Mit "nachträglich" meinte ich auch, dass du im Skript chown() aufrufst.


    Ich selbst habe mit suExec bisher keine Erfahrungen gemacht, also such einfach mal bei Google danach (insbesondere nach der Kombination mit PHP, das funktioniert nicht als Apache-Modul). Oder du wartest, ob jemand anders Erfahrungen damit hat.

  • Achso, na dann werd ich erstmal versuchen den chown Befehl dort noch einzubauen, gesetzt wird der Chmod bei diesem Script mit:


    else
    {
    $datei_nach = UPLOADER_DIR.$config->bilder_ordner."/".htmlentities($this->neuer_bild_name($filename).".".$extension);
    if (@copy($datei_von, $datei_nach))
    {
    @chmod ($datei_nach, 0777);

    $this->upload['error'] = 0;
    $this->upload['filename'] = basename($datei_nach);
    $this->upload['file_dir'] = $datei_nach;
    }

  • Hmm, also es wundert mich das niemand zu diesem Problem eine richtige Lösung weiß, denn eigentlich sollte das bei jedem der das Image von Netcup mit Debian und Syscp nutzt der Fall sein das PHP und FTP unter verschiedenen Benutzern laufen, somit halt ein Rechtekonflikt.

    Keine Ahnung ob da was bei der Installation des Images schief gelaufen ist, normalerweise wird suExec nicht benötigt, habe bei Syscp nachgefragt. Ansonsten wissen die leider auch nicht woran das liegt.


    Ich hatte jetzt keine Lust das nochmal komplett ohne Image zu installieren, denn sonst läuft alles.


    Bin heute durch Zufall auf suPHP gestoßen, ist ein Apache Modul was genau dieses Problem beheben soll.
    http://www.suphp.org/


    Damit können die PHP Rechte an die Benutzer von Syscp gekoppelt werden, am Wochenende werde ich mal testen ob es läuft, aber ich hab schon mit jemandem gesprochen der es auch mit Syscp erfolgreich am laufen hat.

  • Zitat

    Can I use the php_value directives in .htaccess files with suPHP?
    suPHP does not support the php_value/php_admin_value directive known by mod_php to parse configuration options to scripts for certain virtual hosts or directories. However there is a PECL extension named htscanner that can be used with PHP CGI (called by suPHP) to parse such options being present in .htaccess files. Be sure to take a look at the README file provided with the htscanner distribution on how to make Apache ignore the php_value directives in .htaccess files instead of throwing an error.


    Das solltest du beachten, denn das braucht Syscp bei den vHosts ;)



    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)