[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Frage zu LDAP


Hi,

Am Dienstag, 17. April 2007 19:41 schrieb Sebastian Laubscher:
> On 17.04.2007 17:58 Uhr, "Markus Hochholdinger" <Markus@xxxxxxxxxxxxxxxxx>
> wrote:
> > Wenn Interesse besteht kann ich auch mal eine (Beispiel-)Konfiguration
> > (slpad.conf und ldif) wie ich sie normalerweise umsetze hier posten.
> Wuerde mich sehr interessieren. Danke.

hier kommts (slpad.conf und tree.ldif). Zu beachten ist, dass ich ACLs in der 
slapd.conf setzen wobei LDAP-Gruppen verwendet werden.
Dadurch kann ich durch einfache Gruppenzuweisungen praktisch Rechte vergeben.
Diese LDAP-Gruppen sind aber leider nicht mit den normalen (Unix) Gruppen 
kompatibel.
Ich denke vorallem in die ACLs rentiert es sich ein bischen Zeit zu 
investieren.
In der slapd.conf habe ich auch noch zwei LDAP-Slaves (ueber replica) 
definiert.
Ausserdem lasse ich uebers Netz nur TLS zu, aber der Server selbst darf 
unverschluesselt. Das ist dann praktisch wenn man eine lokale Applikation hat 
die weder ssl noch tls unterstuetzt.
Und anonymen Zugriff habe ich auch soweit moeglich eingeschraenkt und dafuer 
einen search-Benutzer angelegt. Bei den meisten LDAP-Anwendungen fuer die 
Authentifizierung kann man dann so einen search-Benutzer angeben, damit die 
Anwendung auch nach Benutzern suchen kann.
Achja, die index-Zeilen sind auch sehr wichtig um die Geschwindigkeit beim 
Suchen zu erhoehen.

Noch etwas, wie ich Benutzer/Gruppen anlege. In meinem Beispiel hat der 
Benutzer mh auch eine Gruppe mh, welche ich unterhalb des Benutzers anlege.
Genau umgekehrt fuer die Gruppe mhcodi, welche einen Benutzer unterhalb hat.
(Ich habe immer gerne ein Benutzer/Gruppen-Paar mit derselben ID. Man weiss nie 
wofuer man das spaeter benoetigt.)
Ich finde dadurch steigt die Uebersichtlichkeit wenn man mit einem LDAP-Browser 
die Eintraege in der Baumstruktur anschaut.


> Ansonsten stimm ich Deinen Erfahrungen durchweg zu - Verzweigungen sind
> toll, werden aber auf Dauer unuebersichtlich - sofern man sie nicht
> dringend braucht.

Genau. Und eigentlich gibt es ja keinen Grund eine bestimmte Struktur im LDAP 
zu verwenden. Einzig praktisch ist die Baumstruktur wenn man rechte vergibt. 
Wobei man die Rechte natuerlich auch auf Attribute vergeben kann, wird aber 
sehr schnell unuebersichtlich.

Gibt es hier eigentlich sonst noch Leute die Erfahrung mit LDAP gemacht haben?


-- 
Gruss
                                                          \|/
       eMHa                                              (o o)
------------------------------------------------------oOO--U--OOo--
 Markus Hochholdinger
 e-mail  mailto:Markus@xxxxxxxxxxxxxxxxx             .oooO
 www     http://www.hochholdinger.net                (   )   Oooo.
------------------------------------------------------\ (----(   )-
                                                       \_)    ) /
                                                             (_/

dn: dc=mhcodi,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: MHCoDi
dc: mhcodi

dn: ou=people,dc=mhcodi,dc=com
ou: people
objectClass: organizationalUnit
objectClass: top

dn: ou=groups,dc=mhcodi,dc=com
ou: groups
objectClass: organizationalUnit
objectClass: top

dn: ou=machines,dc=mhcodi,dc=com
ou: machines
objectClass: organizationalUnit
objectClass: top

dn: ou=contacts,dc=mhcodi,dc=com
ou: contacts
objectClass: organizationalUnit
objectClass: top

dn: ou=roaming,dc=mhcodi,dc=com
ou: roaming
objectClass: organizationalUnit
objectClass: top

dn: ou=system,dc=mhcodi,dc=com
ou: system
objectClass: organizationalUnit
objectClass: top

dn: cn=ldap-admin,ou=system,dc=mhcodi,dc=com
cn: ldap-admin
objectClass: groupOfNames
objectClass: top
member: uid=root,ou=system,dc=mhcodi,dc=com
member: uid=mh,ou=people,dc=mhcodi,dc=com

dn: uid=search,ou=system,dc=mhcodi,dc=com
uid: search
objectClass: account
objectClass: simpleSecurityObject
objectClass: top

dn: uid=replica,ou=system,dc=mhcodi,dc=com
uid: replica
objectClass: account
objectClass: simpleSecurityObject
objectClass: top

dn: cn=ldap-contacts-read,ou=system,dc=mhcodi,dc=com
cn: ldap-contacts-read
member: uid=root,ou=system,dc=mhcodi,dc=com
objectClass: groupOfNames
objectClass: top

dn: cn=ldap-contacts-write,ou=system,dc=mhcodi,dc=com
cn: ldap-contacts-write
member: uid=root,ou=system,dc=mhcodi,dc=com
objectClass: groupOfNames
objectClass: top

dn: uid=root,ou=system,dc=mhcodi,dc=com
gidNumber: 0
homeDirectory: /root
sn: God
uid: root
uidNumber: 0
objectClass: inetOrgPerson
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
objectClass: top
loginShell: /bin/bash
shadowMin: -1
shadowMax: 999999
shadowWarning: 7
shadowInactive: -1
shadowExpire: -1
shadowFlag: 0
givenName: Master
cn: Master God
shadowLastChange: 13500

dn: uid=mh,ou=people,dc=mhcodi,dc=com
objectClass: top
objectClass: person
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: mh
loginShell: /bin/bash
homeDirectory: /home/mh
cn: Markus Hochholdinger
givenName: Markus
sn: Hochholdinger
uidNumber: 2000
gidNumber: 2000
shadowMin: -1
shadowMax: 999999
shadowWarning: 7
shadowInactive: -1
shadowExpire: -1
shadowFlag: 0

dn: cn=mh,uid=mh,ou=people,dc=mhcodi,dc=com
objectClass: top
objectClass: posixGroup
cn: mh
gidNumber: 2000
description:: R3J1cHBlIGbDvHIgQmVudXR6ZXIgbWg=
memberUid: mh

dn: cn=mhcodi,ou=groups,dc=mhcodi,dc=com
objectClass: top
objectClass: posixGroup
cn: mhcodi
gidNumber: 10000
description: Gruppe mhcodi
memberUid: mhcodi
memberUid: mh

dn: uid=mhcodi,cn=mhcodi,ou=groups,dc=mhcodi,dc=com
objectClass: top
objectClass: person
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: mhcodi
cn:: QmVudXR6ZXIgZsO8ciBHcnVwcGUgbWhjb2RpCg==
givenName:: QmVudXR6ZXIgZsO8ciBHcnVwcGU=
sn: mhcodi
loginShell: /bin/false
homeDirectory: /nonexistent
uidNumber: 10000
gidNumber: 10000
userPassword:: e0NSWVBUfSo=
shadowMin: -1
shadowMax: 999999
shadowWarning: 7
shadowInactive: -1
shadowExpire: -1
shadowFlag: 0

# This is the main slapd configuration file. See slapd.conf(5) for more
# info on the configuration options.

#######################################################################
# Global Directives:

# Features to permit
#allow bind_v2

# Schema and objectClass definitions
include         /etc/ldap/schema/core.schema
include         /etc/ldap/schema/cosine.schema
include         /etc/ldap/schema/nis.schema
include         /etc/ldap/schema/inetorgperson.schema
include		/etc/ldap/schema/evolutionperson.schema
include		/etc/ldap/schema/samba.schema

# Where the pid file is put. The init.d script
# will not stop the server if you change this.
pidfile         /var/run/slapd/slapd.pid

# List of arguments that were passed to the server
argsfile        /var/run/slapd/slapd.args

# Read slapd.conf(5) for possible values
loglevel        0

# Where the dynamically loaded modules are stored
modulepath	/usr/lib/ldap
moduleload	back_bdb

# The maximum number of entries that is returned for a search operation
sizelimit 500

# The tool-threads parameter sets the actual amount of cpu's that is used
# for indexing.
tool-threads 1

# TLS
TLSCertificateFile	/etc/ldap/ssl/cert.pem
TLSCertificateKeyFile	/etc/ldap/ssl/key.pem
TLSCACertificateFile	/etc/ssl/certs/cacert.pem

password-hash			{CRYPT}
password-crypt-salt-format	"$1$%s"

#######################################################################
# Specific Backend Directives for bdb:
# Backend specific directives apply to this backend until another
# 'backend' directive occurs
backend		bdb
checkpoint 512 30

#######################################################################
# Specific Backend Directives for 'other':
# Backend specific directives apply to this backend until another
# 'backend' directive occurs
#backend		<other>

#######################################################################
# Specific Directives for database #1, of type bdb:
# Database specific directives apply to this databasse until another
# 'database' directive occurs
database        bdb

# The base of your directory in database #1
suffix          "dc=mhcodi,dc=com"

# rootdn directive for specifying a superuser on the database. This is needed
# for syncrepl.
# rootdn          "cn=admin,dc=mhcodi,dc=com"

# Where the database file are physically stored for database #1
directory       "/var/lib/ldap"

# For the Debian package we use 2MB as default but be sure to update this
# value if you have plenty of RAM
dbconfig set_cachesize 0 134217728 0

# Sven Hartge reported that he had to set this value incredibly high
# to get slapd running at all. See http://bugs.debian.org/303057
# for more information.

# Number of objects that can be locked at the same time.
dbconfig set_lk_max_objects 1500
# Number of locks (both requested and granted)
dbconfig set_lk_max_locks 1500
# Number of lockers
dbconfig set_lk_max_lockers 1500

# Indexing options for database #1
index	objectClass		eq
## Index attributes which values should be unique.
index	uid,uidNumber,gidNumber	pres,eq
## Index normal attributes.
index	ou,cn,givenName,sn	pres,eq,approx,sub
index	description,mail	pres,eq,approx,sub

# Save the time that the entry gets modified, for database #1
lastmod         on

# Where to store the replica logs for database #1
replogfile	/var/lib/ldap/replog

replica uri=ldap://10.1.2.3:389
	starttls=yes
	binddn="uid=replica,ou=system,dc=mhcodi,dc=com"
	bindmethod=simple credentials=myverysecurepassword

replica uri=ldap://10.1.2.4:389
	starttls=yes
	binddn="uid=replica,ou=system,dc=mhcodi,dc=com"
	bindmethod=simple credentials=myverysecurepassword

########################################
# Access Control begin
#

# Only allow unencrypted connections from myself or encrypted connections
# from everywhere, but nothing else.
access to *
	by peername.ip=127.0.0.1 none break
	by peername.ip=10.1.2.1 none break
	by ssf=128 * none break
	by * none

# Members of the group ldap-admin (groupOfNames) have full write access,
# everyone else is covered by access rules below.
access to *
	by group="cn=ldap-admin,ou=system,dc=mhcodi,dc=com" write
	by * none break

# The userPassword by default can be changed
# by the entry owning it if they are authenticated.
# Others should not be able to see it, except the members
# of the group ldap-admin (groupOfNames).
access to attrs=userPassword
	by anonymous auth
	by self write
	by * none

# Ensure read access to the base for things like
# supportedSASLMechanisms.  Without this you may
# have problems with SASL not knowing what
# mechanisms are available and the like.
# Note that this is covered by the 'access to *'
# ACL below too but if you change that as people
# are wont to do you'll still need this if you
# want SASL (and possible other things) to work 
# happily.
access to dn.base=""
	by * read

# Ensure read access to the schema and objectClass definitions.
access to dn.exact="cn=Subschema"
	by users read
	by * none

# Everyone has read access to our base.
access to dn.base="dc=mhcodi,dc=com"
	by * read

# Access rules for the global contacts.
access to dn.subtree="ou=contacts,dc=mhcodi,dc=com"
	by group="cn=ldap-contacts-write,ou=system,dc=mhcodi,dc=com" write
	by group="cn=ldap-contacts-read,ou=system,dc=mhcodi,dc=com" read
	by * none

# Access rules for private roaming. All authenticated users can see roaming.
access to dn.base="ou=roaming,dc=mhcodi,dc=com"
	by users read
	by * none
# Users in ou=people can see their own roaming entry.
access to dn.regex="^ou=([^,]+),ou=roaming,dc=mhcodi,dc=com$"
	by dn.exact,expand="uid=$1,ou=people,dc=mhcodi,dc=com" read
	by * none
# Users in ou=people can write entries below their own roaming entry.
access to dn.regex="^.*,ou=([^,]+),ou=roaming,dc=mhcodi,dc=com$"
	by dn.exact,expand="uid=$1,ou=people,dc=mhcodi,dc=com" write
	by * none

# Access rules for the search user. The search user is only allowed to read
# the entry name, cn, uid, uidNumber, gidNumber, memberUid, homeDirectory,
# loginShell, shadowExpire, shadowFlag, shadowInactive, shadowMax, shadowMin,
# shadowWarning.
access to * attrs=entry,cn,uid,uidNumber,gidNumber,memberUid,homeDirectory,loginShell,shadowExpire,shadowFlag,shadowInactive,shadowMax,shadowMin,shadowWarning
	by dn="uid=search,ou=system,dc=mhcodi,dc=com" read
	by * none break
# The search user is allowed to search all.
access to *
	by dn="uid=search,ou=system,dc=mhcodi,dc=com" search
	by * none break

#
# Access Control end
########################################

#######################################################################
# Specific Directives for database #2, of type 'other' (can be bdb too):
# Database specific directives apply to this databasse until another
# 'database' directive occurs
#database        <other>

# The base of your directory for database #2
#suffix		"dc=debian,dc=org"




-- 
http://mailman.uugrn.org/mailman/listinfo/uugrn