Warum laufen meine alten CGI's nicht mehr? Was hat sich beim Apache geändert?

quarzsnoopy

[Free|Net]BSD - User
Ich hatte ein wunder schönes datenbankbasiertes Adressbuch auf meinem Server (FreeBSD 5.2.1p11) mit Postgresql und Apache 2.0.50_1 laufen. Alles funktionierte schon seit fast 2 Jahren unveränder (nur updates des OS und der Software; nicht die Scripte) und einwandfrei.
Jetzt bin ich durch aktuelle Updates vor ein paar Tagen auf den Apache 2.0.52_1 gekommen und die CGI's werden nicht mehr ausgeführt.
Ich habe nach drei Tagen und zwei Nächten aufgegeben und auf Apache 1.3.31_6 (heute) gewechselt... und das gleiche Problem.

Ich habe auch eine neue Funktion "UserDir" gesehen, die ich aber (glaube ich) ignorieren kann.

Weiss einer was sich da getan hat? Bin für jede Idee dankbar!!!


Meine httpd.conf ist immer unverändert (original, nur die Zeile "Include etc/apache2/Includes/*.conf" wurde unten angefühgt). Die vhost.conf sieht so aus:



Listen erde:80

<Directory "/">
AllowOverride AuthConfig
Order Deny,Allow
Allow from all
Options Indexes FollowSymLinks IncludesNoExec
</Directory>

<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files>

<Directory "/usr/local/www/data">
AllowOverride AuthConfig
Options FollowSymLinks ExecCGI
AddOutputFilter Includes html
LanguagePriority de en fr es
ForceLanguagePriority Prefer Fallback
</Directory>

NameVirtualHost erde


<VirtualHost erde>
SuexecUserGroup adressen webusers
ServerAdmin adressen@quarz.de
DocumentRoot /usr/local/www/data/adressen/htdocs
ScriptAlias /cgi-bin/ "/usr/local/www/data/adressen/cgi-bin/"
ServerName adressen
ErrorLog "|/usr/local/sbin/rotatelogs /usr/local/www/data/adressen/log/error_log 2620800"
CustomLog "|/usr/local/sbin/rotatelogs /usr/local/www/data/adressen/log/access_log 2620800" common
</VirtualHost>





http://adressen/
=============

Die Fehlermeldungen die ich bekomme lauten im Browser (ich klicke z.B. auf den Knopf um eine neue Adresse einzutragen):
"500 Internal Server Error";

im /var/log/httpd-suexec.log:
[2004-10-21 03:05:02]: info: (target/actual) uid: (adressen/adressen) gid: (webusers/webusers) cmd: insertform.cgi
[2004-10-21 03:05:02]: emerg: cannot get docroot information (/usr/local/www/data)

obwohl der Pfad stimmt??? (Symlink: /usr/local/www/data -> /home/www)

im Log (/usr/local/www/data/adressen/log/error_log.1098115200):
Premature end of script headers: /usr/local/www/data/adressen/cgi-bin/insertform.cgi

Wenn ich allerdings den kompletten Pfad zum CGI-Script im Browser eingebe, dann der Quelltext des Scripts angezeigt (alle Scripte sind in "/bin/sh" geschrieben, habe aber genau das gleiche Problem mit Perlscripten):
http://adressen/cgi-bin/insertform.cgi



Ich habe gerade den 1,3-er drauf und hab auch schon mit
AddType application/x-httpd-cgi .cgi
AddHandler cgi-bin .cgi
versucht, hat dann die Fehlermeldung:
405 Method Not Allowed
The requested method POST is not allowed for the URL /cgi-bin/insertform.cgi.
bekommen.

habe dann auch folgende probiert:
<Limit GET POST PUT DELETE CONNECT OPTIONS PATCH PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
Order allow,deny
Allow From All
</Limit>
<LimitExcept GET POST PUT DELETE CONNECT OPTIONS PATCH PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
Order allow,deny
Allow From All
</LimitExcept>
und bekomme dann die gleiche Fehlermeldung (405) wieder. Das Script direkt als URL, wird nur angezeigt statt ausgeführt. :confused:


Was soll ich jetzt machen??? Ich habe keine Ahnung mehr... habe in den letzten drei Jahren alles mögliche mit dem Apache 1.3 und später Apache 2.0 hinbekommen, bin jetzt aber fast am verzweifeln.

Kann jemand weiterelfen, ist das Problem vielleicht bekannt? Ist das eine neue Sicherheitsoption? Wenn ja wie conft man das denn?
Bin für jede Hilfe dankbar, habe im Netz nichts dazu gefunden. :zitter:
 
Zuletzt bearbeitet:
Habe jetzt den Apache 2.0.52 wieder aktiv. Jetzt bringt er beim Klick auf dem Button (Daten werden per POST verschickt) immer Fehler 500, und beim direkten eingeben der URL mit Pfad zum CGI-Script bietet er mir das Script zum download an, dann habe ich den AddHandler aktiviert und jetzt zeigt er mir das CGI-Script als Text-File an...
Und wie sage ich ihm, was er mit den Dateien mit der Endung ".cgi" machen soll?


