Passwörter in Pythoncode Verschlüsseln und zur Laufzeit ents

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
bankkind
User
Beiträge: 106
Registriert: Freitag 14. September 2007, 23:02
Wohnort: Teltow
Kontaktdaten:

Hallo Leute,
ich brauche für ein Skript von mir eine SMTP-Funktion und will nicht das Passwort des SMTP Accounts im Klartext in den Code eintragen. Gibt es gute Möglichkeiten diesen Verschlüsselt darzustellen und zur Laufzeit zu entschlüsseln?

Welche Alternativen gibt es?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Ein verschlüsseltes Passwort einzugeben ist genauso unbrauchbar, da spätestens der Schlüssel im Skipt stehen muss.

Ein gesaltetes Passwort ebenfalls, da du nach dem entschlüsseln auch wieder entsalzen musst.

Dein Problem lässt sich nicht durch Technologie lösen (Schneier lässt grüßen)
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Wenn du nur ein einzelnes Script hast, in dem du ein verschlüsseltes Kennwort stehen hast, muss das Script zwangsläufig auch den Code zum Entschlüsseln enthalten, denn der SMTP-Server will ja den Klartext haben. Die einzige Möglichkeit ist, das Kennwort nicht in die Datei zu schreiben, sondern es jedes Mal zu übergeben.

Du könntest das SMTP-Kennwort natürlich mit einem anderen Kennwort schützen, aber dann hast du mit diesem Kennwort das selbe Problem in Grün.

Stefan
bankkind
User
Beiträge: 106
Registriert: Freitag 14. September 2007, 23:02
Wohnort: Teltow
Kontaktdaten:

Wenn ich es in eine andere Datei schreibe, dann kann doch theoretisch auch jemand diese Datei lesen der auch Zugriff auf den Code des Skripts hat, oder nicht?
lunar

Ja. Wie man es auch dreht und wendet: Man kann Daten nicht sicher verschlüsseln, wenn man sie programmatisch ohne Interaktion auch wieder entschlüsseln möchte.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Das kannst du drehen wie du willst: Das Problem hast du bei allen Daten die das Skript von sich aus anfasst.
Die einzige Lösung ist, wie sma schon sagte, dass du eine Benutzereingabe hernimmst.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Achtung, Passwortangabe via Parameter ist keine gute Idee, da der Aufruf ggf. in ``ps`` zu sehen ist, mit allen Kommandozeilenargumenten. Und die Passworte tendieren dazu in Dateien wie ``.bash_history`` hängenzubleiben und dann via ``history`` wieder zum vorschein zu kommen.

Also: Passworte bei textbasierten Programmen immer von stdin oder ähnlichem lesen, nie via Parameter.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Evtl. kann man das Password im keyring speichern, welches automatisch nach anmelden entschlüsselt wird???

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Wenn man ein OS nutzt das sowas unterstützt, dann geht so etwas natürlich schon und ist eine recht praktische Sache.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

In welchem "keyring"? Du meinst den standardisierten betriebssystemunabhängigen und nicht existenten keyring?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Na in dem GNOME-Keyring, welche Frage. Als ob man irgendetwas anderes nutzen könnte ;)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Also ich würde von dem KDE Ding ausgehen.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Pah der ist doch nichts gegen Kwallet :P
Als Windows-User hat man natürlich wie immer schlechte Karten ;)
lunar

DasIch hat geschrieben:In welchem "keyring"? Du meinst den standardisierten betriebssystemunabhängigen und nicht existenten keyring?
Ach, irgendwann gibts da bestimmt auch ein Freedesktop-Ding für ;)
ichbinsisyphos
User
Beiträge: 120
Registriert: Montag 4. Juni 2007, 19:19

Wie funktioniert shadow und so? Keine wirkliche Ahnung, aber ich dachte damit kann man sowas machen.

Das Passwort muss ja wahrscheinlich nicht völlig unmöglich zu entschlüsseln sein, aber es im Skript in Klartext stehen zu haben ist schon die schlimmste Variante.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

ichbinsisyphos hat geschrieben:Wie funktioniert shadow und so? Keine wirkliche Ahnung, aber ich dachte damit kann man sowas machen.
In der Shadow stehen keine Passwörter, sondern nur die Hashes des Passwörter, aus denen man die Passwörter nicht mehr herausbekommt. Außerdem wird sichergestellt, dass die ``/etc/shadow`` nur vom root-Nutzer gelesen werden kann.
Somit für dein Vorhaben völlig unbrauchbar.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
ichbinsisyphos
User
Beiträge: 120
Registriert: Montag 4. Juni 2007, 19:19

Ja,ich hab grad den Wikipedia-Artikel dazu gelesen. Aber es gibt sicher eine low level password-Datenbank, so dass man nicht gleich auf Gnome- oder KDE-Applikationen zurückgreifen muss.

edit:

Und wie stehts mit PAM und pwdb? Ich rate hier mehr, falls es euch nicht auffällt :-)

pwdb hat aber anscheinend keine Dokumentation, alles was ich gefunden hab war:
pwdb (Password Database Library) allows configurable access to and management of /etc/passwd, /etc/shadow, and network authentication systems including NIS and Radius.
Was ja nicht sehr passend klingt.

Für PAM sollts aber nach 15 Jahren genug Doku geben, und das lässt sich meiner Meinung nach dafür nutzen, Anmeldedaten zentral zu speichern und abzurufen.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

PAM selber speichert keine Passwörter. Es ist nur eine Zwischenschicht, die verschiedene Authentifizierungsmaßnahmen unter einen Hut bringt und Anwendungen diese in einer einheitlichen Schnittstelle zur Verfügung stellt.

Vereinfacht gesagt, die Anwendung kommt dann und sagt "hallo, ich bin Dienst X, und User Y möchte sich mit den Credentials Z anmelden, ist das OK?" und PAM vermittelt dann je nach Konfiguration an pwd, LDAP, eine Datenbank oder was auch immer.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Zudem geht das nur in eine Richtung, also "Hier ist User Y und ich bin Dienst X, gib mir bitte mal die Credentials Z" geht nicht. Dafür ist es nicht gedacht und das wäre sicherheitstechnisch ein ziemliches Fiasko.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
ichbinsisyphos
User
Beiträge: 120
Registriert: Montag 4. Juni 2007, 19:19

Es wär überhaupt kein sicherheitstechnisches Fiasko, bestimmten usern Zugriff auf ausgewählte, eigene Passwörter zu geben.

Was anderes können ja auch Gnome-Keyring und Konsorten nicht machen. Bei denen gibts halt ein master password. Ich stell mir vor, dass die Anmeldung an der Konsole genug (bewiesen durch nichts anderes als die uid) Sicherheit bietet, zumindest mehr als plaintext password files und base64 Encodierung, oder was immer es auch sonst so gibt um Passwörter schwerer lesbar zu machen.
Gesperrt