denkfehler!

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Gast

hi dookie

sehe es ja genauso. ich habe auch gerade folgendes probiert:
ein gästebuch mit einer textdatei. bei 755 passiert hier nichts. 755 ist für ausführbare cgi skripten.

die 0666 geht bei textdateien, wusste ich nicht.

also 777 für verzeichnisse und 0666 für dateien, wenn sie beschreibbar sein sollen.

mfg

rolgal
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi rolgal,

wenn die Textdatei vom Script selber erzeugt wird reicht 0644.
immer die 0 davor, dann ists oktal und jede Stelle der Zahl entspricht 3 Bit.


Gruß

Dookie
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Nehmen wir einmal an, dein Owner vom httpd Prozess ist wie bei mir apache, dann ist 755 für ein Verzeichnis ausreichend, wenn apache auch Owner vom Verzeichnis ist. Wenn du das auf 777 setzt, funktioniert das auch, aber du legst unter Umständen deine CGI Scripte offen. Wenn es auf einem Server läuft, sollte man das nicht machen.

Wenn das Script eine Datei erstellt, dann sollte die normal schon die Berechtigung 644 haben, ist in der Bash so, aber wo kommen da die Voreinstellungen her? Ein umask 022 vorher sollte die Einstellung vornehmen.

So lange du noch entwickelst, setze ersteinmal alles auf 777 (umask 0) und wenn es dann läuft, stell die Sicherheit ein.

Hans
Gast

hi !

wieder von vorne! wenn ich es geschnallt habe, dann muss ich jedesmal beim aufruf des skripts den nutzer ermitteln ihn zum besitzer der datei machen und ihm die notwendigen rechte übergeben.

so weit so gut. ich habe mir aber in der doku chown angeguckt und hier wird eine zahl erwartet für die uid und gid.

Code: Alles auswählen

os.environ['USER']
liefert aber einen string.

was tun sprach rolgal :D :?:
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi nochmal,

am Einfachsten ist es, wenn Du die Textdateien und Verzeichnisse, die mit CGI-Scripten bearbeitet werden sollen, auch von CGI-Scripten erstellen lässt.
Die CGI-Scripte laufen alle unter dem selben User, bei Debian-Linux heisst der "www-data", ganz egal wer grad das Script aufgerufen hat.

Mach Dir also am besten ein Initscript, das Du auf den Server lädst, welches die Verzeichnisse und Dateien erstellt, die von anderen Scripten bearbeitet werden sollen. In dem Script kannst Du auch Dateien von deinem Rechner hochladen lassen.

So gibts keine Probleme wegen falscher Rechte oder falschem Owner der Dateien und Verzeichnisse. Für Verzeichnisse kannst Du dann 0755 und für Dateien 0644 als Rechte benutzen.

Dann brauchst auch nicht mit Benutzern und Rechten rumdröseln.


Gruß

Dookie
Gast

hi dookie!

danke für den tipp, aber ich will ein bisschen was anders. jede seite soll bearbeitet werden können. über eine seite die ähnlich wie die sitemap dynamisch erstellt wird, kann ich im administrationsbereich, zu dem nur ich mich einloggen kann, eine seite zur bearbeitung auswählen.
freilich gibt es sowas in zope, ich will es aber tiefer in der seite integriert.

mfg


rolgal
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi rolgal,

is ja egal, dann lad die Seiten mit einem Script hoch und lass sie von dem Script an die entsprechenden stellen schreiben. Dann kannst Du sie mit dem Administrationsscript bearbeiten. Es ist ganz egal wer dann dort eingeloggt ist, der Besitzer der von einem Script erstellten Dateien ist immer der gleiche egal von wem auf welchem Rechner mit welchem Browser oder sonstwie über http das Script aufgerufen wurde!!!

Bei Zope läuft das Ganze noch etwas komplexer ab. Da Du dort ja auch Benutzer anlegen kannst die beim Login erkannt werden und die Objekte dann demjenigen zugeordnet werden. Wei kommst Du jetzt überhaupt auf Zope, ich dachte du machst das mit eigenen Scripten?

