Linux/Unix Benutzer Authentifizieren

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.
Benutzeravatar
mauser
User
Beiträge: 12
Registriert: Donnerstag 19. August 2004, 19:28

Linux/Unix Benutzer Authentifizieren

Beitragvon mauser » Dienstag 2. August 2005, 13:56

hi,

ich würde gerne meine user authentifizieren, also ihr passwort anhand der /etc/passwd überprüfen. nun habe ich aber shadow passwörter, desshalb kann ich das pwd modul nicht nutzen. kennt jemand eine möglichkeit, wie das trotzdem geschehen könnte ?
mfg
mauser
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Linux/Unix Benutzer Authentifizieren

Beitragvon gerold » Dienstag 2. August 2005, 14:37

mauser hat geschrieben:ich würde gerne meine user authentifizieren

Hi mauser!

Unter Linux läuft so etwas normalerweise über PAM.

Das PyPAM-Projekt ist zwar schon etwas in die Jahre gekommen, vielleicht helfen folgende Links trotzdem weiter.

http://www.pangalactic.org/PyPAM/
http://www.kernel.org/pub/linux/libs/pam/
http://mail.python.org/pipermail/python ... 00187.html

Python-PAM (leider findet man nicht viel Informationen darüber):
http://packages.debian.org/testing/python/python-pam
http://lists.debian.org/debian-devel-m6 ... 00071.html

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Dienstag 2. August 2005, 14:50

http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Gast

Beitragvon Gast » Dienstag 2. August 2005, 15:46

hi gerold,

danke schonmal für deine antworten. ich hatte auch schon an pam gedacht, aber ich hatte eben erhofft das es noch eine einfachere möglichkeit gibt die ich übersehen hatte. normalerweise wird sich das programm an einen ldap-server wenden, aber ich wollte als alternative noch die passwd sache anbieten, falls jemand nicht python-ldap installiert hat.
und genau das ist halt auch der grund, warum ich eigentlich nicht noch eine externe library nutzen will..
aber ich werds mir mal überlegen, schliesslich gibts ja auch ein debian packet dazu was die installation dann sehr einfach macht.
mfg
mauser
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Dienstag 2. August 2005, 17:01

Anonymous hat geschrieben: ich hatte auch schon an pam gedacht, aber ich hatte eben erhofft das es noch eine einfachere möglichkeit gibt die ich übersehen hatte.

Hi mauser!

Es gibt da schon noch eine Möglichkeit, die untergräbt aber den Sinn und Zweck der shadow-Datei. Du kannst einer Gruppe lesenden Zugriff auf die shadow-Datei geben und damit wie in diesem Dokument http://www.python.org/doc/2.4.1/lib/module-crypt.html erklärt, eine Authentifizierung durchführen. Statt das verschlüsselte Passwort aus der passwd zu holen, musst du es halt aus der shadow-Datei holen. Das dürfte nicht wirklich schwierig sein.

Nachteil:
Sobald ein Benutzer lesenden Zugriff auf die shadow-Datei hat, ist es für diesen angemeldeten Benutzer möglich Brute-Force Attacken auf die Shadow-Datei los zu lassen.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 2. August 2005, 19:40

Gerold, du meisnt ein vom User eingegebenes Passwort du verschlüsseln mit crypt und es dann mit dem in der shadow zu vergleichen? Ich glaube zumindest Debian hat eine Option mit der die Passwörter als MD5 Hashes gespeichert werden (ab Sarge Standard soweit ich weiß), also hat man wieder eine Fallunterscheidung.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Dienstag 2. August 2005, 21:09

Leonidas hat geschrieben: Ich glaube zumindest Debian hat eine Option mit der die Passwörter als MD5 Hashes gespeichert werden (ab Sarge Standard soweit ich weiß), also hat man wieder eine Fallunterscheidung.

Hi Leonidas!

An das hätte ich doch fast nicht mehr gedacht. Das mit den verschiedenen Verschlüsselungsmethoden wirkt sich sehr erschwerend auf die Sache aus. Ich hatte bei einigen Distributionen zusätzlich die Möglichkeit Blowfish auszuwählen. :(

Vielleicht fällt noch jemandem eine einfachere Möglichkeit ein, aber bis jetzt glaube ich, dass die Verwendung von python-pam die Einfachste Variante ist. Das (Debian) Beispiel unter /usr/share/doc/python2.3-pam/examples scheint recht einfach zu funktionieren. Leider kann ich python-pam nur für Debian finden. Was mich gerade verwundert ist -- dass ich kein Gentoo-Ebuild für python-pam finde, wo es doch sonst immer für alles ein Ebuild gibt.

lg
Gerold
:-)
Zuletzt geändert von gerold am Mittwoch 3. August 2005, 07:46, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 2. August 2005, 21:37

