OpenLDAP serveri paigaldus
Sissejuhatus
Liikvel on peamiselt kaks avatud lähtekoodiga LDAP serverit, mis mõlemad on pärit Michigani ülikoolist ning baseeruvad samal koodibaasil:
Ubuntus on mõlemad olemas. Debiani 389 on veel testimisfaasis, seega wheezy väljalaskest seda ei leia. Eesti ID-kaardi jaoks leiab hunniku Pythoni skripte mis saab paigaldada lihtsa pip install python-esteid käsuga ning mille abil saab:
Importida ldap.sk.ee serverist sertifikaate isikukoodi järgi
Küsida kas mõni sertifikaat kehtib
Sertifikaadist saab välja lõigata:
Eesnime
Perekonnanime
Sünnikuupäeva
Dokumendi koodi
Paigaldus
Kõigepealt tuleks seadistada domeeninimeta masinanimi failis /etc/hostname:
echo "ldap" > /etc/hostname
Seejärel lisada /etc/hosts faili vastavad kirjed sellises järjekorras et täielik masinanimi (fully qualified domain name) on esimene:
127.0.0.1 ldap.povi.ee ldap localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Järgnevalt võib üle kontrollida kas nimelahendus toimib:
hostname # Peaks tagastama ldap
hostname --fqdn # Peaks tagastama ldap.povi.ee
Lisaks peab nimeserver õige vastuse andma päringu pihta:
host ldap.koodur.com # Peaks tagastama ldap.povi.ee has address x.x.x.x
Ubuntus ning Debianis saame alustada tarkvarapaketi paigaldusega:
apt-get install slapd ldap-utils
Paigalduse käigus küsitakse administraatori jaoks parooli, see on OpenLDAP serverisse loodava admin kasutaja parool.
OpenLDAP seadistamine
OpenLDAP on alates versioonist 2.4 üle läinud andmebaasipõhisele konfiguratsioonile, mis tähendab seda et LDAP serveri seadistamine käib LDAP klientrakenduse kaudu 3. Mulle meeldib rakendusi seadistada tekstifailide kaudu nii nagu Linuxilistes kombeks ja Debian Wheezys sisalduv OpenLDAP seda veel õnneks toetab:
sudo apt-get install slapd
sudo /etc/init.d/slapd stop
rm -Rf /etc/ldap/slap.d/
Loo konfiguratsioonifail /etc/ldap/slapd.conf:
Mina lisasin andmebaasi schema SSH võtmete hoiustamiseks faili /etc/ldap/schema/openssh-lpk.schema, ülal konfiguratsioonis on juba sellele viidatud:
Lisaks paigaldasin ka ldap2rest jaoks täiendavate attribuutidega schema faili /etc/ldap/schema/extra.schema:
TLS võtmete loomine
Ilma TLS-ita on üsna võimatu modernset LDAP lahendust käima saada, näiteks sssd 1 ei võimaldagi autentida ilma TLS-ita. Selleks loo võtmed LDAP serverile:
# Loo CA, seda võiks teha mõnes isoleeritud masinas kust root.key rändama ei läheks
openssl req -days 3650 -nodes -new -x509 -keyout /etc/ldap/root.key -out /etc/ldap/root.crt
# Loo CSR
openssl req -days 3650 -nodes -new -keyout /etc/ldap/ldap.key -out /etc/ldap/ldap.csr
# Signeeri CSR
openssl x509 -req -days 3650 -in /etc/ldap/ldap.csr -out /etc/ldap/ldap.crt -CA /etc/ldap/root.crt -CAkey /etc/ldap/root.key -CAcreateserial
Vana andmebaasi import
Kui sul on andmed juba mõnest LDAP serverist importida vaja siis slapcat abil saab nad LDIF faili salvestada 4:
slapcat -v -l dump.ldif
Eeldusel et nüüdseks on kõik vajalikud schemad kirjeldatud OpenLDAP konfiguratsioonis võime proovida andmeid importida:
/etc/init.d/slapd stop
rm -Rf /var/lib/ldap/*
slapadd -l dump.ldif
chown -R openldap:openldap /var/lib/ldap/*
/etc/init.d/slapd start
Testimine
Kui OpenLDAP on paigaldatud võib alustada sellest, et küsida OpenLDAP serveris kirjeid:
ldapsearch "objectClass=*" -D "cn=admin,dc=ldap,dc=povi,dc=ee" -W
Väljapool LDAP serverit päringuid tehes tuleb ldapsearch käsule ette sööta ka masina aadress:
ldapsearch "objectClass=*" -D "cn=admin,dc=ldap,dc=povi,dc=ee" -W -h ldap.povi.ee
OpenLDAP kontekstis nimetatakse kasutaja autentimist LDAP serveriga bindimiseks. See tähendab et logides vastu vaatavad Bind failed veateated tähendavad seda, et kasutaja/parool on valesti sisestatud:
import ldap
try:
l = ldap.open("ldap.povi.ee")
l.protocol_version = ldap.VERSION3
username = "cn=admin,dc=ldap,dc=povi,dc=ee"
password = "verysecure"
l.simple_bind(username, password) # This does not raise expection with wrong pass?!
print "Bind successful"
except ldap.LDAPError, e:
print "Bind failed:", e
Käitamine:
python test.py
Sama asja võiks igaks juhuks ka PHP-s ära katsetada:
<?php
$ldaphost = "ldap.povi.ee";
$ldapconn = ldap_connect($ldaphost);
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldapconn, LDAP_OPT_REFERRALS, 0);
if ($ldapconn) {
echo 'Connected <br/>';
$userdn = "cn=admin,dc=ldap,dc=povi,dc=ee";
$password = "verysecure";
if ($bind = ldap_bind($ldapconn, $userdn, $password)) {
echo "Bind successful\n";
} else {
echo "Bind failed\n";
}
}
?>
Käitamine:
php test.php