V součastnosti existuje relativně mnoho implementací LDAP. Například od firmy Novell eDirectory, Micro$oftí Active Directory, implementace v Netscapu, implementace od fy. Sun.
OpenLDAP je opensource projekt implementující LDAP nalezneme ho na stránce http://openldap.org
University of Michigan Server: ftp://terminator.rs.itd.umich.edu/ldap
Jako nástroj pro pokusy s LDAP vybral jsem si openLDAP
Po stažení zdrojových souborů ze stránek projektu, jsem zjistil, že bez BerkleyDB, openssl, SASL (Simple Authentication and Security Layer), jen tak nepojede. Tak jsem byl přinucen tyto věci ještě stáhnout z inetu, Pokud něco z toho máte, můžete narazit na problém verzí, proto si raději stáhněte nové verze všech potřebných knihoven. Pokud budeme používat autentizaci uživatelů do systému, budeme ještě potřebovat PAM, pam_ldap.so, NSS.
je dobré spustit si spustit ./configure --help
protože má dost voleb a některé se nám mohou hodit, třeba
--enable-crypt enable crypt(3) passwords [no] --enable-lmpasswd enable LAN Manager passwords [no] --enable-spasswd enable (Cyrus) SASL password verification [no] --enable-slurpd enable building slurpd [auto] --enable-ldbm enable ldbm backend no|yes|mod [no] --with-ldbm-api with LDBM API auto|berkeley|bcompat|mdbm|gdbm [auto]tady jsem ještě narazil na to zě pokud kompiluji s podporou ldbm tal musím vypnout podporu Berkleydb
takže po vybrání svých voleb můžeme provést
$ ./configure moje_volby $ make depend $ make
pro zjištění zda-li vše proběhlo jak mělo použijeme
$ make test
provedeme instalaci, pod rootem
# make install
... database ldbm #typ databáze, záleží co člověk nakonfiguroval při kompilaci suffix "dc=fi, dc=muni, dc=cz" rootdn "cn=Manager, dc=fi, dc=muni, dc=cz" rootpw secret ...Nastává čas provytvoření ldif soubodů, jakožto pěkný způsob, jak dostat data do databáze, probíhá ve dvou krocích: vytvoření LDIF soudoru, přidání do databáze pomocí
$ ldapadd
, protože tento program očekává vstup v ldif formátu:
Uvádím pár příkladů (staženo z inetu) jak by měli vypadat podle použití, protože do ldap se dá uložit mnoho různých věcí
User -------------------- dn:uid=xscotka,ou=People,dc=fi,dc=muni,dc=cz uid: xscotka cn: xscotka objectClass: account objectClass: posixAccount objectClass: shadowAccount userPassword:: {CRYPT}* loginShell: /bin/bash uidNumber: 99999 gidNumber: 100 homeDirectory: /home/xscotka gecos: Jan Scotka host: nymfe host: aisa Group ------------------------------- dn: cn=staff,ou=groups,dc=fi,dc=muni,dc=cz cn: staff objectclass: posixGroup userPassword: {crypt}* gidnumber: 100 memberuid: xscotka memberuid: xdalsi memberuid: xdalsidalsipotom použití bude vypadat takto: ještě je potřeba zmínit, že použití atributů je závislé na použitém schématu. pro generování hesla se používá program
slappasswd
kde se parametrem -h
určí šifra jenž se použije.
ldapadd -D -x "cn=Manager, dc=mydomain, dc=com" -W < myldif.ldifparametr -x je důležitý protože zabrání použití SASL autentizace, která aspoň v té chvíli nebyla u mne funkční.
hledání v databázi se provádí přes ldapsearch
zároveň tím zkontrolujeme jestli nám to funguje a zdali se vložilo to co jsem chtěli ;-)
$ ldapsearch -h <erver> -b <baze> <filtr> $ ldapsearch -L -b "dc=mydomain, dc=com" -W "(objectclass=*)"
Nesmíme zapomenou na nastavení politiky přístupu uživatelů, tzn co mohou, či nemohou dělat, neco ve stylu mohu si měnit vlatní heslo, nemohu vidět další uživatele. V souboru slapd.conf
nastavíme pomocí
include /usr/local/etc/openldap/sldap.conf.aclten použijeme pro nastavení práv, mohl by vypadat nejak takto:
access to dn.regex=".*,dc=fi,dc=muni,dc=cz" attr=userPassword by dn="cn=admin,dc=fi,dc=muni,dc=cz" write //admin smí měnit by self write //vlastník smí měnit by * auth // ostatní se mohou autentizovat access to dn.regex=".*,ou=People,dc=mylan,dc=net" by * read //vsechny ostatni udaje jen pro cteni ani uzivatel nemuzemáme něklik možností jak vyjádřit osobu:*, self, anonymous, users, Regulární výraz na DN
/etc/ldap.conf
nastavují se tam věci jako, kde je databáze, jaké je její jméno, tedy to co je nastaveno v /usr/local/etc/openldap/sldap.conf
rootbinddn uvádí jnémo kterým se bude navazovat spojení(/etc/lapd.secret heslo je v čisté formě)
host doto-alpha.lab.fi.muni.cz base dc=fi,dc=muni,dc=cz rootbinddn cn=admin,dc=fi,dc=muni,dc=cz pam_filter objectclass=posixaccount pam_login_attribute uid pam_member_attribute gid pam_password md5 ...
Na PADL nalezneme nástroje, přesneji skripty, schopné převodu stávajících systémových souborů do LDAP databáze. Nebo si takový nástroj klidně napište sami, ldif formát je relativně jednoduchý a unixové konfiguráky mají přesně definovanou syntaxi.
auth required /lib/security/pam_env.so auth sufficient /lib/security/pam_unix.so likeauth nullok auth sufficient /lib/security/pam_ldap.so try_first_pass auth required /lib/security/pam_deny.so account required /lib/security/pam_unix.so account sufficient /lib/security/pam_ldap.so password required /lib/security/pam_cracklib.so retry=3 type= password sufficient /lib/security/pam_unix.so nullok use_authtok md5 shadow password sufficient /lib/security/pam_ldap.so password required /lib/security/pam_deny.so session required /lib/security/pam_limits.so session required /lib/security/pam_unix.so #session optional /lib/security/pam_ldap.sozdrojové soubory se nacházejí na stránce http://www.padl.com/OSS/pam_ldap.html
/etc/nsswitch.conf
passwd: files ldap
shadow: files ldap
group: files ldap
replica host=<hostname>[:<port>] [bindmethod={ simple | kerberos | sasl }] ["binddn=<DN>"]na strane sekundarniho serveru je potreba nastavit v konfiguracnim souboru polozku
uptdatedn
jenz odpovida zaznamu ["binddn="]
na strane Master serveru