PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Authentifizierung über PAM -> LDAP über Gruppen?



DinDaDa
17.05.08, 10:17
Ich habe bei mir LDAP eingerichtet. Das Funktioniert auch schon ganz gut. Nun möchte ich gerne, den Zugriff auf bestimmte Programme durch die Gruppenzugehörigkeit bestimmen. Dabei ist mir PAM aufgefallen, da viele Programme die PAM Authentifizierung unterstützen.

Also mal ein Beispiel:

Ich habe Usermin installiert. Die Authentifizierung geht über PAM. In PAM wird auch LDAP benutzt. Soweit habe ich das verstanden.

Nun möchte ich unter LDAP eine Gruppe „Usermin“ einrichten. Und nur Benutzer dieser Gruppe sollen sich bei Usermin anmelden dürfen.

Das ist jetzt nur ein Beispiel, es lässt sich auch auf pop, smtp oder ftp übertragen.

So würde ich gerne wissen ob das geht, und natürlich wie.

Vielen Dank & Mit freundlichen Grüßen

DinDaDa

Thorashh
17.05.08, 23:05
"man pam_ldap" und nach "pam_groupdn" suchen.

DinDaDa
19.05.08, 16:46
Hallo ...

... danke für die Antwort. Ja "man pam_ldap" hab ich mir angeschaut, aber sehr hilfreich finde ich es leider nicht.

Habe folgende Seite gefunden:

