Maik: CGI mit Apache

Hallo zusammen!

Hab auf einem SuSE Linux 8.0 Server einen Apachen mit perl usw. installiert.
Aus irgendeinem Grund funktionieren aber die ganzen cgi's nicht.
Ich bekomme immer die Fehlermeldung:

Internal Server Error

könnt Ihr mir vielleicht helfen?

Gruß
Maik

  1. Hi,

    Ich bekomme immer die Fehlermeldung:
    Internal Server Error

    in der selben Fehlermeldung steht auch, dass mehr Information im Error-Log stehen könnte.

    Cheatah

    1. Hi,

      Ich bekomme immer die Fehlermeldung:
      Internal Server Error

      in der selben Fehlermeldung steht auch, dass mehr Information im Error-Log stehen könnte.

      Cheatah

      Die Nachrichten im error_log sind aber wenig aufschlussreich.

      [notice] caught SIGTERM, shutting down
      [error] Cannot remove module mod_autoindex.c: not found in module list
      [info] mod_unique_id: using ip addr 195.37.129.35
      [error] Cannot remove module mod_autoindex.c: not found in module list
      [info] mod_unique_id: using ip addr 195.37.129.35
      [info] created shared memory segment #4227075
      [notice] Apache/1.3.23 (Unix) mod_python/2.7.6 Python/2.2 PHP/4.1.0 mod_perl/1.26 configured -- resuming normal operations
      [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
      [info] Server built: Mar 26 2002 15:29:08
      [notice] Accept mutex: sysvsem (Default: sysvsem)

      Gruß
      Maik

      1. Hallo

        Ich bekomme immer die Fehlermeldung:
        Internal Server Error

        in der selben Fehlermeldung steht auch, dass mehr Information im Error-Log stehen könnte.

        Die Nachrichten im error_log sind aber wenig aufschlussreich.

        [notice] caught SIGTERM, shutting down
        [error] Cannot remove module mod_autoindex.c: not found in module list
        [info] mod_unique_id: using ip addr 195.37.129.35
        [error] Cannot remove module mod_autoindex.c: not found in module list
        [info] mod_unique_id: using ip addr 195.37.129.35
        [info] created shared memory segment #4227075
        [notice] Apache/1.3.23 (Unix) mod_python/2.7.6 Python/2.2 PHP/4.1.0 mod_perl/1.26 configured -- resuming normal operations
        [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
        [info] Server built: Mar 26 2002 15:29:08
        [notice] Accept mutex: sysvsem (Default: sysvsem)

        Das sind die Meldungen, die Du beim starten des Apachen bekommst. Wie Du siehst, scheinst Du noch einige andere Probleme mit mod_autoindex zu haben ([error]...).
        Die Fehlermeldungen die Du zu dem fehlerhaften Perlskript bekommst, sollte kurz vor der Zeile "Premature end of script headers" stehen, die der Apache erzeugt, wenn das Skript stirbt, ohne wenigstens einen Content-Type-Header erzeugt zu haben.
        Schau noch mal nach, und poste die entsprechende Stelle. :)

        Gruß Alex
        --
        http://www.google.de/search?hl=de&safe=off&q=Rechtschreibung+Standart

        1. Hallo!

          Also in der error_log stand nicht mehr drin.
          Ich hab mal in die suexec.log geschaut und folgendes gefunden:

          [2002-07-09 09:41:06]: info: (target/actual) uid: (stadtha/stadtha) gid: (users/users) cmd: dcboard.cgi
          [2002-07-09 09:41:06]: error: command not in docroot (/home/stadtha/public_html/cgi-local/dcforum/dcboard.cgi)

          Gruß Maik

          1. Hallo

            Also in der error_log stand nicht mehr drin.
            Ich hab mal in die suexec.log geschaut und folgendes gefunden:

            [2002-07-09 09:41:06]: info: (target/actual) uid: (stadtha/stadtha) gid: (users/users) cmd: dcboard.cgi
            [2002-07-09 09:41:06]: error: command not in docroot (/home/stadtha/public_html/cgi-local/dcforum/dcboard.cgi)

            Da haben wir auch schon den Bösewicht. suexec verbietet das Ausführen des CGI-Skriptes, weil es nicht innerhalb des einkompilierten Pfades liegt. Entweder Du musst den Apachen mit neuen Optionen kompilieren (http://httpd.apache.org/docs/suexec.html), oder Du editierst suexec.h in src/support der Apache-Quellen, und kompilierst anschließend suexec mit "make suexec" alleine. Dann musst Du nur noch suexec in das entsprechende Verzeichnis kopieren (meist /path/to/apache/bin).
            Ich habe suexec auch alleine kompiliert, und dabei USERDIR_SUFFIX und DOC_ROOT in suexec.h auf /home gesetzt.

            Gruß Alex
            --
            http://www.google.de/search?hl=de&safe=off&q=Rechtschreibung+Standart

            1. Da haben wir auch schon den Bösewicht. suexec verbietet das Ausführen des CGI-Skriptes, weil es nicht innerhalb des einkompilierten Pfades liegt. Entweder Du musst den Apachen mit neuen Optionen kompilieren (http://httpd.apache.org/docs/suexec.html), oder Du editierst suexec.h in src/support der Apache-Quellen, und kompilierst anschließend suexec mit "make suexec" alleine. Dann musst Du nur noch suexec in das entsprechende Verzeichnis kopieren (meist /path/to/apache/bin).
              Ich habe suexec auch alleine kompiliert, und dabei USERDIR_SUFFIX und DOC_ROOT in suexec.h auf /home gesetzt.

              Gruß Alex

              http://www.google.de/search?hl=de&safe=off&q=Rechtschreibung+Standart

              Und was ist, wenn keine suexec.h vorhanden ist?
              Auch kein gutes Zeichen oder??

              Gruß Maik
              PS: Das mit dem apache kompilieren kapier ich noch nicht ;)

              1. Hallo

                [suexec mit anderem DOC_ROOT neu kompilieren]

                [...]

                Und was ist, wenn keine suexec.h vorhanden ist?
                Auch kein gutes Zeichen oder??

                Ich vermute, daß Du den Apachen als Paket installiert hast. Dann werden wohl die vom Paketersteller vorgenommenen Standardeinstellungen nicht mit der von Dir gewünschten Konfiguration zusammen passen (z.B. Userverzeichnisse in /home).
                Du wirst vermutlich nicht umhin kommen, Dir die Sourcen von Apache zu besorgen und ihn selbst zu kompilieren.

                PS: Das mit dem apache kompilieren kapier ich noch nicht ;)

                Am einfachsten ist es imho, wenn man die meisten Optionen in den Standardeinstellungen belässt und nur einige wenige z.B. zur Modulverwendung und suexec-Übersetzung ändert.
                Dann sollte man z.B. mit:

                $ ./configure \ --prefix=/pfad/zu/deinem/apache \ --enable-shared=max \ --enable-module=most \ --enable-suexec \ --suexec-caller=deinapacheuser \ --suexec-userdir=/home \ --suexec-docroot=/home \ $ make
                $ make install

                Gruß Alex
                --
                http://www.google.de/search?hl=de&safe=off&q=Rechtschreibung+Standart

                1. Ich denk mal das Problem liegt an SuSE Professional 8.0 !

                  Da fehlt ja die Hälfte.

                2. Ich hab hier übrigens noch eine su-wrapper.conf !
                  Was ist mit dieser Datei?

                  Muss ich die vielleicht modifizieren um zum gewünschten Ergebniss zu kommen?

                  Gruß

                  Maik

                  1. Hallo

                    Ich hab hier übrigens noch eine su-wrapper.conf !
                    Was ist mit dieser Datei?

                    Muss ich die vielleicht modifizieren um zum gewünschten Ergebniss zu kommen?

                    Nein, diese Datei hat mit dem Apachen und dessen suexec nichts zu tun: http://www.birgerblixt.com/doc/packages/su-wrapper/README

                    Gruß Alex
                    --
                    http://www.google.de/search?hl=de&safe=off&q=Rechtschreibung+Standart

                3. [2002-07-09 14:46:09]: info: (target/actual) uid: (stadtha/stadtha) gid: (users/users) cmd: dcboard.cgi
                  [2002-07-09 14:46:09]: error: command not in docroot (/home/stadtha/public_html/cgi-local/dcforum/dcboard.cgi)

                  ist jetzt die Meldung die ich bekomme!
                  Ich weiss aber nicht wie und wo ich den docroot Pfad ändern kann!

                  Gruß
                  Maik

                  1. Hallo

                    [2002-07-09 14:46:09]: info: (target/actual) uid: (stadtha/stadtha) gid: (users/users) cmd: dcboard.cgi
                    [2002-07-09 14:46:09]: error: command not in docroot (/home/stadtha/public_html/cgi-local/dcforum/dcboard.cgi)

                    ist jetzt die Meldung die ich bekomme!
                    Ich weiss aber nicht wie und wo ich den docroot Pfad ändern kann!

                    Da musst Du imho suexec schon neu kompilieren. Afaik ist der Pfad nämlich fest einkompiliert, damit nicht jeder x-beliebig daran herumpfuschen kann :). Hol Dir doch einfach die Sourcen in der Version des von Dir im Moment verwendeten Apachen, lass ./configure wie oben beschrieben laufen, und kompiliere nur suexec mit "make suexec". Dann sollte nach kopieren von suexec in das richtige Verzeichnis (bei Dir war das /usr/sbin, wie man aus der Startmeldung im Errorlog lesen konnte), die CGIs ausgeführt werden können.

                    Gruß Alex
                    --
                    http://www.google.de/search?hl=de&safe=off&q=Rechtschreibung+Standart

                    1. Vielen Dank erstmal!

                      Leider weiss ich überhaupt nicht, was du meinst, und wie ich woher die sourcen hole und kompiliere usw. ;)

                    2. Selbst über das Webinterface Webmin kann ich das Modul nicht neu konfigurieren.

                    3. Hi!

                      Da musst Du imho suexec schon neu kompilieren. Afaik ist der Pfad nämlich fest einkompiliert, damit nicht jeder x-beliebig daran herumpfuschen kann :).

                      Ich wuerde vorschlagen, einfach ganz ohne suexec neu zu kompilieren (also --enable-suexec beim ./configure weglassen). Dann ist man die ganzen Probleme los. CGI-Progs werden dann alle unter der UID des Webservers ausgefuehrt, was im allg. auch ausreicht.

                      So long

                      --
                      They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety.
                          -- Benjamin Franklin

                      1. Hallo

                        Da musst Du imho suexec schon neu kompilieren. Afaik ist der Pfad nämlich fest einkompiliert, damit nicht jeder x-beliebig daran herumpfuschen kann :).

                        Ich wuerde vorschlagen, einfach ganz ohne suexec neu zu kompilieren (also --enable-suexec beim ./configure weglassen). Dann ist man die ganzen Probleme los. CGI-Progs werden dann alle unter der UID des Webservers ausgefuehrt, was im allg. auch ausreicht.

                        Dazu muss man aber iirc nicht den Apachen neu kompilieren. Es genügt auch, einfach suexec aus dem bin-Verzeichnis zu entfernen (Umbenennen dürfte es auch tun).
                        Nachgelesen und bestätigt bei: http://httpd.apache.org/docs/suexec.html#enable

                        Gruß Alex
                        --
                        http://www.google.de/search?hl=de&safe=off&q=Rechtschreibung+Standart

                        1. Hi!

                          Dazu muss man aber iirc nicht den Apachen neu kompilieren. Es genügt auch, einfach suexec aus dem bin-Verzeichnis zu entfernen (Umbenennen dürfte es auch tun).
                          Nachgelesen und bestätigt bei: http://httpd.apache.org/docs/suexec.html#enable

                          Oops naeben. Da kann ich ja meinen Apache gleich mal mit suexec kompilieren und hab dann nicht so viel Arbeit, wenn ich es schnell mal brauche.

                          So long

                          --
                          Wipe Info uses hexadecimal values to wipe files. This provides more security than wiping with decimal values.
                              -- Norton SystemWorks 2002 Professional Edition User's Guide
                                 (ftp://ftp.symantec.com/public/english_us_canada/products/norton_systemworks/ver5.0/nswpro2002.pdf)
                                 page 158