Wenn Du aber etwas per ftp hochlädst ist der Eigentümer und die Gruppe ein anderer als wenn ein Script die Datei angelegt hat. Kannst Du schön in einem guten FTP-Programm wie gFTP sehen, dort werden auch die Eigentümer und Gruppen der Dateien und Verzeichnisse angezeigt.


Gruß

Dookie
Gast

aha, es dämmert!

ich habe das etwas anders verstanden. schreiben ist nicht immer die beste form der kommunikation :D

das mit zope war nur ein bsp. was ich machen will, also so ähnlich eben.

mfg

rolgal
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

rolgal hat geschrieben:aha, es dämmert!
na endlich ;)
ich habe das etwas anders verstanden. schreiben ist nicht immer die beste form der kommunikation :D
Naja, wenn man aufmerksam liest und mal das interpretieren weg lässt. Ich weiss, das ist für nen Menschen schwerer als für einen Computer ;)
das mit zope war nur ein bsp. was ich machen will, also so ähnlich eben.
Na Zope ist schon eine ganz andere Baustelle.
mfg

rolgal

Gruß

Dookie
Gast

hi dookie!

ich meinte ja nur ich will diese funktion, des online editierens auf meiner seite nutzen können, so wie das u.a. auch mit zope möglich ist.

das anlegen lassen mit dem skript und dann das runterladen hat mal nicht geklappt.

mal sehen, ob ich selber draufkomme.

mfg

rolgal
Gast

so, das mti ftp ging mir jetzt so auf die eier, dass ich mal was anderes probiert habe, spricht was gegen diese methode?

es klappt mal, dass es so ausgegben wird wie geplant. mal sehen was der upload für troubles mit sich bringt:

Code: Alles auswählen

#!/usr/local/bin/python

from seiten import AdminSeite
import  urllib2

content=urllib2.urlopen('http://diplomarbeit.weberanto.net/definition.htm').read()
admin=AdminSeite(content)
print admin
mfg

rolgal
Gast

nochmal....

alles theoretisch kapiert. ich kann aber vom browser aus keine datei am server anlegen, weil ich einen permission denied bekomme!

wie soll ich auch rechte einer datei übergeben, die ja nicht angelegt werden kann, weil ich nicht darf :?:

mfg

rolgal
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Das liegt aber nicht an den Rechten der Datei, sondern an den Rechten des Verzeichnisses.
Wenn das Verzeichnis die Rechte 0755 hat dann kannst Du mit cgi darin keine Dateien oder Verzeichnisse anlegen. Leider lassen sich die Rechte vom Wurzelverzeichnis bei einigen Providern auch nicht ändern. So musst Du ein Verzeichnis anlegen mit den Rechten 0777 und darin kannst Du mit dem Script dann Dateien und Unterverzeichnisse anlegen. Bei vielen Providern geht das nur im Verzeichnis cgi-bin.

Sicherheit hat halt ihren Preis.


Gruß

Dookie
Gast

hi dookie!

soweit funktioniert es jetzt mal, die rechte konnte ich schon setzen, ich habe....ach egal.


Code: Alles auswählen

#!/usr/bin/env python

import cgi, ftplib, os, sys

form=cgi.FieldStorage()

content=form.getvalue('user_eingabe')

os.chdir(os.environ['DOCUMENT_ROOT'])
f=file('index6.htm','w')
f.write(content)
f.close()

ftp=ftplib.FTP('meinserver','meinuser','meinpasswort')
ftp.cwd('html/crossover/diplomarbeit')

ftp.storlines('STOR index6.htm',file('index6.htm','r'))
ftp.quit()
momentan wird das skript auf meinem lokalen server ausgeführt, d.h. er legt in /var/www/html ein fileobjekt an, das er dann per ftp überträgt. läuft es dann am richtigen server, dann legt er mir die datei zuerst auch im /html verzeichnis ab. d.h. ich habe die dann immer doppelt. geht das nicht eleganter?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi rolgal,

hmm, warum lädst du es erst wieder mit ftp hoch, du kannst ja Dateien über ein html-Formular mit der Methode post hochladen. das landet dann irgendwo im /tmp verzeichnis von wo aus es mit dem Script an die richtige Stelle kopiert wird.
Deine Lösung kommt mir irgendwie vor, wie: "Von hinten, durch die Brust, ins Auge".

