OpenLDAP 2.4 - instalace a konfigurace

(CentOS 6)

Cílem je zprovoznit LDAP server splňující tyto požadavky:
  • jednoduchá autentizace (simple authentication)
  • zákaz přístupu neověřeným uživatelům (anonymous bind)
  • externí komunikace pouze přes SSL (LDAPS)
  • certifikát podepsaný vlastní certifikační autoritou

V návodu je (jako příklad) použita doména example.com.

Instalace a vytvoření adresářové struktury

 

Instalace základních balíků OpenLDAP (knihovny, klient, server):

yum install openldap openldap-clients openldap-servers

 

Vytvoření datového adresáře backendu /var/lib/ldap/example-com s adresářem logs:

mkdir -p /var/lib/ldap/example-com/logs

 

Nakopírování souboru DB_CONFIG:

cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/example-com/DB_CONFIG

 

Nastavení adresáře logs v souboru /var/lib/ldap/example-com/DB_CONFIG (pouze odkomentovat řádek):

set_lg_dir logs

 

Nastavení vlastníka a práv datovému adresáři:

chown -R ldap:ldap /var/lib/ldap/example-com/
chmod 700 /var/lib/ldap/example-com/

Vytvoření, podepsání a umístění certifikátů

viz článek Vlastní CA (certifikační autorita) 

 

Vytvoření klíče a žádosti o podpis (bez hesla):

(V Common Name musí být zadáno hostname LDAP serveru.)

openssl req -new -sha512 -nodes -newkey rsa:4096 -keyout slapd.key -out slapd.csr

 

Podepsání žádosti vlastní certifikační autoritou:

openssl ca -days 3653 -in slapd.csr -out slapd.crt

 

Umístění certifikatů do příslušných adresářů:

mv slapd.crt /etc/pki/tls/certs/slapd.crt
mv slapd.key /etc/pki/tls/private/slapd.key

OpenLDAP klient/server potřebuje přístup k certifikátu (vlastní) CA. V tomto příkladu umístěn v souboru /etc/pki/tls/certs/certifikat-vlastni-ca.crt.

 

Nastavení vlastníků a práv certifikátům:

chown root:ldap /etc/pki/tls/private/slapd.key /etc/pki/tls/certs/slapd.crt
chmod 440 /etc/pki/tls/private/slapd.key /etc/pki/tls/certs/slapd.crt
chcon -u system_u -t cert_t /etc/pki/tls/private/slapd.key /etc/pki/tls/certs/slapd.crt

Konfigurace serveru a spuštění slapd

Přidání záznamu do /etc/hosts (komunikace probíhá pomocí doménového jména, nikoliv IP):

192.168.1.100 ldap.example.com

 

Poznámka: Pro kontrolu přístupu k démonu slapd lze použít TCP wrappers (/etc/hosts.allow, /etc/hosts.deny), ale obecně je doporučováno použití firewallu.

 

Spuštění démona slapd:

service slapd start

Konfigurace slapd-config

OpenLDAP 2.4 ukládá konfiguraci do databáze umístěné v adresáři /etc/openldap/slapd.d/. Z tohoto důvodu se důrazně doporučuje používat příkaz ldapmodify namísto ruční editace LDIF souborů.

 

Níže je zobrazen soubor config.ldif s komentáři.

Direktivy viz http://www.openldap.org/doc/admin24/slapdconf2.html#Configuration Directives

Pro generování hesla je určen příkaz slappasswd (hashované heslo = test).

 

(Hodnoty je nutné upravit dle vlastní potřeby.)

################### config.ldif ####################
# config - nastaveni hesla pro cn=config
dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}lsqhPTWo2eCOp0Yl1H25/SajaLA4UFgW

# cn=config - nastaveni parametru
dn: cn=config
changetype: modify
# zakazat anonymni bind
add: olcDisallows
olcDisallows: bind_anon
-
# pri pristupu do adresare vyzadovat autentizaci
add: olcRequires
olcRequires: authc
-
# minimalni sila zabezpeceni simple_bind (viz SSF)
add: olcSecurity
olcSecurity: simple_bind=256
-
# nastaveni timeoutu
replace: olcIdleTimeout
olcIdleTimeout: 60
-
# log soubor
add: olcLogFile
olcLogFile: /var/log/slapd.log
-
# cesty k certifikatum
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/pki/tls/certs/certifikat-vlastni-ca.crt
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/pki/tls/certs/slapd.crt
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/pki/tls/private/slapd.key
-
# akceptovane sifrovani
add: olcTLSCipherSuite
olcTLSCipherSuite: TLSv1+RSA:!NULL
-
# nastaveni timeoutu
replace: olcWriteTimeout
olcWriteTimeout: 60

# monitor - pridani prav pro cn=admin,dc=example,dc=com
dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to *
    by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
    by dn.base="cn=admin,dc=example,dc=com" read
    by * none

