(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
- Nastavení parametrů LDAP klienta
- Pokud není adresa serveru překládána pomocí DNS, provést Přidání záznamu do /etc/hosts.