SSH und LDAP Group

lockdoc

Well-Known Member
Hi,

ich versuche grade vergeblich eine SSH Authentifizierung via LDAP anhand einer Gruppe.

Das scheitert wie folgt:
Code:
user> ssh patu@nas
Password:
You must be a member of cn=ssh-nas,ou=Groups,dc=example,dc=lan to login.

Permission denied (publickey,keyboard-interactive).

Ansonsten bin ich auch in der Gruppe:
Code:
root> id patu
uid=10000(patu) gid=513(Domain Users) groups=513(Domain Users),...,10018(ssh-nas)


Und die Gruppe existiert auf jeden Fall im LDAP
Code:
ldapsearch -x -W -D 'cn=Manager,dc=example,dc=lan' -h ldap.example.lan "cn=ssh-nas"
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <dc=example,dc=lan> (default) with scope subtree
# filter: cn=ssh-nas
# requesting: ALL
#

# ssh-nas, Groups, example.lan
dn: cn=ssh-nas,ou=Groups,dc=example,dc=lan
objectClass: top
objectClass: posixGroup
cn: ssh-nas
gidNumber: 10018
memberUid: patu

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

Der Eintrag der ldap.conf sieht wie folgt aus:
Code:
# @(#)$Id: ldap.conf,v 2.49 2009/04/25 01:53:15 lukeh Exp $
#
host    ldap.example.lan
base    dc=example,dc=lan
uri     ldap://ldap.example.lan/

bind_policy soft
bind_timelimit 10

idle_timelimit 3600
ldap_version 3

nss_base_group  ou=Groups,dc=example,dc=lan?one
nss_base_passwd ou=People,dc=example,dc=lan?one
#nss_base_passwd ou=Computers,dc=example,dc=lan?one
nss_base_shadow ou=People,dc=example,dc=lan?one

nss_connect_policy persist
nss_paged_results yes

pagesize 1000
port 389
scope one
timelimit 30

pam_groupdn cn=ssh-nas,ou=Groups,dc=example,dc=lan
pam_member_attribute member

Wenn ich diese beiden Zeilen auskommentiere (pam_groupdn und pam_member_attribute), dann kann ich mich via ssh einloggen. Ich will aber nicht, dass sich jeder user dort einloggen kann, sondern will das schon auf eine bestimmte Gruppe beschraenken.

Hat da noch jemand einen Tipp uebrig?
 
Last edited:
pam_group kennt er nicht. Es ist schon pam_groupdn und UsePAM ist ja enabled by default in der sshd_config.

Eigentlich ist ja auch alles hier beschrieben:
http://www.freebsd.org/doc/en/articles/ldap-auth/article.html#client

Auf der anderen Seite ist es mega verwirrend, dass es sozusagen 3 Ldap Konfigurationsdateien fuer den Client gibt. X__x.
Code:
1.) /usr/local/etc/openldap/ldap.conf
2.) /usr/local/etc/ldap.conf
3.) /usr/local/etc/nss_ldap.conf

So wie ich das verstanden habe ist die erste fuer den ldap client (Was auch immer das sein mag).
Die zweite ist fuer die PAM Geschichten und die dritte ist fuer den name service switch um Datei/Folder Angehorigkeiten und uid/gid in echte Namen aufzuloesen.

Also von/fuer folgende Programme
Code:
net/openldap24-client:	/usr/local/etc/openldap/ldap.conf
security/pam_ldap:	/usr/local/etc/ldap.conf
net/nss_ldap: 		/usr/local/etc/nss_ldap.conf

Derzeit laeuft beispielsweise auch die Apache Authentifizierung ueber Ldap Gruppen problemlos, die einzigen beiden Dienste, die mit LDAP und Gruppen rummucken sind MediaWiki und SSH.
Beide funktionieren allerdings problemlos, wenn man die Gruppen rausnimmt.

Ist hier eigtl. Jemand, der sein SSH Zugang ueber LDAP in Kombination mit Gruppen macht?
 