# bdb - konfigurace backendu
dn: olcDatabase={2}bdb,cn=config
changetype: modify
# nastaveni sufixu
replace: olcSuffix
olcSuffix: dc=example,dc=com
-
# administrator pro dc=example,dc=com
replace: olcRootDN
olcRootDN: cn=admin,dc=example,dc=com
-
# heslo administratora
add: olcRootPW
olcRootPW: {SSHA}lsqhPTWo2eCOp0Yl1H25/SajaLA4UFgW
-
# cesta k datovemu adresari
replace: olcDbDirectory
olcDbDirectory: /var/lib/ldap/example-com
-
# zakladni opravneni
add: olcAccess
# atribut heslo - skup. administrators a vlastnik zapis, anonymni uzivatel pouze prava nutna pro autentizaci
olcAccess: {0}to attrs=userPassword
    by group.exact="cn=administrators,dc=example,dc=com" write
    by self write
    by anonymous auth
# podstrom lide - skup. administrators a vlastnik zapis
olcAccess: {1}to dn.subtree="ou=lide,dc=example,dc=com"
    by group.exact="cn=administrators,dc=example,dc=com" write
    by self write
# vse ostatni - skup. administrators a vlastnik zapis, prihlaseny uzivatel cteni  
olcAccess: {2}to *
    by group.exact="cn=administrators,dc=example,dc=com" write
    by self write
    by users read
##############################################

Úprava konfigurace příkazem ldapmodify (parametrem -f předán soubor config.ldif):

ldapmodify -Y EXTERNAL -H ldapi:/// -f config.ldif

Protože výchozí konfigurační databáze neobsahuje záznam olcRootDN + olcRootPW, je použit pro autentizaci SASL mechanismus EXTERNAL a pro komunikaci protokolové schéma ldapi (LDAP over IPC). To umožňuje přístup na základě systémových oprávnění resp. uid/gid.

Poznámka: Přístup uživatele root ke konf. databázi je definován v "/etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif" direktivou olcAccess.

Otestování konfigurace, nastavení LDAP démona/klienta

Test konfigurace slapd-config:

slaptest -u

 

Úprava nastavení démona slapd (povoleno pouze LDAPS a výchozí LDAPI), soubor /etc/sysconfig/ldap:

SLAPD_LDAP=no
SLAPD_LDAPS=yes

 

Nastavení parametrů LDAP klienta (Base DN, LDAP server URI a cesta k certifikátu CA), soubor /etc/openldap/ldap.conf:

BASE    dc=example,dc=com
URI     ldaps://ldap.example.com
TLS_CACERT /etc/pki/tls/certs/certifikat-vlastni-ca.crt

 

Restart démona slapd:

service slapd restart

 

Kontrola, zda běží démon slapd na požadované adrese/portu:

nmap ldap.example.com

Ukázka výstupu:

Starting Nmap 5.21 ( http://nmap.org ) at 2012-04-11 20:44 CEST
Nmap scan report for ldap.example.com (192.168.1.100)
Host is up (0.0000070s latency).
Not shown: 998 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
636/tcp open  ldapssl

Import záznamů do databáze

base.ldif - základní struktura, administrator + skupina administrators

 

(Hodnoty je opět nutné upravit dle potřeby.)

#################### base.ldif ####################
dn: dc=example,dc=com
dc: example
o: Nazev organizace
objectClass: dcObject
objectClass: organization

# organizacni jednotky
dn: ou=lide,dc=example,dc=com
ou: lide
objectClass: organizationalUnit

dn: ou=skupiny,dc=example,dc=com
ou: skupiny
objectClass: organizationalUnit

dn: ou=stroje,dc=example,dc=com
ou: stroje
objectClass: organizationalUnit

# administrator
dn: cn=manager,ou=lide,dc=example,dc=com
cn: manager
objectclass: inetOrgPerson
objectclass: organizationalPerson
objectclass: person
givenname: Krestni jmeno
sn: Prijmeni
uid: manager
userpassword: {SSHA}lsqhPTWo2eCOp0Yl1H25/SajaLA4UFgW

# skupina administrators
dn: cn=administrators,dc=example,dc=com
cn: administrators
description: Administratori DN dc=example,dc=com
member: cn=manager,ou=lide,dc=example,dc=com
objectclass: groupOfNames
##############################################

Vložení záznamů ze souboru base.ldif příkazem ldapadd:

Autentizace pomocí simple authentication (-x), bind užitím DN (-D "cn=admin,dc=example,dc=com") a hesla (-W) viz "administrator" olcRootDN/olcRootPW v config.ldif.

ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f base.ldif

Otestování funkčnosti

Pokud vše proběhlo dobře, je server nakonfigurovaný a funkční.

 

Vyhledání záznamů příkazem ldapsearch:

ldapsearch -x -D "cn=manager,ou=lide,dc=example,dc=com" -W

 

Přístup LAN klientů k LDAP serveru

Pro přístup klientů z lokální sítě (192.168.1.0/24) je třeba na serveru upravit firewall. U klienta pak nastavit soubor /etc/openldap/ldap.conf, případně upravit záznamy v /etc/hosts.


Konfigurace serveru

 

Povolení přístupu k portu ldapssl z lokální sítě (N = číslo požadované pozice v řetězci INPUT):

iptables -I INPUT N -s 192.168.1.0/24 -p tcp -m tcp -m state --state NEW --dport 636 -j ACCEPT

 

Nastavení klientské stanice