Ldap
De SergiTurWiki
| Curs: | SambasobreLDAP, LinuxAdministracioAvancada |
| Fitxers: | Ldap1.pdf, Ldap2.pdf, AutenticacioiAutoritzacionsLinux.pdf |
| Repositori SVN: | https://anonymous@svn.projectes.lafarga.cat/svn/iceupc/SambaSobreLDAP |
| Usuari: | anonymous |
| Paraula de pas: | sense paraula de pas |
| Autors: | Sergi Tur Badenas, Lluís Pérez Vidal |
Lightweight Directory Access Protocol (LDAP) és un protocol de xarxa que permet l'accés a un servei de directori per tal de compartir informació en una xarxa. LDAP és pot considerar una base de dades tot i que el seu sistema d'emmagatzemament (estructura jeràrquica) difereix força de l'estructura relacional (taules i registres) de les bases de dades "tradicionals".
Habitualment s'utilitza per emmagatzemar la informació dels usuaris d'un domini (entre altre informació l'usuari i la contrasenya). El seu objectiu principal és permetrà l'autenticació en xarxa als recursos de xarxa. També es possible emmagatzemar altre informació com les dades de contacte dels usuaris (directori d'una empresa ) o també s'utilitza sovint per inventariar recursos (inventari de màquines, impressores, servidors, i altres recursos de xarxa).
El directori LDAP
Una part important del protocol LDAP és el directori. El directori és la "base de dades" de LDAP. Té una estructura jerarquitzada, en forma d'arbre (similar als arbres dels sistemes de fitxers). Hi ha un node arrel, i a partir d'aquí l'estructura s'organitza en subarbres. Cada node de l'arbre, és un objecte LDAP i poden o no contenir altres objectes. Cada objecte ve definit per un esquema, schema en anglès, (ve a ser com la estructura d'una taula en una base de dades) que defineix els. Els objectes poden heretar característiques d'altres objectes (pares) o proporcionar característiques a altres objectes (fills).
L'esquema defineix els parells d'atributs-valors que pot tenir un objecte, i unes normes bàsiques referents als atributs (P. ex. si és obligatori o opcional)
La tendència actual dels directoris LDAP és tendir a utilitzar DNS en els seus nivells més alts del directori. Així per exemple la upc tindria els següents nivells principals:
- edu
- upc
i més enlla d'aquí la organització es per departaments, grups de persones, recursos (), etc:
- edu
- upc
- lsi
- professors
- alumnes
- servidors
- impressores
- upc
Glossari
- DIT o Directory Information Tree: http://en.wikipedia.org/wiki/Directory_Information_Tree
- DS o Directory Service: http://en.wikipedia.org/wiki/Directory_service
- Root DSE Entry: The root DSE is a special entry that contains information related to the current server instance, such as a list of supported suffixes, available authentication mechanisms, and so forth. You can search this entry by supplying a search base of “”. You must also specify a search scope of base and a filter of "(objectclass=*)". Per exemple:
ldapsearch -h myServer -p 5201 -D cn=admin,cn=Administrators,cn=config -w - \ -b "" -s base "(objectclass=*)"
TODO:
A Directory Information Tree (DIT) is data represented in a hierarchical tree-like structure consisting of the Distinguished Names (DNs) of directory service entries.
Both the X.500 protocols and the Lightweight Directory Access Protocol (LDAP) use the DIT as their fundamental data structure.
Typically, an X.500 or LDAP deployment for a single organization will have a DIT which consists of two parts:
* a top level name structure for the name of the organization itself * a representation of the data model structure within the organization
DIT
Exemple de DIT
Operational attributtes
Són?:
- createTimeStamp
- creatorsName
- entryFlags
- federationBoundary
- localEntryID
- modifiersName
- modifyTimeStamp
- structuralObjectClass
- subordinateCount
- subschemaSubentry
No apareix per defecte a la llista de camps que es mostren a una cerca. El podeu mostrar indicat el camp al final. Per exemple:
$ ldapsearch -D cn=admin,o=novell -W -b o=novell cn=fred createtimestamp creatorsname entryflags localentryid modifytimestamp
o
$ ldapsearch -x -h localhost -b dc=iesebre,dc=com modifytimestamp
Recursos
Data types
TODO
Servidor LDAP
Hi han múltiples implementacions del protocol LDAP (com Active Directory) però en aquest article ens centrarem en la implementació lliure OpenLdap. Per aquesta implementació el servidor és anomenat slapd
Instal·lació
Instal·lació Ubuntu 10.4
Consulteu: http://www.iesebre.com/manteniment/index.php/LDAP#Instal.C2.B7laci.C3.B3
Karmic Koala, Ubuntu 9.10
$ sudo apt-get install slapd
NOTA: Un cop instal·lat veureu que no hi ha fitxer /etc/ldap/slapd.conf!
IMPORTANT: NO UTILITZEU dpkg-reconfigure per configurar el servidor Ldap (slapd) ja que no només no us configurarà res si no que a més us esborrarà la configuració de Ldap que ja tingueu feta!
Si observeu el fitxer /etc/default/slapd:
# Location of the slapd configuration to use. If using the cn=config # backend to store configuration in LDIF, set this variable to the # directory containing the cn=config data; otherwise set it to the location # of your slapd.conf file. If empty, use the compiled-in default # (/etc/ldap/slapd.d). SLAPD_CONF=
És a dir que per defecte la configuració es troba a:
/etc/ldap/slapd.d
La carpeta només és accessible per a l'usuari openldap (o per a root):
$ sudo -s # cd /etc/ldap/slapd.d
Consulteu el fitxers que hi ha dins:
$ ls -la total 16 drwxr-x--- 3 openldap openldap 4096 2010-06-18 20:31 . drwxr-xr-x 8 root root 4096 2010-06-18 20:31 .. drwxr-x--- 3 openldap openldap 4096 2010-06-18 20:31 cn=config -rw-r----- 1 openldap openldap 407 2010-06-18 20:31 cn=config.ldif
Fixeu-vos que els fitxers que hi ha qui dins han de ser de l'usuari openldap. La configuració de Ldap ara es guarda dins el propi arbre del servidor Ldap al node cn=config. Entre dins la carpeta cn=config:
# cd cn\=config
# ls
cn=schema cn=schema.ldif olcDatabase={0}config.ldif olcDatabase={-1}frontend.ldif
A qui hi ha més configuracions bàsiques del servidor. Una de les carpetes més importants és cn=schema, a on col·locarem els esquemes.
Anem a fem una configuració bàsica. Creeu una carpeta per guardar els fitxers que necessitarem per tal de fer aquesta configuració:
# cd /etc/ldap # sudo mkdir configuracioInicial
Només l'squema core està afegit a la configuració per defecte. Afegiu altres esquemes amb:
# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif # ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif # ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif
Ara cal crear la base del repositori ldap. Creeu un fitxer amb el següent codi ldif:
# joe db.ldif
NOTA: Canvieu iesebre pel nom del vostre domini
###########################################################
# DATABASE SETUP
###########################################################
# Load modules for database type
dn: cn=module{0},cn=config
objectClass: olcModuleList
cn: module{0}
olcModulePath: /usr/lib/ldap
olcModuleLoad: {0}back_hdb
# Create directory database
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=iesebre,dc=com
olcRootDN: cn=admin,dc=iesebre,dc=com
olcRootPW: PARAULA DE PAS
olcDbConfig: {0}set_cachesize 0 2097152 0
olcDbConfig: {1}set_lk_max_objects 1500
olcDbConfig: {2}set_lk_max_locks 1500
olcDbConfig: {3}set_lk_max_lockers 1500
olcLastMod: TRUE
olcDbCheckpoint: 512 30
olcDbIndex: uid pres,eq
olcDbIndex: cn,sn,mail pres,eq,approx,sub
olcDbIndex: objectClass eq
I ara:
# ldapadd -Y EXTERNAL -H ldapi:/// -f db.ldif
Ara cal crear l'arrel del servidor LDAP i l'usuari admin. Abans cal aconseguir una paraula de pas en MD5
$ slappasswd -h {MD5} New password: Re-enter new password: {MD5}sac43R48I+13VCvWpQribA==
Creeu un altre fitxer:
$ sudo joe base.ldif
dn: dc=iesebre,dc=com
objectClass: dcObject
objectclass: organization
o: iesebre.com
dc: iesebre
description: Arrel LDAP
dn: cn=admin,dc=iesebre,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
userPassword: {MD5}sac71Y48I+13VRfWpQeibA==
NOTA: Observeu que heu de posar la paraula de pas obtinguda a l'última línia
Executeu:
# ldapadd -Y EXTERNAL -H ldapi:/// -f base.ldif SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 adding new entry "dc=iesebre,dc=com" adding new entry "cn=admin,dc=iesebre,dc=com"
Ara cal modificar les ACL:
$ sudo joe config.ldif
dn: cn=config
changetype: modify
delete: olcAuthzRegexp
dn: olcDatabase={-1}frontend,cn=config
changetype: modify
delete: olcAccess
dn: olcDatabase={0}config,cn=config
changetype: modify
delete: olcRootDN
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootDN
olcRootDN: cn=admin,cn=config
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {MD5}Gnmk1g3mcY6OWzJuM4rlMw==
dn: olcDatabase={0}config,cn=config
changetype: modify
delete: olcAccess
NOTA: Canvieu olcRootPW per la vostra paraula de pas en MD5
# ldapadd -Y EXTERNAL -H ldapi:/// -f config.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"
modifying entry "olcDatabase={-1}frontend,cn=config"
modifying entry "olcDatabase={0}config,cn=config"
modifying entry "olcDatabase={0}config,cn=config"
modifying entry "olcDatabase={0}config,cn=config"
modifying entry "olcDatabase={0}config,cn=config"
I ara creeu un altre fitxer:
# joe acl.dif
dn: olcDatabase={1}hdb,cn=config
add: olcAccess
olcAccess: to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=iesebre,dc=com" write by anonymous auth by self write by * none
olcAccess: to dn.base="" by * read
olcAccess: to * by dn="cn=admin,dc=iesebre,dc=com" write by * read
$ ldapmodify -x -D cn=admin,cn=config -W -f acl.ldif
I finalment:
$ sudo /etc/init.d/slapd restart
Ara ja teniu un servidor LDAP tal i com es tenia a la versió Jaunty Jackalope.
- http://ubuntuforums.org/showthread.php?t=1313472
- http://www.howtoforge.com/install-and-configure-openldap-on-ubuntu-karmic-koala
Instal·lació abans de Karmic
Per instal·lar slapd hem d'executar:
$ sudo apt-get install slapd
Durant la instal·lació ens preguntara el password de l'administrador Ldap.
Tal i com suggereix apt-get, també és recomanable disposar dels paquets db4.2-util i libsasl2-modules.
$ sudo apt-get install db4.2-util libsasl2-modules
Podem consultar els fitxers que instal·la slapd amb la comanda:
$ dpkg -L slapd
Tenim les següents comandes/aplicacions/servidors:
$ dpkg -L slap | grep bin /usr/sbin /usr/sbin/slapd /usr/sbin/slurpd /usr/sbin/slapadd /usr/sbin/slapcat /usr/sbin/slapdn /usr/sbin/slapindex /usr/sbin/slappasswd /usr/sbin/slaptest
Entre les comandes hi ha el servidor principal (slapd), el servidor de replica (slurpd) i les diferents comandes necessàries per mantenir la base de dades del servidor (slapadd,slappasswd,etc...)
I els següents fitxers de configuració:
$ dpkg -L slapd | grep etc /etc /etc/ldap /etc/ldap/schema /etc/ldap/schema/README /etc/ldap/schema/corba.schema /etc/ldap/schema/core.schema /etc/ldap/schema/cosine.schema /etc/ldap/schema/dyngroup.schema /etc/ldap/schema/inetorgperson.schema /etc/ldap/schema/java.schema /etc/ldap/schema/misc.schema /etc/ldap/schema/nis.schema /etc/ldap/schema/openldap.schema /etc/default /etc/default/slapd /etc/init.d /etc/init.d/slapd
La resta de fitxers són manuals i documentació (carpeta /usr/share/doc) i la base de dades (carpetes /var/lib). De la documentació cal destacar el fitxer README:
$ nano /usr/share/doc/slapd/README.Debian
Script d'instal·lació
Executeu:
$ cd $ wget -N --http-user=anonymous --http-password= http://anonymous@svn.projectes.lafarga.cat/svn/iceupc/SambaSobreLDAP/SLAPDinstall.sh $ sudo chmod +x SLAPDinstall.sh $ ./SLAPDinstall.sh
Com s'ha creat l'script:
Creeu un fitxer SLAPDinstall.sh:
$ sudo joe SLAPDinstall.sh
Amb el contingut:
#!/bin/bash sudo apt-get install -y --force-yes slapd ldap-utils echo "*****************************************"; echo "Poseu com a paraula de pas: ice" echo "*****************************************"; wget -N --http-user=anonymous --http-password= http://svn.projectes.lafarga.cat/svn/iceupc/SambaSobreLDAP/slapd.conf echo "Fent una còpia de seguretat de ldap a data `date "+%Y%m%d"`..." sudo cp -r /etc/ldap /etc/ldap.old.`date "+%Y%m%d"` echo "Copiant slapd.conf a /etc/ldap..." sudo cp slapd.conf /etc/ldap sudo /etc/init.d/slapd restart echo "Afegint els usuaris de proves del fitxer assistents.ldif..." wget -N --http-user=anonymous --http-password= http://svn.projectes.lafarga.cat/svn/iceupc/SambaSobreLDAP/moodle/sessio2/ldap/assistents.ldif ldapadd -x -f assistents.ldif -H "ldap://localhost" -D "cn=admin,dc=Aulalinux,dc=ice,dc=upc,dc=edu" -W
NOTA: Recordeu que per evitar problemes posem tots la mateixa paraula de pas: ice
La configuració del servidor és la següent:
$ cat /etc/ldap/slapd.conf # 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 # 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 none # Where the dynamically loaded modules are stored modulepath /usr/lib/ldap moduleload back_hdb # 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 ####################################################################### # Specific Backend Directives for hdb: # Backend specific directives apply to this backend until another # 'backend' directive occurs backend hdb ####################################################################### # 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 hdb: # Database specific directives apply to this databasse until another # 'database' directive occurs database hdb # The base of your directory in database #1 suffix "dc=Aulalinux,dc=ice,dc=upc,dc=edu" # rootdn directive for specifying a superuser on the database. This is needed # for syncrepl. # rootdn "cn=admin,dc=Aulalinux,dc=ice,dc=upc,dc=edu" # Where the database file are physically stored for database #1 directory "/var/lib/ldap" # The dbconfig settings are used to generate a DB_CONFIG file the first # time slapd starts. They do NOT override existing an existing DB_CONFIG # file. You should therefore change these settings in DB_CONFIG directly # or remove DB_CONFIG and restart slapd for changes to take effect. # 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 2097152 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 # Save the time that the entry gets modified, for database #1 lastmod on # Checkpoint the BerkeleyDB database periodically in case of system # failure and to speed slapd shutdown. checkpoint 512 30 # Where to store the replica logs for database #1 # replogfile /var/lib/ldap/replog # 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 # admin entry below # These access lines apply to database #1 only access to attrs=userPassword,shadowLastChange by dn="cn=admin,dc=Aulalinux,dc=ice,dc=upc,dc=edu" write 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 # The admin dn has full write access, everyone else # can read everything. access to * by dn="cn=admin,dc=Aulalinux,dc=ice,dc=upc,dc=edu" write by * read # For Netscape Roaming support, each user gets a roaming # profile for which they have write access to #access to dn=".*,ou=Roaming,o=morsnet" # by dn="cn=admin,dc=Aulalinux,dc=ice,dc=upc,dc=edu" write # by dnattr=owner write ####################################################################### # Specific Directives for database #2, of type 'other' (can be hdb 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"
Control del servei slapd. Execució, parada, status i reconfiguració de OpenLdap
Seguint els estàndards de Debian GNU/Linux (basat en el sistema d'scripts d'inicialització SystemV (http://en.wikipedia.org/wiki/System_V)) l'script de control del dimoni bind és:
/etc/init.d/slapd
Les accions que podem fer amb el servei són start|stop|restart|force-reload.
Cada cop que fem un canvi a la configuració de bind haurem de fer un restart:
$ sudo /etc/init.d/slapd restart
Tal com podem veure executant:
$ sudo updatedb /etc/rc0.d/K80slapd /etc/rc1.d/K80slapd /etc/rc2.d/S19slapd /etc/rc3.d/S19slapd /etc/rc4.d/S19slapd /etc/rc5.d/S19slapd /etc/rc6.d/K80slapd /var/cache/apt/archives/slapd_2.2.26-5ubuntu3.1_i386.deb
El serveis slapd s'executa a partir del nivell 1 (cal destacar que no està disponible al nivell SINGLE USER MODE rcS.d).
Podeu trobar més informació a l'article Configuració de serveis en Linux
Configuració de slapd
IMPORTANT: A openLdap 2.3 i posteriots la configuració ja no es fa a partir d'un fitxer de configuració estàtic, sinó que és la pròpia base de dades ("backend") de LDAP que incorpora la configuració. Això permet que es puguin fer canvis al servidors LDAP de forma dinàmica sense necessitat de recarregar el servidor. Consulteu http://www.openldap.org/doc/admin24/slapdconf2.html
Configuració estàtica (antigues versions). Fitxer slapd.conf
Els fitxers de configuració del dimoni slapd (seguint els estàndards de Debian GNU/Linux) es troben a la carpeta /etc/ldap. Com en el cas d'altres sistemes servidors, tant la configuració del servidor com la del client es fan a la mateixa carpeta
El fitxer principal de configuració és el fitxer /etc/ldap/slapd.conf.
Normalment tindrem prou amb executar:
$sudo dpkg-reconfigure slapd
per tal de configurar o reconfigurar un servidor LDAP. A l'executar dpkg-reconfigure amb slapd cal fixar-se que al final no hi hagi cap problema. Les següents línies mostren una sortida de dpkg-reconfigure correcta:
$ sudo dpkg-reconfigure slapd Stopping OpenLDAP: slapd. Creating initial slapd configuration... done. Creating initial LDAP directory... done. Starting OpenLDAP: running BDB recovery, slapd.
Les següents captures de pantalla mostren els passos a seguir per tal de configurar un servidor LDAP amb el sufix:
- AulaLinux.ice.upc.edu
Cal tenir en compte que si modifiquem la base de dades eliminarem els continguts que hi hagin actualment al directori. El configurador ens permet fet una còpia de seguretat que es guarda a la carpeta:
/var/backups
Amb un nom similar a:
/var/backups/unknown-2.3.35-1ubuntu0.1.ldapdb
Tal i com s'indica al final de la configuració:
$ sudo dpkg-reconfigure slapd Stopping OpenLDAP: slapd. Moving old database directory to /var/backups:
Si la còpia ja existeix no es farà el backup:
Backup path /var/backups/unknown-2.3.35-1ubuntu0.1.ldapdb exists.Giving up...
Configuració dinàmica cn=admin,cn=config. Ubuntu 9.10
Podeu trobar info sobre el nou sistema de configuració de Ldap a:
http://linux.die.net/man/5/slapd-config
Inicialment es fa amb:
ldapadd -Y EXTERNAL -H ldapi:// -f file
Després amb:
ldapadd -x -Y EXTERNAL -H ldapi:// -D cn=admin,cn=config -W -f file
DIT del config
Passar un fitxer slapd.conf al nou format
Es pot fer amb l'ordre slaptest
$ sudo slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d
A vegades només es vol convertir un schema. Per exemple imagineu-vos que voleu importar l'esquema iris.schema:
$ joe schema_convert1.conf
Aquí poseu els includes dels esquemes, cal posar l'esquema iris.schema i els esquemes dels que depèn:
include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/iris.schema
Guardarem els resultats a una carpeta concreta. A l'exemple ldif_result1:
$ mkdir ldif_result1
Ara fem la conversió
$ slaptest -f schema_convert1.conf -F ldif_result1
Per instal·lar l'esquema, cal posar-lo a la carpeta:
/etc/ldap/slapd.d/cn=config/cn=schema
amb un número que no xoqui amb els existents, en el meu cas el primer número lliure és el 16:
$ sudo -s # cp cn\=\{3\}iris.ldif /etc/ldap/slapd.d/cn\=config/cn\=schema/cn\=\{16\}iris.ldif # chown openldap:openldap /etc/ldap/slapd.d/cn\=config/cn\=schema/cn\=\{16\}iris.ldif # /etc/init.d/slapd restart
Si teniu algun problema al tornar a iniciar slapd, executeu-lo en mode depuració per obtenir més informació:
# slapd -d 16383 -h 'ldap:/// ldapi:///' -g openldap -u openldap -F /etc/ldap/slapd.d/
Consultar la configuració
Ho podeu fer amb:
$ sudo ldapsearch -Y EXTERNAL -H ldapi:/// -b cn=config
També podeu mostrar la base de dades amb:
# Show the current data in the directory as anonymous user: ldapsearch -x -h localhost -b dc=edu,dc=example,dc=org
I volcar-la a ldif amb:
# Dump the database with metadata: sudo slapcat
Fitxer de configuració /etc/ldap/slapd.conf
Aquest és el fitxer de configuració del servidor i és utilitzat per totes les comandes del servidor. (slapd, slurpd, slpaacl,slapcat,etc.).
L'inici del fitxer conté les configuracions globals del servidor ldap. Un servidor ldap pot tenir més d'una base de dades (backend). Després dels paràmetres globals comencen els paràmetres de configuració de les bases de dades (ha dhaver-hi com a mínim un backend).
Propietats
- Les opcions són case-insensitive
- Els comentaris es fan amb una línia que comença per #
- Les definicions de base de dades comencen amb la línia:
database <backend 1 type>
Fins a la següent línia database (si n'hi ha) totes les opcions són per a una base de dades específica.
- Les opcions globals poden ser sobreescrites per les opcions de base de dades
- Si un línia comença per un o més espais es considera una continuació de la línia anterior
Per consultar les opcions del vostre fitxer slapd.conf però sense comentaris podeu executar:
$ sudo cat /etc/ldap/slapd.conf | grep -v '#'
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
pidfile /var/run/slapd/slapd.pid
argsfile /var/run/slapd/slapd.args
loglevel 0
modulepath /usr/lib/ldap
moduleload back_bdb
sizelimit 500
tool-threads 1
backend bdb
checkpoint 512 30
database bdb
suffix "dc=dyndns,dc=org"
rootdn "cn=admin,dc=dyndns,dc=org"
directory "/var/lib/ldap"
dbconfig set_cachesize 0 2097152 0
dbconfig set_lk_max_objects 1500
dbconfig set_lk_max_locks 1500
dbconfig set_lk_max_lockers 1500
index objectClass eq
lastmod on
access to attrs=userPassword,shadowLastChange
by dn="cn=admin,dc=dyndns,dc=org" write
by anonymous auth
by self write
by * none
access to dn.base="" by * read
access to *
by dn="cn=admin,dc=dyndns,dc=org" write
by * read
dbconfig set_lk_max_objects 1500
Recursos:
Comandes
Les comandes del servidor són les següents:
$ dpkg -L slapd | grep bin /usr/sbin /usr/sbin/slapd /usr/sbin/slurpd /usr/sbin/slaptest /usr/sbin/slappasswd /usr/sbin/slapindex /usr/sbin/slapdn /usr/sbin/slapcat /usr/sbin/slapauth /usr/sbin/slapadd /usr/sbin/slapacl
Les comandes slpad i slurpd són els servidors Ldap. La resta de comandes s'expliquen en aquest apartat.
slaptest
Aquesta comanda és molt útil per tal de comprovar si el fitxer de configuració del servidor és correcte (slapd.conf):
$ sudo slaptest /etc/ldap/slapd.conf: line 100: rootdn is always granted unlimited privileges. /etc/ldap/slapd.conf: line 117: rootdn is always granted unlimited privileges. config file testing succeeded
Recursos:
slappasswd
Amb aquesta utilitat podem generar contrasenyes vàlides per al fitxer de configuració o per a comandes com ldapmodify:
$ sudo slappasswd
New password:
Re-enter new password:
{SSHA}Htu7njUuLtBAgM5ytqBzNXx+I+6YVqBe
Recursos:
slapindex
Serveix per a crear index.
Vegeu també: Ldap#Rendiment.
Del manual: ( $ [[man] slapindex ):
Per reindexar tot el backend Ldap:
$ sudo /usr/sbin/slapindex
IMPORTANT: Crec que el servidor Ldap ha d'estar aturat
Només per a un atribut:
$ sudo /usr/sbin/slapindex uid
Amb la nova configuració és automàtic? Cal slapindex?
Recursos:
- man slapindex
- http://trac.ebox-platform.com/wiki/Document/HowTo/LDAPoptimization
- http://wiki.zimbra.com/wiki/Adding_ldap_indices_6.0
slapdn
Serveix per comprovar si una entrada de l'arbre segueix les normes dels esquemes definits:
$ sudo /usr/sbin/slapdn -v ou=proves,dc=dyndns,dc=org /etc/ldap/slapd.conf: line 100: rootdn is always granted unlimited privileges. /etc/ldap/slapd.conf: line 117: rootdn is always granted unlimited privileges. DN: <ou=proves,dc=dyndns,dc=org> check succeeded normalized: <ou=proves,dc=dyndns,dc=org> pretty: <ou=proves,dc=dyndns,dc=org>
Recursos:
slapcat
Aquesta comanda fa un volcatge de tota la base de dades Ldap en format ldiff:
$ sudo slapcat | more /etc/ldap/slapd.conf: line 100: rootdn is always granted unlimited privileges. /etc/ldap/slapd.conf: line 117: rootdn is always granted unlimited privileges. dn: dc=dyndns,dc=org objectClass: top objectClass: dcObject objectClass: organization o: dyndns.org dc: dyndns structuralObjectClass: organization entryUUID: 423babea-6fff-102c-9952-3bbe055658ac creatorsName: modifiersName: createTimestamp: 20080215104816Z modifyTimestamp: 20080215104816Z entryCSN: 20080215104816Z#000000#00#000000 dn: cn=admin,dc=dyndns,dc=org objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator structuralObjectClass: organizationalRole entryUUID: 423c455a-6fff-102c-9953-3bbe055658ac creatorsName: createTimestamp: 20080215104816Z userPassword:: entryCSN: 20080215104914Z#000000#00#000000 modifiersName: cn=admin,dc=dyndns,dc=org modifyTimestamp: 20080215104914Z ...
Es pot fer una còpia de seguretat:
$ sudo slapcat > basedadesldap_2010_20_07.ldif
Recursos:
slapauth
TODO
Recursos:
slapadd
Permet afegir entrades a un servidor Ldap:
$ sudo slapadd -l ldif
És recomanable que el servidor estigui apagat per evitar inconsistències.
Recursos:
slapacl
Permet comprovar l'accés a una sèrie d'atributs.
Consulteu: Ldap#ACLs_i_usuaris
Recursos:
Característiques del servidor ldap a skolelinux
Consulteu la secció Ldap de l'article SkoleLinux.
Múltiples bases de dades
Recursos:
Servidor de replica (esclaus)
slurpd
Configuració del master
La configuració del master és la que escaigui més la configuració de la replica. El primer que cal fer és indicar el fitxer de log a la configuració del servidor ldap (fitxer /etc/ldap/slapd.conf):
NOTA: Tots els paràmetres es posen a la secció de base de dades (després del paràmetre database)
replogfile /var/lib/ldap/openldap-master-replog
I cal indicar el servidor esclau (la replica):
replica host=IP_DEL_SERVIDOR_LDAP_REPLICA:389 suffix="dc=aulalinux,dc=ice,dc=upc,dc=edu" binddn="cn=admin,dc=aulalinux,dc=ice,dc=upc,dc=edu" credentials=parauladepas bindmethod=simple tls=yes
A la rèplica (fitxer slapd.conf del servidor rèplica) cal configurar el servidor Ldap com s'escaigui i afegir:
updatedn cn=admin,dc=aulalinux,dc=ice,dc=upc,dc=edu updateref ldap://IP_SERVIDOR_MASTER
Al master cal iniciar slurpd. Slurpd és el dimoni que s'encarrega d'enviar les modificacions dels master als esclaus. Amb Debian podem controlar l'execució d'aquest dimoni al fitxer:
/etc/default/slapd
Amb el paràmetre:
SLURPD_START
El valor per defecte és:
# Configure if the slurpd daemon should be started. Possible values: # - yes: Always start slurpd # - no: Never start slurpd # - auto: Start slurpd if a replica option is found in slapd.conf (default) SLURPD_START=auto
Com podeu veure s'executa automàticament si al fitxer slapd.conf hi ha una paràmetre rèplica.
Per iniciar la replica val la pena tenir tots dos servidors (master i esclau) parats. Obtenim un còpia del master:
$ sudo slapcat -l /tmp/master.ldif
Copiem el fitxer master a l'esclau. Podem utilitzar SSH.
A l'esclau (amb el servidor apagat executem):
$ sudo slapadd -c -f master.ldif
I ara ja podem iniciar tots dos servidors.
Recursos:
- http://www.openldap.org/doc/admin24/replication.html
- http://www.opensourcehowto.org/how-to/openldap/openldap-master-slave-replication.html
syncrepl
En versions actuals (--acacha 20:48, 12 jul 2010 (UTC)) d'OpenLdap substitueix slurpd. De totes maneres, slurpd encara es pot utilitzar en aquestes versions. La terminologia utilitzada per referir-se als servidors masters i esclaus és:
- Consumidor (consumer): Servidors esclaus o rèplica
- Proveïdor (provider): Servidors master
Configuració del proveïdor:
No necessita cap configuració especial.
Configuració del consumidor:
syncrepl rid=123 provider=ldap://provider.example.com:389 type=refreshOnly interval=01:00:00:00 searchbase="dc=example,dc=com" filter="(objectClass=organizationalPerson)" scope=sub attrs="cn,sn,ou,telephoneNumber,title,l" schemachecking=off updatedn="cn=replica,dc=example,dc=com" bindmethod=simple binddn="cn=syncuser,dc=example,dc=com" credentials=secret
Syncrepl és més configurable. En aquest exemple el consumidor obté les dades del proveïdor (ldap://provider.example.com:389) una vegada al dia (interval=01:00:00:00)
Per a més informació consulteu el paràmetre:
Del manual del fitxer de configuració:
$ man slapd.conf
syncrepl rid=<replica ID> provider=ldap[s]://<hostname>[:port] searchbase=<base DN> [type=refreshOnly|refreshAndPersist] [interval=dd:hh:mm:ss] [retry=[<retry interval> <# of retries>]+] [filter=<filter str>] [scope=sub|one|base|subord] [attrs=<attr list>] [attrsonly] [sizelimit= <limit>] [timelimit=<limit>] [schemachecking=on|off] [network-timeout=<seconds>] [timeout=<seconds>] [bindmethod=simple|sasl] [binddn=<dn>] [saslmech= <mech>] [authcid=<identity>] [authzid=<identity>] [credentials=<passwd>] [realm=<realm>] [secprops=<properties>] [starttls=yes|critical] [tls_cert= <file>] [tls_key=<file>] [tls_cacert=<file>] [tls_cacertdir=<path>] [tls_reqcert=never|allow|try|demand] [tls_ciphersuite=<ciphers>] [tls_crlcheck=none|peer|all] [logbase=<base DN>] [logfilter=<filter str>] [syncdata=default|accesslog|changelog]
Specify the current database as a replica which is kept up-to-date with the master content by establishing the current slapd(8) as a replication consumer site
running a syncrepl replication engine. The replica content is kept synchronized to the master content using the LDAP Content
Synchronization protocol. Refer to the "OpenLDAP Administrator's Guide" for detailed information on setting up a replicated slapd directory service using the syncrepl
replication engine. rid identifies the current syncrepl directive within the replication consumer site. It is a non-negative integer not greater
than 4095 (limited to three hexadecimal digits).
Provider specifies the replication provider site containing the master content as an LDAP URI. If <port> is not given, the standard
LDAP port number (389 or 636) is used.
The content of the syncrepl replica is defined using a search specification as its result set. The consumer slapd will send search
requests to the provider slapd according to the search specification. The search specification includes searchbase, scope, filter, attrs, attrsonly,
sizelimit, and timelimit parameters as in the normal search specification. The scope defaults to sub, the filter defaults to (objectclass=*), while there is
no default searchbase.
The attrs list defaults to "*,+" to return all user and operational attributes, and attrsonly is unset by default. The sizelimit and timelimit only accept "unlimited" and positive integers, and both default to "unlimited". The sizelimit and timelimit parameters define a consumer requested limitation on the number of entries that can be returned by the LDAP Content Synchronization operation; as such, it is intended to implement partial replication based on the size of the replicated database and on the time required by the synchronization. Note, however, that any provider-side limits for the replication identity will be enforced by the provider regardless of the limits requested by the LDAP Content Synchronization operation, much like for any other search operation.
The LDAP Content Synchronization protocol has two operation types. In the refreshOnly operation, the next synchronization search operation is periodically rescheduled at an interval time (specified by interval parameter; 1 day by default) after each synchronization operation finishes. In the refreshAndPersist operation, a synchronization search remains persistent in the provider slapd. Further updates to the master replica will generate searchResultEntry to the consumer slapd as the search responses to the persistent synchronization search. If an error occurs during replication, the consumer will attempt to reconnect according to the retry parameter which is a list of the <retry interval> and <# of retries> pairs. For example, retry="60 10 300 3" lets the consumer retry every 60 seconds for the first 10 times and then retry every 300 seconds for the next 3 times before stop retrying. The `+' in <# of retries> means indefinite number of retries until success. If no retry was specified, by default syncrepl retries every hour forever. The schema checking can be enforced at the LDAP Sync consumer site by turning on the schemachecking parameter. The default is off. Schema checking on means that replicated entries must have a structural objectClass, must obey to objectClass requirements in terms of required/allowed attributes, and that naming attributes and distinguished values must be present. As a consequence, schema checking should be off when partial replication is used. The network-timeout parameter sets how long the consumer will wait to establish a network connection to the provider. Once a connection is established, the timeout parameter determines how long the consumer will wait for the initial Bind request to complete. The defaults for these parameters come from ldap.conf(5). A bindmethod of simple requires the options binddn and credentials and should only be used when adequate security services (e.g. TLS or IPSEC) are in place. REMEMBER: simple bind credentials must be in cleartext! A bindmethod of sasl requires the option saslmech. Depending on the mechanism, an authentication identity and/or credentials can be specified using authcid and credentials. The authzid parameter may be used to specify an authorization identity. Specific security properties (as with the sasl-secprops keyword above) for a SASL bind can be set with the secprops option. A non default SASL realm can be set with the realm option. The identity used for synchronization by the consumer should be allowed to receive an unlimited number of entries in response to a search request. The provider, other than allow authentication of the syncrepl identity, should grant that identity appropriate access privileges to the data that is being replicated (access directive), and appropriate time and size limits. This can be accomplished by either allowing unlimited sizelimit and timelimit, or by setting an appropriate limits statement in the consumer's configuration (see sizelimit and limits for details). The starttls parameter specifies use of the StartTLS extended operation to establish a TLS session before Binding to the provider. If the critical argument is supplied, the session will be aborted if the StartTLS request fails. Otherwise the syncrepl session continues without TLS. The tls_reqcert setting defaults to "demand" and the other TLS settings default to the same as the main slapd TLS settings. Rather than replicating whole entries, the consumer can query logs of data modifications. This mode of operation is referred to as delta syncrepl. In addition to the above parameters, the logbase and logfilter parameters must be set appropriately for the log that will be used. The syncdata parameter must be set to either "accesslog" if the log conforms to the slapo-accesslog(5) log format, or "changelog" if the log conforms to the obsolete changelog format. If the syncdata parameter is omitted or set to "default" then the log parameters are ignored.
Recursos:
Configuració amb cn=config
Canvis al master (proveïdor):
Creeu una carpeta on guardar els fitxers necessaris per fer la configuració:
$ mkdir /etc/ldap/configuracioInicial/ $ cd /etc/ldap/configuracioInicial/
Creeu un fitxer LDIF:
$ sudo joe provider_sync.ldif
Afegiu:
# Add indexes to the frontend db.
dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: entryCSN eq
-
add: olcDbIndex
olcDbIndex: entryUUID eq
#Load the syncprov and accesslog modules.
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: syncprov
-
add: olcModuleLoad
olcModuleLoad: accesslog
# Accesslog database definitions
dn: olcDatabase={2}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap/accesslog
olcSuffix: cn=accesslog
olcRootDN: cn=admin,dc=example,dc=com
olcDbIndex: default eq
olcDbIndex: entryCSN,objectClass,reqEnd,reqResult,reqStart
# Accesslog db syncprov.
dn: olcOverlay=syncprov,olcDatabase={2}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpNoPresent: TRUE
olcSpReloadHint: TRUE
# syncrepl Provider for primary db
dn: olcOverlay=syncprov,olcDatabase={1}hdb,cn=config
changetype: add
objectClass: olcOverlayConfig
objectClass: olcSyncProvConfig
olcOverlay: syncprov
olcSpNoPresent: TRUE
# accesslog overlay definitions for primary db
dn: olcOverlay=accesslog,olcDatabase={1}hdb,cn=config
objectClass: olcOverlayConfig
objectClass: olcAccessLogConfig
olcOverlay: accesslog
olcAccessLogDB: cn=accesslog
olcAccessLogOps: writes
olcAccessLogSuccess: TRUE
# scan the accesslog DB every day, and purge entries older than 7 days
olcAccessLogPurge: 07+00:00 01+00:00
IMPORTANT: Fixeu-vos que heu de canviar la línia olcRootDN: cn=admin,dc=example,dc=com i adaptar-la al base dn del vostre servidor Ldap
També cal modificar la configuració de Apparmor:
$ sudo joe /etc/apparmor.d/usr.sbin.slapd
Afegiu les línies:
/var/lib/ldap/accesslog/ r, /var/lib/ldap/accesslog/** rwk,
Al final del fitxer (abans però del }).
Ara cal crear la carpeta /var/lib/ldap/accesslog/:
$ sudo -u openldap mkdir /var/lib/ldap/accesslog $ sudo -u openldap cp /var/lib/ldap/DB_CONFIG /var/lib/ldap/accesslog/
Torneu a iniciar Apparmor:
$ sudo /etc/init.d/apparmor reload
Ara executeu:
$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f provider_sync.ldif
O si ja teniu establerta una paraula de pas per tal de poder modificar la configuració de Ldap:
$ sudo ldapadd -x -D cn=admin,cn=config -W -f provider_sync.ldif
Canvis al slave (consumer):
El servidor Ldap esclau (en terminologia de syncrepl el consumidor) cal configurar-lo de la mateixa manera que el servidor Master (proveïdor). Seguiu doncs les passes de:
Ldap#Instal.C2.B7laci.C3.B3
Només les opcions referents a syncrepl seran diferents. Creeu un fitxer anomenat consumer_sync.ldif, amb el següent contingut:
#Load the syncprov module.
dn: cn=module{0},cn=config
changetype: modify
add: olcModuleLoad
olcModuleLoad: syncprov
# syncrepl specific indices
dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: entryUUID eq
-
add: olcSyncRepl
olcSyncRepl: rid=0 provider=ldap://ldap01.example.com bindmethod=simple binddn="cn=admin,dc=example,dc=com"
credentials=secret searchbase="dc=example,dc=com" logbase="cn=accesslog"
logfilter="(&(objectClass=auditWriteObject)(reqResult=0))" schemachecking=on
type=refreshAndPersist retry="60 +" syncdata=accesslog
-
add: olcUpdateRef
olcUpdateRef: ldap://ldap01.example.com
NOTA: Heu de canviar els paràmetres que estan en negreta per tal d'adaptar-los a la vostra configuració.
Un cop tingueu el fitxer salvat:
$ sudo ldapadd -c -Y EXTERNAL -H ldapi:/// -f consumer_sync.ldif
O si heu canviat els permisos per accedir al config:
$ sudo ldapadd -x -D cn=admin,cn=config -W -f consumer_sync.ldif
Comprovar el funcionament de la replicació. Fitxers de log
Per defecte Ldap mostra els missatges de replicació a /var/log/syslog:
$ sudo tail -f /var/log/syslog
Podeu filtrar els missatges amb:
$ sudo cat /var/log/syslog | grep slapd
FAQ
Resolució de problemes
syncrepl_message_to_entry: rid=000 mods check (objectClass: value #0 invalid per syntax)
Si el fitxer de log us diu:
$ sudo tail -f /var/log/syslog Jun 22 19:58:08 professorat slapd[9657]: syncrepl_message_to_entry: rid=000 mods check (objectClass: value #0 invalid per syntax) Jun 22 19:58:08 professorat slapd[9657]: do_syncrepl: rid=000 rc 21 retrying
Possiblement (al menys en el meu cas) el problema és que no teniu els mateixos esquemes de Ldap al consumer (slave) i al proveïdor (master). Al posar els mateixos esquemes. De fet copiant la carpeta /etc/ldap/slapd.d/cn=config/cn\=schema del master al esclau i posant bé els propietaris dels fitxers:
$ sudo scp -r root@192.168.0.108:/etc/ldap/slapd.d/cn=config/cn\=schema . $ sudo chown openldap:openldap *
La configuració que ha funcionat:
olcSyncrepl:
Sense TLS:
{0}rid=0 provider=ldap://192.168.0.108 bindmethod=simple binddn="cn=admin,dc=iesebre,dc=com" credentials=paraula_de_pas
searchbase="dc=iesebre,dc=com" logbase="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0))" schemachecking=on
type=refreshAndPersist retry="60 +" syncdata=accesslog
Amb TLS:
{0}rid=0 provider=ldap://192.168.0.108 bindmethod=simple starttls=critical binddn="cn=admin,dc=iesebre,dc=com" credentials=ie76pNCgxC3Ig
searchbase="dc=iesebre,dc=com" logbase="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0))" schemachecking=on
type=refreshAndPersist retry="60 +" syncdata=accesslog
NOTA: Per funciona TLS cal instal·lar els certificats client
slap_client_connect: ldap_sasl_interactive_bind_s failed (49)
$ sudo tail -f /var/log/syslog Jun 22 19:33:18 professorat slapd[9657]: slap_client_connect: URI=ldap://192.168.0.108 ldap_sasl_interactive_bind_s failed (49) Jun 22 19:33:18 professorat slapd[9657]: do_syncrepl: rid=000 rc 49 retrying
Normalment aquest error és degut a que ens intentem connectar a un servidor amb TLS i no ho hem indicat correctament. La configuració del paràmetre olcSyncRepl (l'àntic SyncRepl):
rid=0 provider=ldap://ldap01.example.com bindmethod=simple binddn="cn=admin,dc=example,dc=com" credentials=secret searchbase="dc=example,dc=com" logbase="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0))" schemachecking=on type=refreshAndPersist retry="60 +" syncdata=accesslog
Cal posar per exemle:
rid=0 provider=ldap://192.168.0.108 bindmethod=simple starttls=critical binddn="cn=admin,dc=iesebre,dc=com" credentials=parauladepas searchbase="dc=iesebre,dc=com" logbase="cn=accesslog" logfilter="(&(objectClass=auditWriteObject)(reqResult=0))" schemachecking=on type=refreshAndPersist retry="60 +" syncdata=accesslog
Més informació
Client LDAP
Instal·lació
El paquet amb les eines client és ldap-utils.Per instal·lar:
$ sudo apt-get install ldap-utils
Podem consultar els fitxers que instal·la ldap-utils amb la comanda:
$ dpkg -L ldap-utils
Lpap-utils ens proporciona les següents comandes:
$ dpkg -L ldap-utils | grep bin /usr/bin /usr/bin/ldapsearch /usr/bin/ldapmodify /usr/bin/ldapdelete /usr/bin/ldapmodrdn /usr/bin/ldappasswd /usr/bin/ldapwhoami /usr/bin/ldapcompare /usr/bin/ldapadd
La resta de fitxers són manuals i documentació (carpeta /usr/share/doc).
Configuració del client
Els clients poden utilitzar dos tipus de fitxers de configuració:
- Per Host Configuration: /etc/ldap/ldap.conf
- Per User Configuration: ~/.ldaprc
Els fitxers de configuració s'utilitzen per configurar paràmetres per defecte
El fitxer de configuració del client és ldap.conf:
$ cat /etc/ldap/ldap.conf # $OpenLDAP: pkg/ldap/libraries/libldap/ldap.conf,v 1.9 2000/09/04 19:57:01 kurt Exp $ # # LDAP Defaults # # See ldap.conf(5) for details # This file should be world readable but not world writable. #BASE dc=example, dc=com #URI ldap://ldap.example.com ldap://ldap-master.example.com:666 #SIZELIMIT 12 #TIMELIMIT 15 #DEREF never
Un exemple de configuració:
$ cat /etc/ldap/ldap.conf ... #BASE dc=example, dc=com #URI ldap://ldap.example.com ldap://ldap-master.example.com:666 URI ldap://localhost ...
Les configuracions també es poden fer a nivell d'usuari utilitzant el fitxer:
~/.ldaprc
Recursos
Format LDIF
Comandes
Podem trobar alguns exemples a:
- http://wiki.bfh.ch/index.php/LDAP_commands_usage_examples
- LDAP Command-Line Tools
- Syntax for LDIF and Command-Line Tools
Paràmetres comuns. Autenticació
Totes les comandes que requereixin d'autenticació serà necessari especificar l'usuari, la paraula de pas, la màquina i alguna altre opció.
Exemple:
ldapadd -x -H "ldaps://localhost" -D "cn=admin" -W -f exemple.ldif
Màquina:
-H "ldaps://localhost"
especificant una URL o:
-h localhost
especificant un nom de màquina
Usuari (Binddn):
És el nom distintiu del usuari (identificació única del node on esta l'usuari bindn dins de l'arbre ldap):
-D "cn=admin"
Paraula de pas:
-W
i ens pregunta per línia de comandes la paraula de pas. També es pot especificar amb:
-w password
Si no posem aquest paràmetre obtenim errors com:
ldapadd -H "ldaps://localhost" -D "cn=admin" -W -f exemple.ldif Enter LDAP Password: ldap_sasl_interactive_bind_s: No such attribute (16)
Finalment la opció -x és per utilitzar autentificació simple en comptes de SASL.
ldapsearch
Podem executar la següent comanda per comprovar si esta instal·lat el servidor ldap:
$ ldapsearch -x -b -s base '(objectclass=*)' namingContexts
On:
- -x: Utilitzar l'autenticació normal en comptes de SASL
- -b: La cerca és fa des de la base del directori ldap.
- -s base '(objectclass=*): Fem la cerca a partir d'un objecte base. A l'utilitzar '(objectclass=*) mostrem tots els objectes
Això és si executem la comanda desde el mateix servidor ldap. Per provar-ho desde un altre màquina:
$ ldapsearch -h "10.0.2.2" -x -b -s base '(objectclass=*)' namingContexts
Un altre exemple:
$ldapsearch -x -b 'uid=tester,ou=People,dc=pinux,dc=info'
Exemples de cerca:
- mail=*) Totes les entrades que tinguin mail
- (mail=*@*) Totes les entrades que tinguin mail vàlid
- (sn=smith) Busqueda exacte per nom
- (sn=s*) Entrades amb cognom començant per s o S
- (cn=*a*i*) Entrades amb una a o una i en qualsevol lloc
- (telephonenumber=*555)
- (objectclass=person) Buscar objectes person
Podeu trobar exemples de com fer cerques complexes a:
Recursos:
- ldapsearch(1) - Linux man page
- Configuración de un cliente y servidor OpenLDAP para autentificación
- manual de ldapsearch
ldapadd
La manera més "còmoda" per afegir registres és utilitzar el format ldif. Per això cal tenir un fitxer com:
# Entry 1: uid=abenitez,ou=People,dc=skole,dc=skolelinux,dc=no
dn:uid=abenitez,ou=People,dc=skole,dc=skolelinux,dc=no
cn:: QW5hbGlhIEVsaXNhYmV0aCBCZW7Dg8KtdGV6IFJvbWVybw==
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: top
objectClass: phpgwContactEtic
objectClass: posixAccount
objectClass: shadowAccount
phpgwContactTypeId: n
phpgwContactOwner: 14
phpgwContactAccess: public
phpgwContactCatId: 18
uid: abenitez
uidNumber: 10053
gidNumber: 10053
homeDirectory: /skole/tjener/home0/abenitez
mailMessageStore: /var/lib/maildirs/abenitez
userPassword: {crypt}
loginShell: /bin/bash
Suposem que el fitxer s'anomena exemple.ldif.Si volem afegir aquesta entrada a ldap executem:
$ ldapadd -f exemple.ldif
Això és si ja ens hem autenticat. Si no:
$ ldapadd -x -D 'cn=admin,dc=elmeudomini,dc=com' -w password -f exemple.ldif
Podeu trobar un exemple de fitxer ldiff a http://xarxantoni.net:8080/mediawiki/images/2/22/Assistents_complet.ldif.txt.
Cal tenir en compte que s'ha de complir els esquemes, no es poden insertar dos nodes amb el mateix identificador, etc. i per tant poden haver-hi errors.
Recursos:
ldapdelete
Podem esborrar nodes ldap amb la següent comanda:
$ldapdelete -x -D 'cn=admin,dc=elmeudomini,dc=com' -w contrasenya 'cn=usuari1,ou=People,dc=elmeudomini,dc=com'
Recursos:
ldapwhoami
Similar a la comanda whoami. Permet saber amb quin usuari estem treballant:
$ sudo dpkg -L ldap-utils /usr/bin/ldapdelete ... /usr/bin/ldapwhoami
També ens permet comprovar l'accés al sistema o el que és el mateix, comprovar els usuaris i paraules de pas:
Error
$ ldapwhoami -x -D "cn=admin,dc=aulalinux,dc=ice,dc=upc,dc=edu" -W Enter LDAP Password: ldap_bind: Invalid credentials (49)
Correcte
$ ldapwhoami -x -D "cn=admin,dc=aulalinux,dc=ice,dc=upc,dc=edu" -W Enter LDAP Password: dn:cn=admin,dc=dyndns,dc=org Result: Success (0)
Exemples
Comprovar la connexió a ldap des de la mateixa màquina
$ ldapwhoami -H ldap://localhost -D "cn=admin,dc=dominiescollit,dc=com" -X
Comprovar la connexió a un servidor ldap remot
$ ldapwhoami -H ldap://ipremota -D "cn=admin,dc=dominiescollit,dc=com" -X
Ldap. Seguretat
Desactivar accés anònim
Es pot desactivar l'accés anònim amb l'opció:
disallow bind_anon
Que s'ha de posar al fitxer slapd.conf.
Afegir camps a la llista de camps que no es poden ensenyar amb una connexió anònima
Per exemple, si emmagatzemem usuaris Samba ens interessara no mostrar els hash de Windows:
Cal canviar el access a:
to attrs=userPassword,shadowLastChange,sambaNTPassword,sambaLMPassword by dn="cn=admin,dc=iesebre,dc=com" write by dn="cn=adminGoSA,dc=iesebre,dc=com" write by anonymous auth by self write by * none
Amb la nova convfiguració és oldAccess:
{0}to attrs=userPassword,shadowLastChange,carLicense,email,facsimileTelephoneNumber,sambaNTPassword,sambaLMPassword by dn="cn=admin,dc=iesebre,dc=com" write by
dn="cn=adminGoSA,dc=iesebre,dc=com" write by anonymous auth by self write by * none
L'he modificat a olcDatabase{1}hdb,cn=config
Configuració del servidor
Hi han dos mètodes per accedir amb una connexió segura al servidor Ldap:
- Transport Layer Security (TLS) / Secure Socket Layer (SSL): TLS és el nom estàndard per a SSL. Aquest noms s'utilitzen indistintament.
- Ldap over SSL o Ldap Secured (LDAPS): És el sistema antic de connexió segura per Ldap. A la versió 2 de Ldap només havia aquest sistema. Actualment es considera obsolet. En aquest cas l'accés a Ldap és fa per un port diferent i s'utilitza l'esquema ldaps://.
El mètode TLS s'inicia amb una crida a TODO. No és necessita un port diferents per iniciar una connexió segura amb aquest mètode.
Per tant:
- ldap:// + StartTLS s'ha de fer sobre el port normal de ldap (389) i no s'ha de fer sobre el port de l'esquema ldaps:// (636)
- ldaps:// és l'accés a LDAPS i és fa la crida a un port especial (636).
$ cat /etc/services | grep ldap ldap 389/tcp # Lightweight Directory Access Protocol ldap 389/udp ldaps 636/tcp # LDAP over SSL ldaps 636/udp
Creació del certificat
$ sudo apt-get install openssl $ sudo mkdir -p /etc/ldap/ssl $ cd /etc/ldap/ssl $ sudo openssl req -new -x509 -nodes -out server.pem -keyout server.pem -days 365
Si us fixeu estem generant un certificat (fitxer server.pem) autosignat (ell mateix és la clau amb la que signem).
Configuració amb el nou sistema de configuració (OpenLdap 2.3>) I
There are various tutorials around the net telling how to make self-signed certificates using openssl. Googling reveals quite a few problems with using self-signed certificates created with openssl with debian’s and ubuntu’s slapd that uses gnutls. For this example I’ll use the certtool that comes with the gnutls-bin. The goal here is to create CA (ca.edu.example.org) and sign the server key with the CA. The client can then use the CA certificate to check the validity of the server key (ldap.edu.example.org) that is used by the slapd daemon.
Instal·lació de gnutls-bin:
$ sudo apt-get install gnutls-bin
Creem una carpeta per tal de guardar els certificats temporalment:
$ cd $ mkdir certificatstmp $ cd certificatstmp
Utilitzem l'eina certool per crear una clau i l'autosignem:
$ certtool --generate-privkey --outfile slapd-ca-key.pem $ certtool --generate-self-signed --load-privkey slapd-ca-key.pem --outfile slapd-ca-cert.pem
Poseu dades similars a:
Common name: ca.edu.example.org The certificate will expire in (days): 3650 <--- 10 anys Does the certificate belong to an authority? (y/N): y Path length constraint (decimal, -1 for no constraint): -1 Will the certificate be used to sign other certificates? (y/N): y
Un exemple complet:
Generating a self signed certificate... Please enter the details of the certificate's distinguished name. Just press enter to ignore a field. Country name (2 chars): ES Organization name: Institut de l'Ebre Organizational unit name: Manteniment d'Informàtica Locality name: Tortosa State or province name: Tarragona Common name: ca.iesebre.com UID: This field should not be used in new certificates. E-mail: Enter the certificate's serial number in decimal (default: 1275569434):
Activation/Expiration time. 3650
Extensions. Does the certificate belong to an authority? (y/N): y Path length constraint (decimal, -1 for no constraint): Is this a TLS web client certificate? (y/N): Is this also a TLS web server certificate? (y/N): Enter the e-mail of the subject of the certificate: Will the certificate be used to sign other certificates? (y/N): y Will the certificate be used to sign CRLs? (y/N): Will the certificate be used to sign code? (y/N): Will the certificate be used to sign OCSP requests? (y/N): Will the certificate be used for time stamping? (y/N): Enter the URI of the CRL distribution point: X.509 Certificate Information:
Ara cal crear la clau del servidor i el certificat:
$ certtool --generate-privkey --outfile slapd-server.key $ certtool --generate-certificate --load-privkey slapd-server.key --outfile slapd-server.crt --load-ca-certificate slapd-ca-cert.pem \ --load-ca-privkey slapd-ca-key.pem
El common name ha de ser ldap.edu.example.org per al certificat de slapd, o el que és el mateix ha de coincidi el nom de màquina que utilitzeu per fer la connexió amb el que apareix al certificat:
Common name: ldap.edu.example.org The certificate will expire in (days): 3650 Will the certificate be used for signing (required for TLS)? (y/N): y Will the certificate be used for encryption (not required for TLS)? (y/N): y
Els fitxers slapd-ca-cert.pem i slapd-server.{crt|key} els copiem a /etc/ssl/certs/:
$ sudo install -D -o openldap -g openldap -m 600 slapd-server.crt /etc/ssl/certs/slapd-server.crt $ sudo install -D -o openldap -g openldap -m 600 slapd-server.key /etc/ssl/certs/slapd-server.key
Ara cal crear un fitxer ldif amb la configuració per a cn=config:
$ sudo joe configLdapTLS.ssh
El contingut del fitxer ha de ser:
#!/bin/sh ldapmodify -Y EXTERNAL -H ldapi:/// << EOF dn: cn=config add: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/ssl/certs/slapd-ca-cert.pem - add: olcTLSCertificateFile olcTLSCertificateFile: /etc/ssl/certs/slapd-server.crt - add: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ssl/certs/slapd-server.key EOF
Feu-lo executable i executeu-lo:
$ sudo chmod +x configLdapTLS.ssh $ sudo ./configLdapTLS.ssh
Al client copieu el fitxer ca-cert.pem a /etc/ldap/ssl:
$ sudo install -o root -g root -m 644 slapd-ca-cert.pem /etc/ssl/certs/slapd-ca-cert.pem
I afegiu el següent a /etc/ldap/ldap.conf:
URI ldap://ldap.edu.example.org/ TLS_CACERT /etc/ssl/certs/slapd-ca-cert.pem
Per comprovar que funciona el TLS executeu:
ldapsearch -x -h ldap.edu.example.org -ZZ -b dc=edu,dc=example,dc=org
On -ZZ segons el manual és qui indica que la connexió ha de ser segura:
-Z[Z] Issue StartTLS (Transport Layer Security) extended operation. If you use -ZZ, the command will require the operation to be successful.
Un exemple de connexió correcta:
$ sudo ldapsearch -x -H ldap://ldap.iesebre.com -ZZ -b dc=iesebre,dc=com # extended LDIF # # LDAPv3 # base <dc=iesebre,dc=com> with scope subtree # filter: (objectclass=*) # requesting: ALL # # iesebre.com dn: dc=iesebre,dc=com objectClass: dcObject objectClass: organization o: iesebre.com dc: iesebre description: Arrel LDAP
En canvi:
$ sudo ldapsearch -x -H ldap://localhost -ZZ -b dc=iesebre,dc=com ldap_start_tls: Connect error (-11) additional info: TLS: hostname does not match CN in peer certificate
Tot i que al fitxer /etc/hosts de la màquina on s'executa l'ordre (client LDAP i servidor al mateix temps):
$ cat /etc/hosts 127.0.0.1 localhost 127.0.1.1 alumnat.iesebre.com alumnat 127.0.1.1 ldap.iesebre.com ldap ...
També és pot evitar l'error amb:
TLS_REQCERT never
Al fitxer /etc/ldap/ldap.conf.
Recursos:
Configuració amb el nou sistema de configuració (OpenLdap 2.3>) II
Consulteu la secció TLS ans SSL de:
https://help.ubuntu.com/9.10/serverguide/C/openldap-server.html
Per tal que les comunicacions siguin xifrades hem d'utilitzar TLS i SSL.
Primer creeu o obtingueu els certificats. Consulteu l'apartat anterior.
Abans posàvem al fitxer de configuració:
TLSCACertificateFile /etc/ldap/ssl/server.pem TLSCertificateFile /etc/ldap/ssl/server.pem TLSCertificateKeyFile /etc/ldap/ssl/server.pem
Ara cal canviar el DIT de configuració, on els paràmetres es diuen igual afegint olc com a prefix:
$ sudo joe ssl.ldif dn: cn=config #add: olcTLSCACertificateFile #olcTLSCACertificateFile: /etc/ldap/ssl/server.pem add: olcTLSCertificateFile olcTLSCertificateFile: /etc/ldap/ssl/server.pem add: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ldap/ssl/server.pem
IMPORTANT: Si teniu un certificat autosignat no afegiu olcTLSCACertificateFile ja que provoca que GnuTLS falli... Fixeu-vos que està comentat!
Per canviar la configuració executeu:
$ sudo ldapmodify -x -D cn=admin,cn=config -W < ssl.ldif Enter LDAP Password:
modifying entry "cn=config"
On els path són els que corresponen al vostre cas, segons on hàgiu guardat el certificat.
Ara cal editar el fitxer /etc/default/slapd:
$ sudo joe /etc/default/slapd
I descomentar SLAPD_SERVICES i posar:
SLAPD_SERVICES="ldap:/// ldapi:/// ldaps:///"
Cal assegurar-se que l'usuari que corre el servidor (openldap) té accés al certificat:
Comprovar!!!
$ sudo adduser openldap ssl-cert $ sudo chgrp ssl-cert /etc/ssl/private/server.key $ sudo chmod g+r /etc/ssl/private/server.key
Finalment cal tornar a inicar slapd:
$ sudo /etc/init.d/slapd restart
Configuració amb el nou sistema de configuració (OpenLdap 2.3>)
Configurem el servidor Ldap
$ sudo joe /etc/ldap/slapd.conf
afegint les línies:
TLSCACertificateFile /etc/ldap/ssl/server.pem TLSCertificateFile /etc/ldap/ssl/server.pem TLSCertificateKeyFile /etc/ldap/ssl/server.pem
Com que es tracta d'un certificat autosignat els paràmetres TLSCACertificateFile,TLSCertificateFile i TLSCertificateKeyFile coincideixen.
Tornem a iniciar el servidor de ldap:
$ sudo /etc/init.d/slapd restart
Cal tenir en compte el paràmetre:
TLSVerifyClient
Que ens permet indicar si volem que els clients s'identifiquin o no amb certificats.
per comprovar que funciona podeu executar:
$ sudo openssl s_client -connect localhost:636 -showcerts
o
$ ldapwhoami -H ldaps://localhost -x -ZZ -W
També podeu comprovar la connexió amb Apache Directory Studio.
Si teniu errors als connectar comproveu si teniu el paràmetre TLS_REQCERT never al fitxer de configuració del client:
$ sudo joe /etc/ldap/ldap.conf ... TLS_REQCERT never
Recursos:
- http://www.bayour.com/LDAPv3-HOWTO.html#4.5.4.Testing%20OpenLDAP%20v2|outline
- http://osl.ull.es/node/55
- http://www.openldap.org/faq/data/cache/185.html
Activar el port 636
Es pot fer utilitzar opcions al executar el servidor Ldap. Editeu el fitxer /etc/default/slapd:
$ sudo joe /etc/default/slapd
I descomenteu la línia:
#SLAPD_SERVICES="ldap://127.0.0.1:389/ ldaps:/// ldapi:///"
i poseu
SLAPD_SERVICES="ldap:/// ldaps:///"
I reinicieu el servidor:
$ sudo /etc/init.d/slapd restart
Pode comprovar que funcionen els dos ports:
$ sudo nmap localhost | grep ldap 389/tcp open ldap 636/tcp open ldapssl
I provar connexions amb els dos mètodes:
Port 389:
$ ldapwhoami -H ldap://localhost -x -W Enter LDAP Password: dn:cn=admin,dc=dyndns,dc=org Result: Success (0)
o
Port 636:
$ ldapwhoami -H ldaps://localhost -x -W Enter LDAP Password: dn:cn=admin,dc=dyndns,dc=org Result: Success (0)
Connexió a Ldap amb connexió encriptada
Per consultar el certificat de ldaps:
$ openssl s_client -connect localhost:636 -showcerts
El port com es pot veure és el 636.
Si en canvi volem consultar el port del Ldap + TLS (versió 3):
$ openssl s_client -connect localhost:389 -showcerts
Per utilitzar segur es pot utilitzar -H (només si el servidor utilitza Ldaps - port 636):
ldapadd -H ldaps://10.0.2.2 -x -D "cn=admin,ou=People,dc=skole,dc=skolelinux,dc=no" -W -f ./wong.ldif
Per a fer la connexió amb ldap + TLS cal utilitzar la opció -ZZ:
$ sudo ldapwhoami -x -ZZ anonymous Result: Success (0)
Errors amb SSL
Certificate verify failed
Si obtenim un error com:
$ ldapsearch -x -b "" -s base -LLL -ZZ supportedSASLMechanisms
ldap_start_tls: Connect error (-11)
additional info: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
Aquest error succeïx per que es fa una comprovació estricta del certificat (el certificat i la URL han de coincidir). Per evitar-ho podem afegir al fitxer ldap.conf:
TLS_REQCERT never
o
TLS_REQCERT allow
Recursos:
SASL
Podem comprovar el suport de SASL del nostre servidor Ldap amb la comanda:
$ ldapsearch -h localhost -p 389 -x -b "" -s base -LLL supportedSASLMechanisms
Resol·lució de problemes
main: TLS init def ctx failed: -1
Integració de Moodle amb ldap
Consulteu l'article sobre Moodle l'apartat http://acacha.dyndns.org/mediawiki/index.php/Moodle#Integraci.C3.B3_amb_ldap_.28skolelinux.29.
Enable Logging
Al fitxer /etc/ldap/slapd.conf hi ha un paràmetre loglevel que defineix el nivell de log. es pot obtenir info sobre aquesta paràmetre amb:
man slapd.conf
Per defecte, ldap volca els logs al fitxer /var/log/syslog. podem consultar els logs que cprresponen a ldap amb:
sudo tail -f /var/log/syslog | grep slapd
O es pot configurarel fitxer /etc/syslog per volcar elslogs de ldap a un fitxer específic.
loglevel
-1 0xFFFF enable all logging 0 0x0000 - logging inhibited - no logging occurs including critical errors. Not recommended. 1 0x1 acl trace function calls 2 0x2 packets debug packet handling 4 0x4 args heavy trace debugging 8 0x8 conns connection management 16 0x10 BER print out packets sent and received 32 0x20 filter search filter processing 64 0x40 config configuration file processing 128 0x80 ACL access control list processing 256 0x100 stats stats log connections/operations/results 512 0x200 stats2 stats log entries sent 1024 0x400 shell print communication with shell backends 2048 0x800 parse print entry parsing debugging 4096 0x1000 cache caching (unused)g 8192 0x2000 index indexing (unused) 16384 0x4000 sync print syncrepl (replica) logging 32768 0x8000 none A misnomer - it will log message that are not categorized including curial messages
Log level cn=nconfig
Esquemes
Convertir esquemes a LDIF per tal de treballar amb el nou format configuració
Podeu utilitzar slaptest. Un exemple de guió de bash:
# cat convert_schemas.sh mkdir ldif_result slaptest -f schema_convert.conf -F ldif_result
Oco amb els DN dels objectes creats! Un script com el següent us els pots canviar tots utilitzant sed:
cat ldif_result/cn=config/cn=schema/cn=*samba.ldif | \
egrep -v structuralObjectClass\|entryUUID\|creatorsName | \
egrep -v createTimestamp\|entryCSN\|modifiersName\|modifyTimestamp | \
sed 's/dn: cn={.}samba/dn: cn=samba,cn=schema,cn=config/g' | \
sed 's/{.}samba/samba/' > samba.ldif
cat ldif_result/cn=config/cn=schema/cn=*autofs.ldif | \
egrep -v structuralObjectClass\|entryUUID\|creatorsName | \
egrep -v createTimestamp\|entryCSN\|modifiersName\|modifyTimestamp | \
sed 's/dn: cn={.}autofs/dn: cn=autofs,cn=schema,cn=config/g' | \
sed 's/{.}autofs/autofs/' > autofs.ldif
cat ldif_result/cn=config/cn=schema/cn=*kerberos.ldif | \
egrep -v structuralObjectClass\|entryUUID\|creatorsName | \
egrep -v createTimestamp\|entryCSN\|modifiersName\|modifyTimestamp | \
sed 's/dn: cn={.}kerberos/dn: cn=kerberos,cn=schema,cn=config/g' | \
sed 's/{.}kerberos/kerberos/' > kerberos.ldif
Com afegir esquema IrisPerson
Podeu trobar l'esquema passat a ldif a:
http://acacha.org/~sergi/cn=%7b13%7diris.ldif
El podeu descarregar amb:
$ wget http://acacha.org/~sergi/cn=%7b13%7diris.ldif
$ sudo cp cn\=\{3\}iris.ldif /etc/ldap/slapd.d/cn\=config/cn\=schema/cn\=\{13\}iris.ldif $ sudo chown openldap:openldap /etc/ldap/slapd.d/cn\=config/cn\=schema/cn\=\{13\}iris.ldif $ sudo /etc/init.d/slapd restart
Resol·lució de problemes
Problemes amb esquemes de Gosa
Consulteu GoSA
Comptes d'usuari a Ldap
POSIX Account
posixAccount ObjectClasses:
sambaSamAccount
Samba-3.0 proporciona un esquema ldap per emmagatzemar comptes de Samba. El podeu trobar al fitxer
/usr/share/doc/samba-doc/examples/LDAP/samba.schema
Del paquet de documentació de Samba. Per instal·lar-lo:
$ sudo apt-get install samba-doc
Es possible que l'hageu de descomprimir:
$ sudo gunzip /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz
El fitxer és el següent:
ObjectClass (1.3.6.1.4.1.7165.2.2.6 NAME 'sambaSamAccount' SUP top AUXILIARY
DESC 'Samba-3.0 Auxiliary SAM Account'
MUST ( uid $ sambaSID )
MAY ( cn $ sambaLMPassword $ sambaNTPassword $ sambaPwdLastSet $
sambaLogonTime $ sambaLogoffTime $ sambaKickoffTime $
sambaPwdCanChange $ sambaPwdMustChange $ sambaAcctFlags $
displayName $ sambaHomePath $ sambaHomeDrive $ sambaLogonScript $
sambaProfilePath $ description $ sambaUserWorkstations $
sambaPrimaryGroupSID $ sambaDomainName ))
Aquest és un objecte auxiliar i es pot utilitzar amb combinació amb altres esquemes com posixAccount. De fet per tal d'emmagatzemar tant la informació de Unix com de Samba és necessari utilitzar-los de forma combinada.
- User account: Inclou la informació d'una compte de domini d'usuari Windows NT/Samba. Pode trobar més informació sobre comptes d'usuari Samba a l'article sobre Samba i concretament consulten les comandes pdbedit i [[ net]]
- Machine account: No es distingeix en res de l'anterior excepte que acaba amb el caràcter $.
ACLs i usuaris
Vegeu també slapacl
Nova configuració "cn=config"
Manual:
$ man slapd.access
Sintaxi curta:
olcAccess: to <what> [ by <who> <accesslevel> <control> ]+
On:
Què? (to)
Indica a que controlem l'accés. Es poden indicar objectes de l'arbre utilitzant DN i scopes. Hi ha 3 formats:
to * --> Qualsevol objecte de l'arbre to dn[.<basic-style>]=<regex> --> Especificar un filtre o condició to dn.<scope-style>=<DN> --> Des de qualsevol objecte de l'arbre i especificant un scope. to filter=<ldap filter>
Hi ha 4 opcions d'scope:
- base: només coincideix amb l'entrada (DN) especificada.
- one: coincideix amb les entrades les quals el pare sigui el DN especificat.
- subtree: coincideix amb totes les entrades que estiguin al subarbre especificat pel DN (incloent el DN)
- children: coincideix amb totes les entrades sota el DN (no inclou el DN especificat)
Per exemple, amb:
0: o=suffix
1: cn=Manager,o=suffix
2: ou=people,o=suffix
3: uid=kdz,ou=people,o=suffix
4: cn=addresses,uid=kdz,ou=people,o=suffix
5: uid=hyc,ou=people,o=suffix
Aleshores:
dn.base="ou=people,o=suffix" coincideix amb 2;
dn.one="ou=people,o=suffix" coincideix amb 3, i 5;
dn.subtree="ou=people,o=suffix" coincideix amb 2, 3, 4, i 5; i
dn.children="ou=people,o=suffix" coincideix amb 3, 4, i 5.
Exemples de filtres:
to filter=(objectClass=person) to dn.one="ou=people,o=suffix" filter=(objectClass=person) ---> Sistema mixt filtre i dn+scope
Qui? (who):
Taula (Access Entity Identifiers):
* Tothom, incloent usuaris anònims i autenticats anonymous Usuaris anònims (no autenticats) users Usuaris autenticats self L'usuari associat a la entrada objectiu dn[.<basic-style>]=<regex> Usuaris que compleixen una expressió regular dn.<scope-style>=<DN> Usuaris dins d'un scope indicat a partir d'un DN concret.
Com?
Nivells d'accés:
none =0 sense accés auth =x només pot autenticar (bind) (s'utilitza per exemple per utilitza paraules de pas --> només es pot accedir a elles si es per fer una autenticació) compare =cx a més pot comparar search =scx a més pot aplicar filtres de cerca read =rscx a més pot llegir els resultats d'una cerca write =wrscx a més pot modificar o renombrar una entrada
Ordre d'aplicació:
Slapd s'atura a la primera entrada on el selector <what> coincideixi.
Exemples:
Permisos a tothom per a llegir-ho tot:
olcAccess: to * by * read
Un altre exemple:
{0}to attrs=userPassword,shadowLastChange,sambaNTPassword,sambaLMPassword by dn="cn=admin,dc=iesebre,dc=com" write by anonymous auth by self write by * none
A l'exemple anterior només té accés complet (escriptura) als atributs paraules de pas (de Linux i SAmba a l'exemple) l'usuari admin, els usuaris anònims només poden utilitzar per autenticar i el propi usuari (self) pot també modificar-se a si mateix. La resta no tenen cap mena d'accés.
NOTA: Al rootdn no se li apliquen les ACL
Exemple més complex:
olcAccess: to *
by self write
by anonymous auth
by * read
Permet a l'usuari modificar la seva pròpia entrada (self), els usuaris anonims es poden "autenticar" a aquestes entrades i permet a tots els altres llegir aquestes entrades.
Sintaxi Completa:
olcAccess: <access directive>
<access directive> ::= to <what>
[by <who> <access> <control>]+
<what> ::= * |
[dn[.<basic-style>]=<regex> | dn.<scope-style>=<DN>]
[filter=<ldapfilter>] [attrs=<attrlist>]
<basic-style> ::= regex | exact
<scope-style> ::= base | one | subtree | children
<attrlist> ::= <attr> [val[.<basic-style>]=<regex>] | <attr> , <attrlist>
<attr> ::= <attrname> | entry | children
<who> ::= * | [anonymous | users | self
| dn[.<basic-style>]=<regex> | dn.<scope-style>=<DN>]
[dnattr=<attrname>]
[group[/<objectclass>[/<attrname>][.<basic-style>]]=<regex>]
[peername[.<basic-style>]=<regex>]
[sockname[.<basic-style>]=<regex>]
[domain[.<basic-style>]=<regex>]
[sockurl[.<basic-style>]=<regex>]
[set=<setspec>]
[aci=<attrname>]
<access> ::= [self]{<level>|<priv>}
<level> ::= none | auth | compare | search | read | write
<priv> ::= {=|+|-}{w|r|s|c|x|0}+
<control> ::= [stop | continue | break]
This directive grants access (specified by <accesslevel>) to a set of entries and/or attributes (specified by <what>) by one or more requesters (specified by <who>). See the Access Control section of this chapter for a summary of basic usage.
Note: If no olcAccess directives are specified, the default access control policy, to * by * read, allows all users (both authenticated and anonymous) read access.
Note: Access controls defined in the frontend are appended to all other databases' controls.
Recursos:
Rendiment
Indexs
Vegeu també slapindex
Els índexs permeten accelerar les consultes: per exemple si busquem sovint a la base de dades pel camp email, aleshores pot ser una bona idea crear un index per aquest camp. La sintaxi per definir índexs és:
index attrlist | default indices
NOTA: A la nova configuració (cn=config) el atribut és olcDbIndex
On indices:
# indices = [pres [,approx] [,eq] [,sub] [,special]]
- attrlist: un sol atribut o una llista d'atributs (separats per comes) dels quals es vol fer un index. O s'indica una llista o es posa default
- default: Si no s'especifica llista es pot posar default per definir valors per defecte. Els valors per defecte s'utilitzen en qualsevol línia de més endavant que no indiqui indices (per tant "indices" pot ser opcional). S'ha de definir abans d'utilitzar-lo. Es pot tornara a declarar i aleshores s'utilitza per a les entrades següents.
- indices:
- pres (present): tipus d'índex si es fan cerques del tipus 'objectclass=person' o 'attribute=mail'
- approx: útil per a cerques de l'estil "sn~=person" (camp similar a)
- eq (equality): eq should be used if searches of the form 'sn=smith' will be used i.e no wildcards are included (uses the EQUALITY rule only).
- sub: sub should be used if use searches of the form 'sn=sm*' i.e wildcards are included (uses the SUBSTR rule). This rule may be enhanced by a using subinitial (optimised for 'sn=s*'), subany (optimised for 'sn=*n*') or subfinal (optimised for 'sn=*th'). One or more sub parameters may be included.
- special: special may be either nolang or nosubtypes which are related to subtypes.
Extret de http://www.openldap.org/doc/admin24/slapdconf2.html, sobre la nova configuració
5.2.6.7. olcDbIndex: {<attrlist> | default} [pres,eq,approx,sub,none]
This directive specifies the indices to maintain for the given attribute. If only an <attrlist> is given, the default indices are maintained. The index keywords correspond
to the common types of matches that may be used in an LDAP search filter.
Example:
olcDbIndex: default pres,eq
olcDbIndex: uid
olcDbIndex: cn,sn pres,eq,sub
olcDbIndex: objectClass eq
The first line sets the default set of indices to maintain to present and equality. The second line causes the default (pres,eq) set of indices to be maintained for the uid
attribute type. The third line causes present, equality, and substring indices to be maintained for cn and sn attribute types. The fourth line causes an equality index for
the objectClass attribute type.
There is no index keyword for inequality matches. Generally these matches do not use an index. However, some attributes do support indexing for inequality matches, based on
the equality index.
A substring index can be more explicitly specified as subinitial, subany, or subfinal, corresponding to the three possible components of a substring match filter. A
subinitial index only indexes substrings that appear at the beginning of an attribute value. A subfinal index only indexes substrings that appear at the end of an attribute
value, while subany indexes substrings that occur anywhere in a value.
Note that by default, setting an index for an attribute also affects every subtype of that attribute. E.g., setting an equality index on the name attribute causes cn, sn,
and every other attribute that inherits from name to be indexed.
By default, no indices are maintained. It is generally advised that minimally an equality index upon objectClass be maintained.
olcDbindex: objectClass eq
Additional indices should be configured corresponding to the most common searches that are used on the database. Presence indexing should not be configured for an attribute
unless the attribute occurs very rarely in the database, and presence searches on the attribute occur very frequently during normal use of the directory. Most applications
don't use presence searches, so usually presence indexing is not very useful.
If this setting is changed while slapd is running, an internal task will be run to generate the changed index data. All server operations can continue as normal while the
indexer does its work. If slapd is stopped before the index task completes, indexing will have to be manually completed using the slapindex tool.
Missatges al fitxers de log: bdb_equality_candidates
$ sudo cat /var/log/syslog | grep slapd ... Jul 8 16:09:08 alumnat slapd[1938]: <= bdb_equality_candidates: (gidNumber) not indexed
Proposa crear un index. Si el creeu aleshores ja no us sortirà el missatge.
Configuració de Ldap per suportar Samba
Cal instal·lar el paquet samba-doc
$ sudo apt-get install samba-doc
Descomprimir l'esquema:
$ sudo gunzip /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz
I després copiar l'esquema Ldap de Samba
$ sudo cp /usr/share/doc/samba-doc/examples/LDAP/samba.schema /etc/ldap/schema/
Després cal afegir el nou esquema al fitxer /etc/ldap/slapd.conf i afegir les línies:
$ sudo joe /etc/ldap/slapd.conf
## needed for sambaSamAccount include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/inetorgperson.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/samba.schema
Segurament només us caldrà afegir la última línia però tota la resta són necessàries per tal que l'esquema de Samba funcioni correctament.
A part de l'esquema de Samba cal assegurar-se de tenir els esquemes cosine.schema, inetorgperson.schema i nis.schema.
També es recomanat crear uns index per fer més ràpides les cerques de comptes Samba. Això es fa afegint:
# Indices to maintain ## required by OpenLDAP index objectclass eq index cn pres,sub,eq index sn pres,sub,eq ## required to support pdb_getsampwnam index uid pres,sub,eq ## required to support pdb_getsambapwrid() index displayName pres,sub,eq ## uncomment these if you are storing posixAccount and ## posixGroup entries in the directory as well ##index uidNumber eq ##index gidNumber eq ##index memberUid eq index sambaSID eq index sambaPrimaryGroupSID eq index sambaDomainName eq index default sub
Segurament la línia :
index objectClass eq
No us caldrà afegir-la (ja ve per defecte).
I creem els nous index executant:
$ sudo /etc/init.d/slapd stop $ sudo slapindex -f /etc/ldap/slapd.conf $ sudo /etc/init.d/slapd start
Us pot donar l'error:
WARNING! Runnig as root! There's a fair chance slapd will fail to start. Check file permissions!
Si consulteu la base de dades de Ldap veureu:
$ sudo ls -la /var/lib/ldap -rw------- 1 root root 8192 2008-04-05 21:04 gidNumber.bdb
Que pertanyen a root. Openldap s'executa amb usuari anomenat openldap (aquesta és la configuració per defecte però es pot modificar a /etc/default/slapd).
Torneu a establir els permisos adequats als fitxers d'aquesta carpeta:
$ sudo chown openldap:openldap -R /var/lib/ldap
Si executeu slapindex amb el paràmetre -v veureu que els índexs es creen correctament.
Ara cal crear els contenidors (nodes del arbre) a on volem guardar les comptes. Un exemple de com fer-ho el trobeu al següent fitxer LDIF:
NOTA: En negreta teniu els valors que s'han de modificar d'aquest fitxer per adaptar-lo al vostre basedn (arrel del servidor Ldap). Suposem que el basedn ja esta creat (a l'exemple: dc=aulalinux,dc=ice,dc=upc,dc=edu)
# Organization for Samba Base # Setting up container for Users OU dn: ou=People,dc=aulalinux,dc=ice,dc=upc,dc=edu objectclass: top objectclass: organizationalUnit ou: People # Setting up container for groups dn: ou=Groups,dc=aulalinux,dc=ice,dc=upc,dc=edu objectclass: top objectclass: organizationalUnit ou: Groups # Setting up container for computers dn: ou=Computers,dc=aulalinux,dc=ice,dc=upc,dc=edu objectclass: top objectclass: organizationalUnit ou: Computers
Per executar aquest ldiff podem parar el servidor ldap i utilitzar slapadd:
$ sudo /etc/init.d/slapd stop $ slapadd -v -l initldap.dif $ sudo /etc/init.d/slapd start
O podem utilitzar la comanda ldapadd:
$ sudo ldapadd -f initldap.dif
Abans de poder accedir al servidor Ldap des de Samba cal executar:
$ sudo smbpasswd -w parauladepas
Un cop fet això cal tornar a iniciar OpenLdap:
$ sudo /etc/init.d/slapd restart
Recursos:
Eines
PADL. Conversió de NIS i Unix a Ldap
$ sudo apt-get install conversiontools
Els scripts de conversió es troben a la carpeta:
/usr/share/doc/migrationtool
Té un scripts per passar-ho tot tant en mode offline (Ldap apagat) o en mode online:
$ cd /usr/share/doc/migrationtool $ ./migrate_all_online.sh
Es poden migrar parts concretes. Per exemple:
$ ./migrate_protocols.pl /etc/protocols /home/cursice/protocols.ldif
I després utilitzar els fitxers ldif conjuntament amb la comanda ldapadd:
$ ldapadd -x -f /home/cursice/protocols.ldif -D "cn=admin,dc=aulalinux,dc=ice,dc=upc,dc=edu" -W
LdapScripts
Consulteu l'article LdapScripts.
Eines d'administració gràfiques
Phpldapadmin
Veieu l'article Phpldapadmin.
GQ
El gq és un paquets que és pot instalar amb apt
$apt-get install gq
Es molt recomanable tenir també instalar el paquet ldap-utils.
Un cop instalat l'executem amb
$sudo gq
Al menu File-->Preferences i la pestanya servers és poden afegir servidors. La info que cal introduir és la de l'apartat Característiques del servidor ldap a skolelinux
Egroupware
Integra phpldapadmin
Ldap Account Manager (LAM)
Consulteu l'article sobre LAM
Configuració
Ldap-Account-Manager té una secció de configuració a la qual podem accedir amb el password per defecte lam. Es molt important que per qüestions de seguretat el primer que hem de fer és canviar aquest password. Podem modificar la configuració de LAM amb el link LAM Configuration o editant el fitxer:
/etc/ldap-account-manager/config.php
Cal tenir en compte que la contrasenya es guarda en clar en aquest fitxer i que per tant cal controlar qui pot llegir aquest fitxer.
Un cop hem canviat la configuració principal de LAM, ara hem d'editar els perfils seguint l'enllaç Edit Server Profiles:
Aquí podeu canviar les característiques del servidor LDAP al que volem gestionar les comptes d'usuari. Hem d'escollir:
- La ip o el nom de màquina del servidor
- El base dn del servidor
- El llenguatge de la interfície de lam
Un altre cop la contrasenya per defecte és lam, i cal que la canvieu el més aviat possible.
NOTA: L'aplicació esta disponible en català i podem canviar l'interfície.
Recursos:
Webmin
Consulteu la secció Ldap Webmin de l'article sobre Webmin.
Gosa
Consulteu l'article sobre Gosa.
Apache Studio
Veieu l'article sobre Apache Directory Studio.
Altres eines
Aplicacions lliures “Ldap Aware”:
Multiplataforma:
- Ekiga (GnomeMeeting)
- Mozilla Thunderbird
- Novell Evolution
Linux
- KaddressBook
- gq
- kolab
Aplicacions Ldap d'administració client
- Apache Directory Studio
- Jxplorer
- LDAP Browser/Editor
- phpLDAPadmin
- SLAMD
- ldapadmin (lliure Windows)
Recursos:
- SADMS integration tool
- GOsa - GOnicus System Administrator
- AVA-SBS
- Linbox Directory Server
- IDEALX Management Console
- DirectControl for Samba
Recursos:
Exemple configuració servidor LDAP. Aula Linux
Consulteu l'article Exemple configuració servidor LDAP. Aula Linux.
Ldap i Thunderbird
Thunderbird pot treballar amb directoris de Ldap que facin de llibreta d'adreces.
Si volem passar els nostres contactes a un servidor Ldap primer els hauríem d'exportar:
A Thunderbird, dins la llibreta d'adreces podem exportar utilitzant el menú Eines/Exporta. El format a escollir ha de ser ldif.
Un cop tingueu un fitxer ldif amb tots els vostres contactes heu de carregar l'esquema de Thunderbird a OpenLdap
NOTA IMPORTANT: Cal tenir en compte que sembla ser que actualment no hi ha cap gestor de Correu que permeti mantenir els contactes d'un servidor Ldap. Lo únic que poden fer és obtenir la informació.
Recursos:
Equivalències entre paràmetres de servidors i paràmetres client
Sovint és típic confondre els atributs:
Recursos:
Configuració d'un client GNU/Linux per autenticar amb Ldap
Consulteu l'article Configuració d'un client GNU/Linux per autenticar amb Ldap.
libpam-ldap
Consulteu l'article libpam-ldap.
libnss-ldap
Consulteu l'article libnss-ldap.
PHP i Ldap
Consulteu PHP i Ldap.
Vegeu també
- Autenticació usuaris. LDAP, correu electrònic...
- Apache Directory Studio
- Gosa
- Zimbra?
- Ldap Account Manager
Troubleshooting
Com depurar, executar el servidor LDAP a mà en mode debug
Amb l'opció -d 16383:
# slapd -d 16383 -h 'ldap:/// ldapi:///' -g openldap -u openldap -F /etc/ldap/slapd.d/
Canviar la paraula de pas de rootdn
IMPORTANT: Amb les noves versions d'ubuntu no proveu de fer un dpkg-reconfigure slapd ja que us esborrarà la configuració que teniu i posarà la configuració per defecte que hi ha un cop s'acab d'instal·lar el servidor Ldap per primer cop
Es pot fer directament a ADS obtenint la paraula de pas xifrada amb ldappasswd.
No funcionen el paràmetres BINDDN al fitxer /etc/ldap/ldap.conf
Al manual del fitxer ldap.conf:
$ man ldap.conf
Diu:
Some options are user-only. Such options are ignored if present in the ldap.conf (or file specified by LDAPCONF).
Algunes opcions doncs no és poden utilitzar a /etc/ldap/ldap.conf i només es poden utilitzar als fitxer ~/ldaprc or ~/~ldaprc.
BINDN és un dels paràmetres que és user-only.
Error al final de dpkg-reconfigure slapd
Si al acabar d'executar sudo dpkg-reconfigure slapd obtenim el següent error
$ sudo dpkg-reconfigure slapd Stopping OpenLDAP: slapd. Moving old database directory to /var/backups: There are leftover files in /var/lib/ldap. This will probably break creating the initial directory. If that's the case please move away stuff in there and retry the configuration. ..............................
Després segurament tindrem problemes amb LDAP. Si volem reconfigurar el que hem de fer és feu una copia de la base de dades ldap (carpeta /var/lib/ldap) i abans d ereconfigurar esborrar la base de dades:
$ sudo rm -rf /var/lib/ldap/*
Al executar dpkg-reconfigure amb slapd cal fixar-se que al final no hi hagi cap problema. Les següents linies mostren una sortida de dpkg-reconfigure correcta:
$ sudo dpkg-reconfigure slapd Stopping OpenLDAP: slapd. Creating initial slapd configuration... done. Creating initial LDAP directory... done. Starting OpenLDAP: running BDB recovery, slapd.
ldap_bind: Confidentiality required (13) additional info: confidentiality required
Si executem una comanda com:
$ldapadd -x -h localhost -D "cn=admin" -W -f exemple.ldif
Enter LDAP Password:
ldap_bind: Confidentiality required (13)
additional info: confidentiality required
a un servidor segur obtenim un error. Cal posar el host com una url segura:
$ldapadd -x -H "ldaps://localhost" -D "cn=admin" -W -f exemple.ldif
Enter LDAP Password:
ldap_bind: Confidentiality required (13)
additional info: confidentiality required
Les consultes tornen un màxim de 500 registres
Cal canviar el paràmetre del servidor sizelimit (o amb la nova configuració: olcsizelimit).. L'he canviat accedint amb l'usuauri cn=admi,cn=config al servidor i modificant el attribute sizelimit a
DN: olcDatabase={-1}frontend,cn=config
syncrepl new superior not found
Executant slapd en mode debug:
$ sudo slapd -d 16383 -h 'ldap:/// ldapi:///' -g openldap -u openldap -F /etc/ldap/slapd.d/
...
hdb_modrdn: wr to children of entry ou=people,ou=curs 2,ou=desenvolupament i aplicació de projectes de construcció,ou=edificació i obra
civil,ou=alumnes,ou=all,dc=iesebre,dc=com OK
hdb_modrdn: parent dn=ou=people,ou=Curs 2,ou=Desenvolupament i aplicació de projectes de construcció,ou=Edificació i obra civil,ou=Alumnes,ou=All,dc=iesebre,dc=com
hdb_modrdn: new parent "ou=people,ou=Grup A,ou=Curs 2,ou=Desenvolupament i aplicació de projectes de construcció,ou=Edificació i obra civil,ou=Alumnes,ou=All,dc=iesebre,dc=com" requested...
bdb_dn2entry("ou=people,ou=grup a,ou=curs 2,ou=desenvolupament i aplicació de projectes de construcció,ou=edificació i obra civil,ou=alumnes,ou=all,dc=iesebre,dc=com")
=> hdb_dn2id("ou=people,ou=grup a,ou=curs 2,ou=desenvolupament i aplicació de projectes de construcció,ou=edificació i obra civil,ou=alumnes,ou=all,dc=iesebre,dc=com")
<= hdb_dn2id: get failed: DB_NOTFOUND: No matching key/data pair found (-30988)
hdb_modrdn: newSup(ndn=ou=people,ou=grup a,ou=curs 2,ou=desenvolupament i aplicació de projectes de construcció,ou=edificació i obra civil,ou=alumnes,ou=all,dc=iesebre,dc=com) not here!
send_ldap_result: conn=-1 op=0 p=3
send_ldap_result: err=32 matched="" text="new superior not found"
Solucionat a la versió 2.3.28:
OpenLDAP 2.3.28 Release
Fixed slapd syncrepl modrdn new superior (ITS#4695)
A Ubuntu 10.4 hi ha:
$ dpkg -l | grep slapd ii slapd 2.4.21-0ubuntu5 OpenLDAP server (slapd)
Recursos
- Padl PADL Software Pty Ltd
- Schema Design
- PowerPoint Schema Design
- http://www.fatofthelan.com/articles/articles.php?pid=24
- Ldap Account Manager Programari Open Source que utilitza la STSI
- Openldap
- Foros ldap español
- Openldap wikipedia
- Instalación i configuración de Openldap. Bulma
- NManual ldap Red Hat
- manual de ldapsearch
- Ldap linux how-to
- LDAP_commands_usage_examples(wiki)
- wiki ldap
- LDAP Maintenance
- LDAPv3 HOWTO
- Paranoid Penguin - Authenticate with LDAP, Part III
- Integración de redes con OpenLDAP, Samba, CUPS y PyKota
- http://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol












