Zum Inhalt springen

APACHE ERROR: gunzip: stdout: Broken pipe - Problem?!


dummabua

Empfohlene Beiträge

Hi,

ich habe hier einen Apache 1.3 Webserver. Auf diesem Server sind auch Proxylogs gespeichert. Ich habe mir ein Perl Script geschrieben, mit dem ich diese Proxylogs nach bestimmten Usern auswerten kann. Das Problem ist nun, dass das jetzt jemand anderes machen soll (also offiziell), der aber nicht so technisch versiert ist, um sich auf diesem SunOS und mit diesem Script zurecht zu finden. Also dachte ich, ich bau Ihm eine WebGUI, in die er das Auswertungskriterium eingeben kann. Das ganze liegt in dem public_html Ordner. Das Auswertungscript und das Steuerscript liegen im cgi-bin Verzeichniss (Einstellungen für cgi`s im public_html in der httpd.conf sind gemacht und funzen - getestet). Folgend läuft es ab:

User gibt Daten in Formular ein.

Formular übergibt Werte an Steuerscript.

Steuerscript überprüft Einfaben.

Steuerscript ruft Auswertungsscript mit diesen Werten als Übergabeparameter auf. (mit PERL - system-Befehl)

Auswertungscript sucht sich relevante Logs und bastelt dynamisch Shell befehl zusammen, die die Logs zerlegen. (Log Dateien sind gezipped)

Der shell befehl der gebaut wird, ist ein gzunzip und nach einer pipe ein grep auf das kriterium.

Nun das Problem: wenn ich das Script als User händisch aufrufe, funktioniert es wunderbar. Wenn ich es aber per WebGUI anstosse, bekomme ich im apache error_log folgenden Fehler: gunzip: stdout: Broken pipe

Kann es sein, dass mir der Apache nicht erlaubt, unter seinem User einen dynamischen shell befehl mit einer pipe auszuführen?

Wenn ja, wie kann ich dass umgehen? Gibds dafür einen Hack oder eine saubere Lösung? Bin echt am verzweifeln.

Link zu diesem Kommentar
Auf anderen Seiten teilen

HI,

manuell wird das Script wie folgt auf gerufen:

bash-2.03# ./auswertung.pl -d -20 -u mein.kriterium

-d steht dafür, wieviele tage zurück ausgewertet werden soll

-u steht für kriterium

Hier dier Code, der den shell befehl zusammenbaut:

system( "/usr/bin/gunzip -c " . $file . " | /usr/bin/grep " . $kriterium . " >> " . $kriterium . "_auswertung.txt" );

Wenn das Script durch is, ertstellt er ein txt file mit den relevanten Daten.

----------------------------------------------------------------------------

Hier der Auszug aus dem Steuerscript, der das obige auswertungsscript aufruft (rufen soll)

system ("/bin/perl auswertung.pl -d ".$tage." -u ".$name);

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hmm... *grübel*

Schau mal nach, wer alles ein Lese-Recht auf die Proxy Logs hat. Dann probier aus, ob dein Skript das Schreib-Recht auf das Verzeichnis hast, in dem deine Ausgabe Datei liegen soll. Das Problem hatte ich mal.

Denn soweit ich weiß, hat ein Skript aus Sicherheitsgründen beschränkte Rechte.

Vielleicht lässt es sich so umgehen: (sicherheit mal außen vor gelassen)

Versuche dem Skript das sog. Sticky-Bit zu geben. Damit wird es nicht mit den Rechten des Ausführenden Users ausgeführt (also Webserver-Rechte), sondern mit den Rechten des Besitzers. Wenn du dem Besitzer des Skriptes lese und Schreibrechte gibst, die nötig sind, und das Skript dann mit diesem Sticky bit versiehst könnte es vielleicht funktionieren...

Wie man aber das Sticky bit setzt kann ich Dir leider nicht sagen...

Probiers einfach mal...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das mit dem sticky bit werde ich jetzt mal probieren...

Der Werbserver User hat die nötigen Rechte auf alle relevanten Dateien und Ordner

UPDATE: Also ich hab mich jetzt mal über das sticky bit schlau gemacht, aber so wie ich das verstehe, sagt das sticky bit nur, dass der eigentümer die datei z.B. löschen darf... steh ich grad aufm schlauch?

Hier die Beschreibung des sticky bits:

Über das setzen des sogenannten sticky – Bits und des suid - bzw. des sguid - Bits

können spezielle Rechte vergeben werden.

Das sticky – Bit darf nur vom Superuser gesetzt werden. Wurde das Bit gesetzt, so

wird der letzte x – Eintrag in der Zugriffskontrollliste in ein t umgewandelt. Wenn das

Bit für ein Verzeichnis gesetzt worden ist, so bedeutet das, dass nur der Eigentümer

einer Datei diese aus dem Verzeichnis löschen darf. Wenn das sticky – Bit für eine

Datei gesetzt worden ist, bedeutet das, dass sie vom Betreibsystem permanent im

Speicher zu halten ist. Die Datei darf dann nicht von der Speicherverwaltung auf

Hintergrundspeichermedien ausgelagert werden.

Anhand dieser Beschreibung denke ich mal, dass das nicht dass ist, was ich brauche :(

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...