So, ich hab jetzt erstmal eine andere Loesung zu dem Gruppen Problem.

Code:
pam_groupdn cn=ssh-nas,ou=Groups,dc=example,dc=lan
pam_member_attribute member

War ohnehin falsch, da es wenigstens so haette sein sollen
Code:
pam_groupdn cn=ssh-nas,ou=Groups,dc=example,dc=lan
pam_member_attribute [B]memberUid[/B]

Trotzdem funktioniert es dann auch nicht. Die Problematik konnte ich hier finden: http://www.freebsd.org/doc/en/articles/ldap-auth/article.html#client

Allerdings erst nach dem 10. mal lesen.

Members of this group are specified in one or more memberUid attributes, and each attribute must have the full distinguished name of the member. So memberUid: someuser will not work; it must be:
Code:
memberUid: uid=someuser,ou=people,dc=example,dc=org

Als Beispiel. Wenn ich eine Neue Gruppe im Ldap anlege und sie mir zuweise, dann sieht das ungefaehr so aus
Code:
cn: ssh-smb
...
memberUid: patu
...

Was aber pam_groupdn brauchen wuerde, damit es die Gruppe erkennt waere folgendes;
Code:
cn: ssh-smb
...
memberUid: uid=patu,ou=people,dc=example,dc=lan
...

Damit bricht aber die Gruppenzugehoerigkeit fuer alle anderen Sachen. Beispielsweise
Code:
 patu> groups
wird sagen, dass ich nicht mehr in der Gruppe bin.


Der Workaround waere die Gruppenzugehoerigkeit direkt in der sshd_config anzugeben
Code:
...
AllowGroups ssh-smb
...

Das ist zwar nicht ganz so elegant, aber es funktioniert.
Folgende Ports werden benoetigt:
Code:
net/openldap24-client (/usr/local/etc/openldap.conf)
security/pam_ldap (/usr/local/etc/ldap.conf - for ssh to work)
net/nss_ldap (/usr/local/etc/nss_ldap.conf - resolves folder u/g ids to names)

Anbei mal meine anderen Konfigurationsdateien:

/usr/local/etc/ldap.conf && /usr/local/etc/openldap/ldap.conf && /usr/local/etc/nss_ldap.conf
Code:
BASE        dc=example,dc=lan
URI         ldap://ldap.example.lan/

/etc/nsswitch.conf
Code:
group: files ldap
#group_compat: nis
hosts: files dns
networks: files
passwd: files ldap
#passwd_compat: nis
shells: files
services: compat
services_compat: nis
protocols: files
rpc: files

/etc/pam.d/sshd
Code:
# auth
auth        sufficient  pam_opie.so     no_warn no_fake_prompts
auth        requisite   pam_opieaccess.so   no_warn allow_local
#auth       sufficient  pam_krb5.so     no_warn try_first_pass
#auth       sufficient  pam_ssh.so      no_warn try_first_pass
auth        required    pam_ldap.so
#auth       required    pam_unix.so     no_warn try_first_pass

# account
account     required    pam_nologin.so
#account    required    pam_krb5.so
account     required    pam_login_access.so
account     required    pam_ldap.so
#account        required    pam_unix.so

# session
#session    optional    pam_ssh.so      want_agent
session     sufficient  pam_ldap.so
session     required    pam_permit.so

# password
#password   sufficient  pam_krb5.so     no_warn try_first_pass
password    required    pam_ldap.so
#password   required    pam_unix.so     no_warn try_first_pass
 
Das Problem ist um die Konvertierung von bestehenden Setups einfacher zu machen und manche Queries zu beschleunigen verwendet nss_ldap by default nur die uid nicht den ganzen DN um Objekte Gruppen zuzuordnen. Dies hat sich im *nix Umfeld verbreitet. Die OpenLDAP Entwickler unterstützen aber viele hilfreiche Funktionen nur auf Gruppen aus DNs. nss_ldap hat gelernt auch mit Gruppen aus DNs umzugehen. Diverse andere Software kann dies nicht.
 
Back
Top