pam_ldap authentication based on pam_groupdn (http://www.redhat.com/archives/pam-list/2004-October/msg00039.html)

Das sieht nach dem aus was ich suche. Wenn ich das nun richtig verstehe, gebe ich mit:


auth sufficient pam_ldap.so config=SpezieleLDAP.Conf
eine eigene Konfiguration für die LDAP Authentifizierung an, und in der kann ich dann mit:


pam_groupdn cn=Usermin,ou=groups,dc=XXX,dc=DE
die Gruppe einschränken.

Hab ich das so richtig verstanden?

Mfg DinDaDa

PS.: vielleicht sollte ich es einfach nachher mal ausprobieren

DinDaDa
22.05.08, 13:05
... nun hab ich es genauso ausprobiert.

Hab hier noch mal ein gutes Beispiel gefunden:

Using OS X Open Directory to authenticate Squid Proxy Server (http://www.afp548.com/article.php?story=20040903184124948)

Also meine /etc/openldap/ldap-usermin.conf :


# ldap-usermin.conf
TLS_REQCERT allow
base o=domain.home,c=DE
uri ldap://127.0.0.1/
host server.domain.home

pam_groupdn cn=Usermin,ou=group,o=domain.home,c=DE
pam_member_attribute memberUid

und meine /etc/pam.d/usermin :


#%PAM-1.0
auth required pam_ldap.so config=/etc/openldap/ldap-usermin.conf
auth include common-auth
account required pam_ldap.so config=/etc/openldap/ldap-usermin.conf
account include common-account
password include common-password
session include common-session

entsprechend angepasst. Aber ständig bekomme ich diese Meldung beim Versuch mich anzumelden:


You must be a memberUid of cn=Usermin,ou=group,o=domain.home,c=DE to login.

Weiß jemand nen Rat?

Mit freundlichen Grüßen

DinDaDa

Thorashh
22.05.08, 22:57
Die Lösung steht doch in der oben genannten Anleitung:
You will now need to either modify your own pam_ldap.so source code ... so that when performing group authorisation, it checks for userid and not the users full dn, ...

DinDaDa
22.05.08, 23:18
Öhhh ... F*** ! :eek:


You will now need to either modify your own pam_ldap.so source code ... so that when performing group authorisation, it checks for userid and not the users full dn, ...


Ich weiß schon warum ich das überlesen habe. Nennt sich wohl selektive Wahrnehmung. :p

OK. Grübel ich mal. Ich lade das runter, dann ist da evt. so’n makefile drin das führe ich aus? Und dann? Ist das dann 32 oder ne 64 bit Version? :confused:

Ne ... die Woche hat noch andere Tage. Wird’s mir aber mal anschauen.

Mit freundlichen Grüßen

DinDaDa

Thorashh
23.05.08, 02:20
Du könntest natürlich auch einfach den full-dn verwenden.

memberUid: cn=User,ou=users,o=domain.home,c=DE Nicht ganz so elegant, aber dafür funktioniert es auch nach dem nächsten Update noch.

DinDaDa
26.05.08, 15:01
memberUid: cn=User,ou=users,o=domain.home,c=DE
Äh, tut mir leid aber das verstehe ich nun überhaupt nicht.

OK bei mir sind es „ou=People“ aber was mach ich aus „cn=User“? Ich möchte doch nach Gruppen und nicht nach Usern filtern.

Habs auch in der einen und anderen Form ausprobiert. Hat aber gar nicht gebracht.

Dann hab ich an pam_filter gedacht und mit ldapsearch versucht einen Filter so zu erstellen, dass ich nur die Benutzer einer Gruppe zurückbekomme. Aber leider auch ein Erfolg.

Werd wohl nicht drum rum kommen die pam_ldap selber zu erstellen. Sowenig wie mir das spass macht. Oder hat noch jemand eine Idee?

Mit freundlichen Grüßen

DinDaDa

DinDaDa
02.06.08, 00:30
OK habs gefunden. MAN! ***** ***** ** sch***

Ich benutze doch den LDAP Account Manager. Und der setzt unter dem memberUid nur die uid.

Der PAM_LDAP prüft aber den gesamten dn also in der Form „uid=User,ou=People,o=domain.home,c=DE“

Wenn ich unter das unter memberUid eintrage geht es, Auch mit der schon installierten pam_ldap.so .

Hmm was mach ich den nun, denn der Apache2 kommt bisher ganz gut klar mit nut der uid.

Und in LAM möchte ich auch nicht rumfummeln.

Jemand ne Idee?

Am besten erstmal drüber schlafen!

Mit freundlichen Grüßen

DinDaDa

DR.Chris
12.06.08, 00:50
Hi!
Nur mal ne dumme frage am Rande:

Was bringt das denn? Wenn ich will kann ich doch einfach auf nem anderen Client im kompletten LDAP suchen und nicht nur in der Gruppe. Und schon wird mir der Zugriff gewährt. Oder lieg ich da gerade falsch?

Gruß Chris

DinDaDa
15.06.08, 22:18
So ... hab ich mir mal das ding runter geladen:

pam_ldap von PADL Software Pty Ltd (]http://www.padl.com/download/pam_ldap.tgz)

und entsprechend geändert, dass man auch mit der User UID auf Gruppenzugehörigkeit prüfen kann. Kompiliert und mit geänderten Namen in das entsprechende Verzeichnis kopiert.


/*pam_ldap.h ca. Zeile: 347*/

/* DinDaDa 04.07.2008*/
/* check only uid for membership, optional for access authorization*/
int checkmemberuid;


/*pam_ldap.c ca. Zeile: 639*/
/* DinDaDa 04.07.2008*/
/* check only uid for membership, optional for access authorization*/
result->checkmemberuid = 0;


/*pam_ldap.c ca. Zeile: 1046*/
/* DinDaDa 04.07.2008*/
/* check only uid for membership, optional for access authorization*/
else if (!strcasecmp (k, "pam_member_uid"))
{
result->checkmemberuid = !strcasecmp (v, "yes");
}


/*pam_ldap.c ca. Zeile: 4094*/
/* group auth, per Chris's pam_ldap_auth module */
if (session->conf->groupdn != NULL)
{
/* DinDaDa 04.07.2008*/
/* check only uid for membership, optional for access authorization*/
if(session->conf->checkmemberuid)
{
rc = ldap_compare_s (session->ld,
session->conf->groupdn,
session->conf->groupattr, session->info->username);
}
else
{
rc = ldap_compare_s (session->ld,
session->conf->groupdn,
session->conf->groupattr, session->info->userdn);
}
if (rc != LDAP_COMPARE_TRUE)
{
snprintf (buf, sizeof buf, "You must be a %s of %s to login.",
session->conf->groupattr, session->conf->groupdn);
_conv_sendmsg (appconv, buf, PAM_ERROR_MSG, no_warn);
return PAM_PERM_DENIED;
}
else
rc = success;
}


OK, wie bekomm ich das nun in den offiziellen Entwicklerzweig?


Was bringt das denn? Wenn ich will kann ich doch einfach auf nem anderen Client im kompletten LDAP suchen und nicht nur in der Gruppe. Und schon wird mir der Zugriff gewährt. Oder lieg ich da gerade falsch?

Gruß Chris

Nein, es geht doch nicht ums suchen im LDAP, sondern um die Frage welcher Benutzer was machen darf. Mein Ziel ist es dies durch die Gruppenzugehörigkeit zu bestimmen.

Mal als Beispiel mit Appache2


<VirtualHost ...>

...

<Directory "/Verzeichnis">
AuthType Basic
AuthName "Log Dich ein Du Pappnase!"
AuthBasicProvider ldap
AuthzLDAPAuthoritative Off
AuthLDAPGroupAttributeIsDN Off
AuthLDAPURL "ldap://localhost:389/ou=People,o=domain.home,c=DE?uid?sub?(objectclass= *)"
AuthLDAPGroupAttribute memberUid
AllowOverride None
Order deny,allow
Deny from all
Allow from 192.168.178
Require ldap-group cn=WWWBenutzer,ou=group,o=domain.home,c=DE
Satisfy any
</Directory>
</VirtualHost>

Wenn Du auf die entsprechende Seite möchtest, musst du Dich anmelden (außer im lokalen Netzwerk). Und du bekommst nur zugriff, wenn Du in der Gruppe „WWWBenutzer“ bist.

Und so kann ich einfach die Rechte durch die Gruppenzugehörigkeit bestimmen.

Klar kann man auch .htaccess benutzen. Aber weiß ich in zwei Jahren noch wo ich überall wen angelegt habe?

Mit LDAP hab ich alles in einem Tool.

Und ich finde eine gute Sicherheit wird auch dadurch bestimmt, dass sie einfach, durch- und überschaubar ist.

Mit freundlichen Grüßen

DinDaDa