Seite 1 von 3

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

Verfasst: Freitag 5. Juni 2009, 23:52
von bankkind
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?

Verfasst: Samstag 6. Juni 2009, 00:23
von cofi
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)

Verfasst: Samstag 6. Juni 2009, 11:36
von sma
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

Verfasst: Samstag 6. Juni 2009, 12:22
von bankkind
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?

Verfasst: Samstag 6. Juni 2009, 12:24
von 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.

Verfasst: Samstag 6. Juni 2009, 12:25
von cofi
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.

Verfasst: Samstag 6. Juni 2009, 12:31
von Leonidas
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.

Verfasst: Samstag 6. Juni 2009, 19:59
von jens
Evtl. kann man das Password im keyring speichern, welches automatisch nach anmelden entschlüsselt wird???

Verfasst: Samstag 6. Juni 2009, 20:02
von Leonidas
Wenn man ein OS nutzt das sowas unterstützt, dann geht so etwas natürlich schon und ist eine recht praktische Sache.

Verfasst: Samstag 6. Juni 2009, 20:03
von DasIch
In welchem "keyring"? Du meinst den standardisierten betriebssystemunabhängigen und nicht existenten keyring?

Verfasst: Samstag 6. Juni 2009, 20:16
von Leonidas
Na in dem GNOME-Keyring, welche Frage. Als ob man irgendetwas anderes nutzen könnte ;)

Verfasst: Samstag 6. Juni 2009, 20:18
von DasIch
Also ich würde von dem KDE Ding ausgehen.

Verfasst: Samstag 6. Juni 2009, 20:19
von cofi
Pah der ist doch nichts gegen Kwallet :P
Als Windows-User hat man natürlich wie immer schlechte Karten ;)

Verfasst: Samstag 6. Juni 2009, 21:03
von 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 ;)

Verfasst: Samstag 6. Juni 2009, 21:47
von ichbinsisyphos
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.

Verfasst: Samstag 6. Juni 2009, 21:54
von Leonidas
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.

Verfasst: Samstag 6. Juni 2009, 21:58
von ichbinsisyphos
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.

Verfasst: Sonntag 7. Juni 2009, 09:16
von birkenfeld
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.

Verfasst: Sonntag 7. Juni 2009, 09:55
von Leonidas
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.

Verfasst: Sonntag 7. Juni 2009, 11:30
von ichbinsisyphos
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.