• Offizieller Beitrag

    Ich komm da nicht weiter.... :(


    Der 500 Serverfehler bleibt beim Aufruf des CGI-Scripts und in der Log steht "Premature end of script headers". Irgendwo muß ich da Rechte vergeben, aber wo?


    Zu den Begriffen gibt es haufenweise Erklärungen in diversen Foren. Einige verstehe ich nicht und viele haben nichts mit meinem Problem zu tun.


    Nun warte ich erst mal auf mein bestelltes Apache Büchlein

  • Schuss ins Blaue:


    Die Rechtevergabe muss 755 lauten


    Die betreffende Datei / Dateien muss dem entsprechenden Nutzer !UND! der Gruppe zugehören. Welche das sind, erfährt man im Fehlerlog suexec. Wenn die IDs nicht identisch sind, taucht ein solcher Fehler wie der von Dir gepostete auf.

  • Was Du z.B. auch kontrollieren kannst, ist:


    1) das bei einem FTP-Upload des Scripts der FTP-Client auf ASCII und nicht auf "Auto" eingestellt ist, das kann u.a. auch mal ein Script abschiessen.


    2) Ferner ist wichtig, das die Datei mit chmod 755 <scriptname> gesetzt wird.


    3) Das Script muss exakt im cgi-bin Verzeichnis liegen.

  • Zuguterletzt, was mir einfällt:


    Wenn das Script korrekt im ASCII-Mode upgeloadet wurde, kommt es vorallem auf den richtigen Abschluß der Pfad-Zeile an. Es darf dort kein x10 (also Zeilenvorschub) stehen sondern nur ein x13 (CR).


    Dann kommt es darauf an, das der Interpreterpfad korrekt gesetzt ist. Was bedeutet: Stimmt der Pfad in der ersten Zeile?


    Z.B bei Perl: /usr/bin/perl.

  • Gut, das schliesst ja schon mal einiges aus. Dann gehe ich davon aus, das es an einer nichtkorrekten Rechtevergabe liegt.


    Das kannst Du, wenn Du möchtest, im suexec-log kontrollieren.


    Beispielpfad (bei Dir anpassen): /var/log/apache2/suexec.log


    Das Script muss 755 haben und den User und Group des webXXX. User und Group-ID müssen identisch sein:


    Mal zu Rechten:



    Quelle: Schlaues Buch

  • Das Script erhält die Rechte. Chmod habe ich schon genannt, damit weisst Du 755 zu.


    Dann sind da noch die Befehle:


    chown = Change Owner ist ausschließlich root-Usern, also allen mit der Benutzerkennung 0, erlaubt


    chgrp = Change Group ist auch dem Owner der Datei erlaubt. Er muss aber selber in der Gruppe sein, der er die Datei zugänglich machen will


    groups <username> zeigt die Gruppen an, in der der User Mitglied ist


    Beispiel (bei Dir anpassen):


    chown -cR user:group


    Mit diesen beiden Befehlen werden der Eigentümer (engl. "owner") und die Gruppenzugehörigkeit (engl. "group ownership") gesetzt. Das Chmod 755 macht das Script für diese ausführbar. Was bedeutet, das Chmod das Script ausfühbar macht für user:group. User und group-ID müssen identisch sein.


    Versuche das mal nachzuvollziehen. Zu den Befelen lies auch mal in Deinen Suse Handbüchern nach,:)

  • Hier nochmal eine Kurzreferenz:



    Und mal hier lesen:


    http://www.drweb.de/cgi/cgi_chmod.shtml

  • Dateien, die per FTP auf den Server geladen werden, gehören dem User xx, der sich in der Gruppe psacln befindet.


    Dialout und video sind auch Gruppen, welche unter Groups gehören. Diese Gruppen benutzt Linux, um Dir Rechte auf Gerätedateien wie Sound- oder Video-Karte zu verleihen. So können alle Mitglieder der Gruppe audio auf die Sound-Karte zugreifen.


    In Groups stehen z.B.: (Ob in CGI-bin, weiss ich nicht)


    users uucp dialout audio video


    Und es macht mich etwas stutzig, das bei Dir unter Groups nicht: users steht. users ist die primäre Gruppe, die auch von Dir neuangelegten Dateien zugewiesen wird. Unter SuSE Linux ist jeder Benutzer automatisch Mitglied der Gruppe users.


    Ich weiss jetzt nicht, inwiefern Du ein Backup des Servers hast, um Dir mal die Groups anzeigen zu lassen, sprich: Was vor dem Serverupdate dort drinstand, könnte aber sein, das users in der CGI-bin Groups fehlt.


    Dann kannst Du auch mal schauen, was seEXEC genau bei den CGI-Script prüft, sprich: Wie es eingestellt ist. Auf englisch findest Du eine Beschreibung hier:


    http://httpd.apache.org/docs/1.3/suexec.html


    Auch:



    Hier eine deutsche Dokumentation zu Apache-Server, vielleicht findest Du da was:


    http://httpd.apache.org/docs/2.0/de/


    Auf englisch zu CGI:


    http://httpd.apache.org/docs/2.0/de/howto/cgi.html

  • Die suEXEC ist ja ein Sexurity-Wrapper. Kontrolliert die Header von Scripten.


    Zitat

    c/var/www/vhost/kontromisslos.de/cgi-bin/postkarten


    Es kann z.B. passieren, dass User-Webverzeichnisse WWW heißen, während in httpd.conf public_html steht. Was besagt, das der suEXEC im Header WWW finden möchte, aber public_html findet. Das brächte dann den Fehler: Premature end of script headers.


    Schau mal in die httpd.conf, was darin zum obigen Pfad steht, falls es da steht. Der Bereich als Anhaltspunkt für Dich könnte so aussehen:


    AddHandler cgi-script .cgi .sh .pl


    <IfModule mod_userdir.c>
    UserDir WWW
    </IfModule>


    Zitat

    uid 10002/kontromisslos)
    gid 10001/10001) cmd:admin.pl


    Einmal steht hier die USER-ID auf 10002, die Groups-ID auf 10001, Du könntest mal testen, was ist, wenn Du die UID auf 10001 setzt. (Testweise die GID, wenn ersteres nicht funktioniert, in beiden Werten auf 10002 setzen)


    Desweiteren: Kannst Du mal posten, oder vergleichen, was /var/log/apache2/suexec.log als Premature end of script Fehlermeldung ausgibt? Sprich die Zeilen, welche dort stehen mit den UID / GID.


    Gibt /var/log/apache/error.log auch was in Richtung Premature end of script Fehlermeldung aus?

  • Kluges Buch bin ich auch :D ...aber hab keinen Blassen, worums hier geht *schmunzel* Das sind alles böhmische Dörfer für mich *zugeb*


    Aber hey, der RSS - Feed ist wirklich klasse :tup:


    Ich drück Dir die Daumen, Robert, dass das Winnetou-Buch Aufschluss gibt und die Probleme beseitigen hilft :)