dummabua Geschrieben 16. Februar 2005 Teilen Geschrieben 16. Februar 2005 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Biese Geschrieben 16. Februar 2005 Teilen Geschrieben 16. Februar 2005 Moin *gähn* Poste doch mal den Manuell eingegebenen Shell Befehlm und die Code-Schnipsel, die den Befehl dynamisch zusammenbauen. Vielleicht kann man da mehr erkennen... Grußi, Matti Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dummabua Geschrieben 16. Februar 2005 Autor Teilen Geschrieben 16. Februar 2005 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); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Biese Geschrieben 16. Februar 2005 Teilen Geschrieben 16. Februar 2005 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... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dummabua Geschrieben 16. Februar 2005 Autor Teilen Geschrieben 16. Februar 2005 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
cane Geschrieben 16. Februar 2005 Teilen Geschrieben 16. Februar 2005 Ihr meint warscheinlich SUID... mfg cane Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Biese Geschrieben 17. Februar 2005 Teilen Geschrieben 17. Februar 2005 Ihr meint warscheinlich SUID... mfg cane *gg* warscheinlich Bitte verzeiht, wenn ich nicht mit fundiertem Wissen glänzen kann, sondern nur mit so sachen um mich werfe :-/ Aber der gute Wille zählt *g* Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.