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