linux:ldap

Przykłady konfiguracji usług do pracy z LDAP

Poniżej znajdują się przykładowe pliki konfiguracyjne niektórych usług podłączonych do LDAP omawianych na kursie.

Konfiguracja serwera OpenLDAP

  • Plik konfiguracyjny: slapd.conf
  • Konfiguracja saslauthd (pamiętaj o dopisaniu pwcheck_method: saslauthd do /etc/sasl/slapd.conf i opcji -a ldap do saslauthd):
    saslauthd.conf
    ldap_servers: ldapi://
    ldap_bind_dn: uid=saslauthd,ou=System,dc=example,dc=com
    ldap_password: haslo
    ldap_search_base: dc=example,dc=com
    ldap_mech: SIMPLE
    ldap_auth_method: bind
  • Konfiguracja narzędzi klienckich LDAP (ldapsearch, ldapvi itp) - /etc/ldap/ldap.conf:
    ldap.conf
    BASE	dc=example,dc=com
    URI	ldapi://
    TLS_CACERTDIR	/etc/ssl/certs/
    TLS_REQCERT never

Konfiguracja kont shellowych/systemowych w LDAP

  • Konfiguracja modułu pam_ldap i nss_ldap (może się nazywać również pam_ldap.conf, nss_ldap.conf - zależnie od dystrybucji):
    ldap.conf
    uri ldapi://
    binddn uid=nssproxy,ou=System,dc=example,dc=com
    bindpw secret
    rootbinddn uid=remoteroot,dc=System,dc=example,dc=com
    
    base dc=example,dc=com
    scope sub
    
    pam_password exop
  • Konfiguracja nslcd (może też się nazywać nss-ldapd.conf):
    nslcd.conf
    uid nslcd
    gid nslcd
    
    uri ldapi://
    base dc=example,dc=com
    ldap_version 3
    
    binddn uid=nssproxy,ou=System,dc=example,dc=com
    bindpw secret
    
    scope sub

Konfiguracja poczty oparta o LDAP

Dovecot

dovecot.conf
# (...)
auth default {
  mechanisms = plain login
  passdb ldap {
    args = /etc/dovecot/dovecot-ldap.conf
  }
  
  # to pobieramy od razu przy sprawdzaniu hasła
  userdb prefetch {
  }
  
  # dla serwerów SMTP (Postfix/Exim)
  socket listen {
    client {
      path = /var/run/dovecot/auth-client
      group = sasl
      mode = 0660
    }
  }
}
# (...)

W Dovecot 2.x konfiguracja jest podobna, tylko rozmieszczona w osobnych plikach, należy przejrzeć 10-auth.conf (includy na końcu), auth-ldap.conf.ext, 10-master.conf (zamiast "socket listen" będzie "unix_listener").

dovecot-ldap.conf
uris = ldapi://
dn = uid=dovecot,ou=System,dc=example,dc=com
dnpass = haslo
auth_bind = yes
ldap_version = 3
base = dc=example,dc=com
scope = subtree
pass_attrs = uid=user,userPassword=password,homeDirectory=userdb_home,uidNumber=userdb_uid,gidNumber=userdb_gid

Postfix

main.cf
# SASL - podłączenie do Dovecota
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/run/dovecot/auth-client

# Aliasy w LDAP
alias_maps = ..., ldap:/etc/postfix/aliases-ldap.cf

Aliasy użytkownika trzymane w atrybucie mail (klasa inetOrgPerson).

aliases-ldap.cf
server_host = ldapi://
bind = yes
bind_dn = uid=postfix,ou=System,dc=example,dc=com
bind_pw = haslo
version = 3

search_base = dc=example,dc=com
query_filter = (|(mail=%s@example.con)(mail=%s))
result_attribute = uid

Exim

exim4.conf
# (...)
hide ldap_default_servers = /var/run/ldapi
# (...)

begin routers
# (...)

# Aliasy - podobnie jak w Postfix
user_aliases:
  driver = redirect
  allow_fail
  allow_defer
  data = ${lookup ldapm {ldapi:///dc=example,dc=com?uid?sub?(|(mail=${quote_ldap: $local_part})(mail=${quote_ldap: $local_part}@${quote_ldap_dn: $domain}))}}
  user = Debian-exim
  file_transport = address_file
  pipe_transport = address_pipe

# (...)

# Uwierzytelnianie - podłączenie do Dovecot

begin authenticators

PLAIN:
        driver          = dovecot
        server_set_id   = $auth1
        server_socket   = /var/run/dovecot/auth-client
# done by dovecot       server_advertise_condition = ${if def:tls_cipher }

LOGIN:
        driver          = dovecot
        server_set_id   = $auth1
        server_socket   = /var/run/dovecot/auth-client
# done by dovecot       server_advertise_condition = ${if def:tls_cipher }

Samba

Konfiguracja PDC opartego o LDAP (część mniej istotnych opcji pominięta):

smb.conf
[global]
   workgroup = EXAMPLE

   security = user
   encrypt passwords = yes

   obey pam restrictions = yes
 
   local master = yes
   os level = 33
   domain master = yes 
   preferred master = yes
   domain logons = yes

   passdb backend = ldapsam:"ldapi:// ldaps://ldap2.example.com"
   idmap backend = ldapsam:"ldapi:// ldaps://ldap2.example.com"
   ldap admin dn = uid=samba,ou=System,dc=example,dc=com
   ldap suffix = dc=example,dc=com
   ldap machine suffix = ou=Hosts
   ldap user suffix = ou=People
   ldap group suffix = ou=Group
   ldap idmap suffix = ou=Idmap

   ldap passwd sync = only
   ldap delete dn = yes

;   ldapsam:trusted = yes
;   ldapsam:editposix = yes

;   add user script = /usr/sbin/smbldap-useradd '%u'
   delete user script = /usr/sbin/smbldap-userdel '%u'
;   add user to group script = /usr/sbin/smbldap-groupmod -m '%u' '%g'
;   delete user from group script = /usr/sbin/smbldap-groupmod -x '%u' '%g'
;   set primary group script = /usr/sbin/smbldap-usermod -g '%g' '%u'
;   add group script = /usr/sbin/smbldap-groupadd '%g' && /usr/sbin/smbldap-groupshow %g|awk '/^gidNumber:/ {print $2}'
;   delete group script = /usr/sbin/smbldap-userdel '%g'
   add machine script = /usr/sbin/smbldap-useradd -W -d /dev/null -g Machines -c 'Machine Account' -s /bin/false '%u'
   # for renaming machines
#   rename user script = /usr/sbin/smbldap-usermod -r '%unew' '%uold'

Wybrane opcje z /etc/smbldap-tools/smbldap.conf

smbldap.conf
slaveLDAP="127.0.0.1"
slavePort="389"
masterLDAP="127.0.0.1"
masterPort="389"
ldapTLS="0"
verify="none"

suffix="dc=example,dc=com"
usersdn="ou=Users,${suffix}"
computersdn="ou=Machines,${suffix}"
groupsdn="ou=Groups,${suffix}"
idmapdn="ou=Idmap,${suffix}"
sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}"

scope="sub"
hash_encrypt="SSHA"
crypt_salt_format="%s"