gerold hat geschrieben:An das hätte ich doch fast nicht mehr gedacht. Das mit den verschiedenen Verschlüsselungsmethoden wirkt sich sehr erschwerend auf die Sache aus. Ich hatte bei einigen Distributionen zusätzlich die Möglichkeit Bluefish auszuwählen. :(

Bluefish? Oder meinst du eher Blowfish bzw. Twofish? Das scheint mir aber nicht so das wahre zu sein, denn es ist sicherer ein Passwort zu hashen statt es zu verschlüsseln, da dann das Passwort bekannt sein müsste und somit die Passwörter auch entschlüsselbar sind. Dagegen sollte man gehashte Passworter auch mit den Modulen md5 für MD5 oder sha für SHA1 in Python herstellen können. Von dem her ist es vermutlich etwas fuselarbeit, aber durchaus machbar.

gerold hat geschrieben:Vielleicht fällt noch jemandem eine einfachere Möglichkeit ein, aber bis jetzt glaube ich, dass die Verwendung von python-pam die Einfachste Variante ist. Das (Debian) Beispiel unter /usr/share/doc/python2.3-pam/examples scheint recht einfach zu funktionieren. Leider kann ich python-pam nur für Debian finden. Was mich gerade verwundert ist -- dass ich kein Gentoo-Ebuild für python-pam finde, wo es doch sonst immer für alles ein Ebuild gibt.

Ich habe das gefühl, dass es keinen Upstream von python-pam mehr gibt, die aktuellste Version gibts bei den Debian Sourcen.

Die Homepage von Robin Riggs, dem Author existiert jedoch noch.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Mittwoch 3. August 2005, 07:55

Leonidas hat geschrieben: Bluefish? Oder meinst du eher Blowfish

Hi Leonidas!

Blowfish oder Bluefish -- da gibt es doch *fast* keinen Unterschied :wink: :D

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 3. August 2005, 11:46

Na auch für Blowfish Passwörter gibt es eine Lösung: Pycrypto oder wenn man lieber puren Python Code hat und die Geschwindigkeit nicht so ausschlaggebend ist Concordias Blowfish oder OCNs Blowfish. Jedoch habe ich keine Ahnung mit welchem Passwort man die Passwörter denn verschlüsseln sollte, das Passwort entfällt ja bei MD5.

Dieses Blowfish-Shadow Teil kommt hierher und eine Kompatible Methode wurde wie ich gelesen habe auch in OpenBSD verwendet. Es gibt auch eine Einleitung wie man LFS mit Blowfish verkuppelt.. da sollten sich schon informationen finden lassen, wei man solche Passworter gegen die /etc/shadow verifizieren kann.

Edit: Das Teil nennt sich in OpenBSD bcrypt und scheint recht komplex zu sein.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

Beitragvon ProgChild » Mittwoch 3. August 2005, 12:00

Das muss doch auch irgendwie leichter gehen. Ich weis nur, dass der vsftpd einmal eine Authenzifizierung mit PAM und eine ohne macht. Falls jemand mal die Zeit hat sich den Source Code vorzunehmen...
Gast

Beitragvon Gast » Mittwoch 3. August 2005, 20:27

ich habe gerade mal "su" näher unter die lupe genommen, um zu sehen wie das tool intern arbeitet. ein schneller versuch mit strace zeigt, das dort auch versucht wird auf die shadow datei zuzugreifen. am anfang werden auch viele crypto libs geladen. danach wird versucht, /etc/shadow zu öffnen, was aber fehlschlägt. dann wird anscheinend pam zur finalen anwendung herangezogen. also: an pam führt wohl nix vorbei. mich irritiert nur, das die python-pam bindings so schlecht verbreitet sind.
mfg
mauser
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Mittwoch 3. August 2005, 21:11

Leonidas hat geschrieben:Concordias Blowfish oder OCNs Blowfish

Spontan gefällt mir Concordias Blowfish besser. Der Quellencode sieht wesendlich aufgeräumter auf...
Jemand eine Ahnung wieviel langsamer die sind???

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 3. August 2005, 21:59

jens hat geschrieben:Jemand eine Ahnung wieviel langsamer die sind???

Ich habe grad nichtmal eine Ahnung wie man die genau nutzen kann um überhaupt etwas Benchmarkmäßiges aufzustellen :idea:
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 4. August 2005, 06:27

Hä??? Bei Concordias Blowfish ist doch unten direkt ein Beispiel:

Code: Alles auswählen

if __name__ == '__main__':
   key = 'This is a test key'
   cipher = Blowfish (key)

   print "Testing encryption:"
   xl = 123456
   xr = 654321
   print "\tPlain text: (%s, %s)" %(xl, xr)
   cl, cr = cipher.cipher (xl, xr, cipher.ENCRYPT)
   print "\tCrypted is: (%s, %s)" %(cl, cr)
   dl, dr = cipher.cipher (cl, cr, cipher.DECRYPT)
   print "\tUnencrypted is: (%s, %s)" %(dl, dr)

   print "Testing buffer encrypt:"
   text = 'testtest'
   print "\tText: %s" %text
   crypted = cipher.encrypt (text)
   print "\tEncrypted: %s" %crypted
   decrypted = cipher.decrypt (crypted)
   print "\tDecrypted: %s" %decrypted

Ausgabe:

Code: Alles auswählen

Testing encryption:
   Plain text: (123456, 654321)
   Crypted is: (1009721363, 1921430063)
   Unencrypted is: (123456, 654321)
Testing buffer encrypt:
   Text: testtest
   Encrypted: ý»(–Ž»
   Decrypted: testtest

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd

Wer ist online?

Mitglieder in diesem Forum: Majestic-12 [Bot]