Wenn du es aber mit der ftplib machen willst/musst, kannst du dir das Zwischenspeichern in eine Datei auch sparen. Dafür gibts das Modul StringIO

Code: Alles auswählen

#!/usr/bin/env python

import cgi, ftplib
from StringIO import StringIO

form=cgi.FieldStorage()

content=form.getvalue('user_eingabe')

ftp=ftplib.FTP('meinserver','meinuser','meinpasswort')
ftp.cwd('html/crossover/diplomarbeit')
ftp.storelines('STOR index6.htm',StringIO(content))
ftp.quit()
nicht getestet, sollte aber klappen.


Gruß

Dookie
Gast

hi dookie!

mir ist ja das sowieso net koscha vorgekommen. wer hat mich denn zu der lösung hingeführt :D
ich habe mir das mit dem os.chdir und os.environ net aus dem hut gezaubert.

war aber trotzdem lehrreich, also ken vorwurf
du kannst ja Dateien über ein html-Formular mit der Methode post hochladen. das landet dann irgendwo im /tmp verzeichnis von wo aus es mit dem Script an die richtige Stelle kopiert wird.
und wie sieht das aus?

die nachstehende version leuchtet mir sehr ein und werde ich morgen ausprobieren

danke dir, :D
Gast

hi dookie!

dein bsp. funktioniert klasse, nur falls es jmd. auf die schnelle probiert, es ist dir ein 'e' zu viel entwischt bei

Code: Alles auswählen

ftp.storelines('STOR index6.htm',StringIO(content)) 
muss heissen

Code: Alles auswählen

ftp.storlines('STOR index6.htm',StringIO(content)) 
die andere version kann ich mir nur theoretisch vorstellen, denn wenn ich das vom /tmp kopiere gibt sicher auch troubles mit den rechten, sonst könnte ja jeder auf irgendein serververzeichnis kopieren, aber vielleicht habe ich dich ja missverstanden.

jedenfalls dachte ich eine praktikable lösung ist nur mit ftp möglich.

nochwas: es gibt trotzdem das skript richtig arbeitet einen fehler
[Thu Apr 15 10:54:59 2004] [error] [client 127.0.0.1] Premature end of script headers: /var/www/cgi-bin/upload.py

finde ich seltsam, lässt man ihn noch irgendwas schreiben in den browser, dann tritt diese meldung nicht auf, ich finde das einfach seltsam

mfg

rolgal
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi rolgal,

die Zeile war schlecht kopiert aus Deinem Beispiel ;)

das mit dem Fileupload via CGI-Script kenn ich von PHP aus. Sollte mit Python eigentlich auch so ähnlich gehen, da hab ich mich aber, mangels Webspace mit Pythonunterstützung noch nicht näher befasst.

Wenn Du das Script über den Browser aufrufst, erwartet dieser ein Ergebnis. Da das Script aber nichts zurückliefert (html-Seite) kommt die Fehlermeldung.

Schick als am Einfachsten eine simple html-Seite mit print an den Browser dann ist der error gegessen.


Gruß

Dookie
Gast

hi

gut mir ist ein 'e' zuviel entwischt. :D


falls du mal webspace mit pyhonunterstüztung zu einem sauguten preis suchst:

http://www.speicherhosting.com

ich bin mehr und mehr damit zufrieden, haben sich gesteigert.


cgi upload:
ich kann mir ja das nur so vorstellen mit dem cgi upload. ich lese das formular aus, klar ist das jetzt irgendwo in /tmp. dann muss ich aber wieder ein fileobjekt anlegen und wenn die rechte des verzeichnisses stimmen, dann kann man es wohl dorthin kopieren. wenn die grundsätzliche überlegung stimmt, sehe ich keinen vorteil darin.


mfg

rolgal
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi auch,

der Vorteil ist, daß nirgends dein ftp-passwort auftaucht im Script. Falls der Webserver mal verkonfiguriert wurde und er *.py als Text im Browser anzeigt oder es zum Download anbietet, ist auch Dein ftp-Passwort offen sichtbar. Darum ist der Upload mittels Webformular und dann kopieren aus /tmp bei php z.B. standartprozedere.


Gruß

Dookie
Antworten