PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Modul PAM LDAP



saschaLin
10.08.05, 16:51
Hallo miteinander,

ich bin gerade dabei ein eigenes C-Programm zuschreiben um mich über PAM auf einen LDAP Server zu authentifizieren.

Dieses Programm soll mir PAM_SUCCESS zurückliefern wenn ich mich authentifizieren kann.

Ich habe mir mal die PAM-API angeschaut und bin jetzt so weit das mein Programm nachschaut ob der User im LDAP-Server enthalten ist --> pam_start(). Liefert mir auch PAM_SUCCESS zurück.
Ich finde jetzt nur nicht wie ich PAM jetzt mein eingegebenes Passwort übergebe zu diesem User und er mir dann auch zurück gibt ob dass das richtige Passwort ist.

Habe mir schon den Code von sudo oder ssh angeschaut, aber finde dort nicht wie die das machen.

Schon mal Danke für eure Hilfe im voraus.

Mfg Sascha

cane
10.08.05, 17:11
Es gibt doch fertige LDAP Module für PAM:
http://www.google.de/search?hl=de&q=pam+ldap&btnG=Google-Suche&meta=

Warum willst Du ein eigenes schreiben?

mfg
cane

saschaLin
10.08.05, 17:27
Also folgendes,

hab eine Applikation an der man sich authentifizieren muss um sie zubenutzen, diese liefet über eine Plugin, den eingegeben Username und das eingegebene Passwort, jetzt will ich auf meinem Ldap-Server nachschauen ob diese dort übereinstimmen.

Ich habe jetzt keine Ahnung, welchem Modul ich jetzt mein Username und Passwort übergebe das er es überprüft.

Deswegen eigenes.

Ungefähr wollte ich mich an folgendes Beispiel halten :

http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/pam_appl-8.html

--> da fehlt aber die Passwortüberprüfung.

mfg Sascha

emba
11.08.05, 08:28
ist die applikation "pam-aware"?

greez

saschaLin
11.08.05, 08:57
No, ne Datenbank.

saschaLin
11.08.05, 11:18
Also kurz:

ich will nur das Passwort über PAM an LDAP geben und es soll mir richtig oder falsch zurück geben.

Wäre echt klasse, wenn jemand weiß wie das geht

emba
11.08.05, 13:48
wenn deine applikation nicht pam-aware ist, kannst du dein pam-modul schreiben, wie du willst ;)

greez

saschaLin
11.08.05, 13:50
Okay, ich mach Fortschritte, jetzt wird das passwort abgefragt, wenn ich mein Programm ausführe.

Jetzt müsste ich nur wissen wann diese Abfrage gestellt wird, also wann gibt er den Prompt "Password:" aus und wann ließt er mein eingegebenes Passwort ein so das ich dort mein eigenes Passwort direkt hingebe.

Das ist ja nun komplett anders zu sudo bzw. ssh, weil dort gebe ich ja das passwort immer in die kommandozeile ein.

__________________________________________________ _____________________

Achso habe noch ein anderes Problem, er erkennt nicht bei pam_start(); meine service "check_user" bzw "sudo". Aber er kann trotzdem die authentifizierung über ldap vornehmen, gibt es in /etc/pam.d ein default service, welche bei nicht erkennen des Service aufgerufen wird.

Würde mich über jeden noch so kleinen Hinweis freuen.

MfG Sascha

saschaLin
11.08.05, 13:52
wenn deine applikation nicht pam-aware ist, kannst du dein pam-modul schreiben, wie du willst ;)


??? Ah okay ???

Das hilft mir gerade nicht weiter, wie würdest du es machen??

emba
11.08.05, 13:54
ist denn deine datenbank nun in der lage, mit pam zu sprechen, oder nicht? oben hast du nein geschrieben

wenn sie pam "kann", dann nimm pam_ldap.so

greez

saschaLin
11.08.05, 14:44
Also wie gesagt, die Datenbank liefert in mein C-Programm den eingegeben Username und Passwort (mit den er sich an der DB authentifizieren will).


Also wenn ich nur gegen PAM programmiere und es manuell starte in der Shell, dann sagt er ja den Benutzer gibt es und fragt mich nach meinem Passwort.

--> Dieses PW bekomme ich aus meiner DB, nur jetzt will ich das PW nicht nochmal in der Shell eingeben, sondern es soll von meiner DB direkt an PAM --> LDAP übergeben werden.

saschaLin
11.08.05, 14:46
Ach vllt habe ich den Titel des Topics falsch gewählt:

Streiche Modul. --> pam_ldap.so benutze ich eh als Modul.

emba
11.08.05, 15:47
ok, klingt gut dein projekt
leider bin ich nicht der coder, deshalb steige ich hier aus
wenn du es geschafft hast, kannst du dennoch mal die lösung und die eingesetzte software posten

ps: was ist das für eine DB, die nicht pam spricht?
gab es nicht auch eine art pam-wrapper?

greez

saschaLin
12.08.05, 11:10
GOIL, es funzt.

Also für die es interessiert.

In der Funktion pam_start(const char *service, const char *user,
const struct pam_conv *pam_conv, pam_handle_t **pamh);

sollte man pam_conv bearbeiten.
Dort solte man nicht mit Standartfunktion, pam_misc arbeiten. Man kann diese umschreiben so das sie das Passwort nicht aus der Shell einliest sondern ihr übergeben wird.

:cool: GOIL, wenn man sich die Fragen selbst beantworten kann :cool:

saschaLin
12.08.05, 11:28
Achso kann mir jemand hier helfen:

In der Funktion pam_start(const char *service, const char *user,
const struct pam_conv *pam_conv, pam_handle_t **pamh);

erkennt er trotz das ich mich über LDAP authentifiziere obwohl mein eigener service, nicht in /etc/pam.d enthalten ist. Gibt es einen Service den er als default-service benutzt. Aber eigentlich habe ich nur im service sshd

auth sufficient pam_ldap.so

eingestellt. Geht er dann alle Services durch und nimmt dann einen passenden oder was tut er.

Er gibt mir auch in /var/log/messages aus, das er den service nicht findet.

Danke im Voraus

BedriddenTech
12.08.05, 14:57
/etc/pam.d/other ist das `fallback', wenn es keine Datei für den Service gibt.