tail -f /var/log/httpd-suexec.log
liefert:
[2004-10-22 01:26:57]: uid: (2002/adressen) gid: (2000/2000) cmd: insertform.cgi
[2004-10-22 01:26:57]: cannot get docroot information (/usr/local/www/data)

Die Rechte stimmen:
bash-2.05b# id adressen
uid=2002(adressen) gid=2000(webusers) groups=2000(webusers)
bash-2.05b# ls -la /usr/local/www/data/adressen/cgi-bin/insertform.cgi
-rwxr-xr-x 1 adressen webusers 3837 16 Okt 21:21 /usr/local/www/data/adressen/cgi-bin/insertform.cgi



aktueller Stand meiner "vhost.conf":
(httpd.conf ist original!)

###### Beginn ################################################
Listen erde:80


<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from .quarz.de
</Location>
ExtendedStatus On

<Location /server-info>
SetHandler server-info
Order deny,allow
Deny from all
Allow from .quarz.de
</Location>


<Directory "/">
#AllowOverride None # disabling .htaccess files
AllowOverride AuthConfig
Options Indexes FollowSymLinks IncludesNoExec
Order Deny,Allow
#Deny from all
Allow from all
</Directory>

<Directory "/usr/local/www/data">
AllowOverride AuthConfig
Options All
AddOutputFilter Includes html
LanguagePriority de en fr es it nl sv
ForceLanguagePriority Prefer Fallback
</Directory>

<Directory "/usr/local/www/data/*/cgi-bin/">
AllowOverride AuthConfig
Options FollowSymLinks ExecCGI
#AddType application/x-httpd-cgi .cgi
AddHandler cgi-bin .cgi
#AddHandler cgi-script .cgi
<Limit GET POST PUT DELETE CONNECT OPTIONS PATCH PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
Order allow,deny
Allow From All
</Limit>
<LimitExcept GET POST PUT DELETE CONNECT OPTIONS PATCH PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
Order allow,deny
Allow From All
</LimitExcept>
Order allow,deny
Allow from all
</Directory>


<Files ~ "^\.ht">
Order allow,deny
Deny from all
</Files>


NameVirtualHost erde

<VirtualHost erde>
SuexecUserGroup adressen webusers
ServerAdmin adressen@quarz.de
DocumentRoot /usr/local/www/data/adressen/htdocs
ScriptAlias /cgi-bin/ "/usr/local/www/data/adressen/cgi-bin/"
ServerName adressen
ErrorLog "|/usr/local/sbin/rotatelogs /usr/local/www/data/adressen/log/error_log 2620800"
CustomLog "|/usr/local/sbin/rotatelogs /usr/local/www/data/adressen/log/access_log 2620800" common
</VirtualHost>
######## Ende #########################################################################


Kann da jemand bitte mal helfen?
 
Zuletzt bearbeitet:
In diesem Zusammenhang möchte ich anmerken dass der cgi irc chat "Forbidden" ist. Hängt evt. damit zusammen.

*Wenn Problem bereits bekannt bitte löschen*
 
daiv schrieb:
vielleicht hilft ein portupgrade bei perl?!

Ich hatte das gesammte System auf aktuellsten Stand gebracht (make world+ , und anschliessend portupgrade -RNa), also alles, auch Perl. Solche Probleme habe ich in den ganzen 4 Jahren (die ich FreeBSD nutze) noch nicht gehabt...

Aber trotzdem Danke!
 
Illuminatus schrieb:
In diesem Zusammenhang möchte ich anmerken dass der cgi irc chat "Forbidden" ist. Hängt evt. damit zusammen.

*Wenn Problem bereits bekannt bitte löschen*


Das wusste ich auch nicht, kann schon sein!?
Ist aber schon sehr ärgerlich, das sowas passiert!

Danke für den Hinweis!
 
Bin etwas weiter gekommen!
Der Fehler liegt eindeutig bei "suEXEC", wenn ich den abschalte geht alles.

Die Fehlermeldung, die er bringt lautet:
[2004-10-27 02:45:58]: uid: (2002/adressen) gid: (2000/2000) cmd: insertform.cgi
[2004-10-27 02:45:58]: cannot get docroot information (/usr/local/www/data)

Der Link "/usr/local/www/data" scheint ihn zu stöhren!
Kann das sein, das ich "SymLinksifOwnerMatch" abschalten muss? Ich habe schon
<Directory "/usr/local/www">
AllowOverride AuthConfig
Options FollowSymLinks -SymLinksifOwnerMatch
Order allow,deny
Allow from all
</Directory>
eingegeben, was muss ich tun?

Weiss einer vielleicht wie man den suEXEC zur kooperation bekommt?

Bin für Antworten sehr dankbar!!!
 
Was ist beim SuEXEC jetzt zusätzlich zu beachten, damit er läuft? Bis vor kurzem lief alles... ich finde in der Dokumentation nichts, was neu sein sollte!
Kann mir einer mal nen Tip geben?
Danke!
 
Zurück
Oben