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
denkfehler!
-
- 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
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
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.
liefert aber einen string.
was tun sprach rolgal
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']
was tun sprach rolgal
-
- 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
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
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
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
-
- 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
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
aha, es dämmert!
ich habe das etwas anders verstanden. schreiben ist nicht immer die beste form der kommunikation
das mit zope war nur ein bsp. was ich machen will, also so ähnlich eben.
mfg
rolgal
ich habe das etwas anders verstanden. schreiben ist nicht immer die beste form der kommunikation
das mit zope war nur ein bsp. was ich machen will, also so ähnlich eben.
mfg
rolgal
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
na endlichrolgal hat geschrieben:aha, es dämmert!
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 Computerich habe das etwas anders verstanden. schreiben ist nicht immer die beste form der kommunikation
Na Zope ist schon eine ganz andere Baustelle.das mit zope war nur ein bsp. was ich machen will, also so ähnlich eben.
mfg
rolgal
Gruß
Dookie
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
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
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:
mfg
rolgal
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
rolgal
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
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
-
- 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
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
hi dookie!
soweit funktioniert es jetzt mal, die rechte konnte ich schon setzen, ich habe....ach egal.
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?
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()
-
- 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
nicht getestet, sollte aber klappen.
Gruß
Dookie
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()
Gruß
Dookie
hi dookie!
mir ist ja das sowieso net koscha vorgekommen. wer hat mich denn zu der lösung hingeführt
ich habe mir das mit dem os.chdir und os.environ net aus dem hut gezaubert.
war aber trotzdem lehrreich, also ken vorwurf
die nachstehende version leuchtet mir sehr ein und werde ich morgen ausprobieren
danke dir,
mir ist ja das sowieso net koscha vorgekommen. wer hat mich denn zu der lösung hingeführt
ich habe mir das mit dem os.chdir und os.environ net aus dem hut gezaubert.
war aber trotzdem lehrreich, also ken vorwurf
und wie sieht das aus?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.
die nachstehende version leuchtet mir sehr ein und werde ich morgen ausprobieren
danke dir,
hi dookie!
dein bsp. funktioniert klasse, nur falls es jmd. auf die schnelle probiert, es ist dir ein 'e' zu viel entwischt bei
muss heissen
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
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))
Code: Alles auswählen
ftp.storlines('STOR index6.htm',StringIO(content))
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
-
- 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
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
hi
gut mir ist ein 'e' zuviel entwischt.
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
gut mir ist ein 'e' zuviel entwischt.
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
-
- 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
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