Masové rozšíření výpočetní techniky přineslo problém: v rámci jedné organizace desítky různých systémů (operační, mailový, informační, VPN brána), každý drží svůj zdroj informací o objektech v síti - uživatelích, službách, (/etc/passwd, /etc/hosts, /etc/services, ...). Manuální synchronizace se může dostat svou náročností až na hranice realizovatelnosti, vzniká potřeba jednotného zdroje dat. Asi prvním masově používaným systémem byl YP/NIS:
|
RND: cn=Barbara Jensen
DN: cn=Barbara Jensen,ou=Sales,o=Acme,st=California,c=US c - country st - state o - organization ou - organizational unit cn - common name |
# LDIF zaznam pro Barbara Jensen dn: cn=Barbara Jensen,ou=Sales,o=Acme,st=California,c=US objectClass: inetOrgPerson telephoneNumber: 512 mail: jensen@acme.com
objectclass ( 1.1.2.2.2 NAME 'myPerson'
DESC 'my person'
SUP inetOrgPerson
MUST ( myUniqueName $ givenName )
MAY myPhoto )
attributeType ( 2.5.4.41 NAME 'name'
DESC 'name(s) associated with the object'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )
attributeType ( 2.5.4.3 NAME ( 'cn' 'commonName' )
DESC 'common name(s) assciated with the object'
SUP name )
$ ldapsearch -h localhost -x -s sub -D cn=leska,ou=ovt,o=lach -W -b o=LACH '(&(objectclass=inetOrgPerson)(cn=leska))' manager mail telephonenumber Enter LDAP Password: # extended LDIF # # LDAPv3 # basewith scope sub # filter: (&(objectclass=inetOrgPerson)(cn=leska)) # requesting: manager mail telephonenumber # # leska, ovt, LACH dn: cn=leska,ou=ovt,o=LACH manager: cn=Simecek,ou=ovt,o=LACH mail: Leska@lachema.cz telephonenumber: +420 541127-420 telephonenumber: +420 541127-513 # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1 $
www.ldap.org/etc/openldap/slapd.conf, detailní popis slapd.conf(5)
include /etc/openldap/schema/core.schema # LDAP schéma
loglevel acl trace # dobré pro odladění
database bdb
suffix "o=Acme,st=California,c=US" # kořen stromu
rootdn "cn=admin,ou=stuff,o=Acme,st=California,c=US" # superuživatel
rootpw {MD5}R7zlx09Yn0hn29V+nKn4CA== # šifrované heslo superuživatele, generované příkazem slappasswd -h {MD5}
# nastavení práv
# access to WHAT [ by WHO ACCESS CONTROL ]+
# authenticate, compare, read, search, write
access to attrs=userPassword,userPKCS12
by dn="cn=admin,ou=stuff,o=Acme,st=California,c=US" write
by anonymous auth
by self write
by * none
/etc/passwd, /etc/shadow
a /etc/group/etc/openldap/schema/rfc2307bis.schema
objectclass ( 1.3.6.1.1.1.2.0 NAME 'posixAccount' SUP top AUXILIARY
DESC 'Abstraction of an account with POSIX attributes'
MUST ( cn $ uid $ uidNumber $ gidNumber $ homeDirectory )
MAY ( userPassword $ loginShell $ gecos $
description ) )
objectclass ( 1.3.6.1.1.1.2.1 NAME 'shadowAccount' SUP top AUXILIARY
DESC 'Additional attributes for shadow passwords'
MUST uid
MAY ( userPassword $ description $
shadowLastChange $ shadowMin $ shadowMax $
shadowWarning $ shadowInactive $
shadowExpire $ shadowFlag ) )
objectclass ( 1.3.6.1.1.1.2.2 NAME 'posixGroup' SUP top AUXILIARY
DESC 'Abstraction of a group of accounts'
MUST gidNumber
MAY ( userPassword $ memberUid $
description ) )
ldapadd(1) přidáte do databáze
/etc/ldap.conf, ldap.conf(5):
host 127.0.0.1 # adresa LDAP serveru, lze zadat vícero serverů pro fail-over base o=Acme,st=California,c=US # kořen LDAP stromu binddn cn=proxyuser,ou=stuff,o=Acme,st=California,c=US # proxy uživatel pokud není povolen anonymní bind bindpw heslo # jeho heslo scope sub # prohledávat celý LDAP strom pam_password exop # druh LDAP serveru kvůli změně hesla nss_map_attribute uniqueMember member # mapováni jmen atributů ssl start_tls # použít ssl a jak
/etc/passwd), hlavně kvůli mapování loginu na uidnss_ldap/etc/nsswitch.conf:
passwd: files ldap shadow: files ldap group: files ldap
$ id leska uid=604(leska) gid=601(unixuser) groups=601(unixuser),603(intranet) $
pam_ldap/etc/pam.d:
#soubor /etc/pam.d/common-auth:
auth sufficient pam_ldap.so
auth sufficient pam_unix.so nullok_secure use_first_pass
#soubor /etc/pam.d/common-account
account sufficient pam_ldap.so
account sufficient pam_unix.so use_first_pass
#soubor /etc/pam.d/common-password
password sufficient pam_ldap.so
password sufficient pam_unix.so use_authok nullok obscure min=6 max=16 md5
#/etc/pam.d/common-session
session required pam_ldap.so
session required pam_unix.so
session required pam_mkhomedir.so skel=/etc/skel/ umask=077
nscd/etc/nscd.conf:
# Ukázka pro passwd, analogicky pro group, hosts enable-cache passwd yes positive-time-to-live passwd 600 negative-time-to-live passwd 20 suggested-size passwd 211 check-files passwd yes persistent passwd yes shared passwd yes max-db-size passwd 33554432 auto-propagate passwd yes
# soubor /etc/ldap/slapd.conf: master: replica uri=ldap://slave.example.com binddn="cn=Manager,dc=lab,dc=fi,dc=muni,dc=cz" bindmethod=simple credentials=secret replogfile /usr/local/var/ldap.replog slave: updatedn cn=Manager,dc=lab,dc=fi,dc=muni,dc=cz updateref ldap://master.example.com