Erinevus lehekülje "Ldap klient ja server" redaktsioonide vahel

Allikas: Kuutõrvaja
(PHP abil ldap kasutamine)
P (Tühistati kasutaja Jj (arutelu) tehtud muudatused ning pöörduti tagasi viimasele muudatusele, mille tegi Imre)
1. rida: 1. rida:
===Sissejuhatus===  
+
 
 +
===LDAP===  
  
 
(Lightweight Directory Access Protocol) http://www.openldap.org/ on Michigani Ülikooli (University of Michigan) poolt välja töötatud kataloogiteenuse protokoll asendamaks X.500 DAP (Directory Access Protocol) protokolli. Süsteemis pakub ta võimalust ühe teenuse piires hoida ning väljastada mitmesugust kasutajakontode kohta käivat infot. Näiteks hoida lisaks kasutaja paroolile ja nimele veel tema kontaktandmeid, samba parooli jms. Samuti saab ldap’i hästi kasutada kui on mitu serverit (mail, www, samba, terminaliserver) ning oleks vaja, et samad kasutajad eksisteeriksid kõigis neis serverites. Käesolev näide sobibki sellise lahenduse loomiseks kõige paremini :)
 
(Lightweight Directory Access Protocol) http://www.openldap.org/ on Michigani Ülikooli (University of Michigan) poolt välja töötatud kataloogiteenuse protokoll asendamaks X.500 DAP (Directory Access Protocol) protokolli. Süsteemis pakub ta võimalust ühe teenuse piires hoida ning väljastada mitmesugust kasutajakontode kohta käivat infot. Näiteks hoida lisaks kasutaja paroolile ja nimele veel tema kontaktandmeid, samba parooli jms. Samuti saab ldap’i hästi kasutada kui on mitu serverit (mail, www, samba, terminaliserver) ning oleks vaja, et samad kasutajad eksisteeriksid kõigis neis serverites. Käesolev näide sobibki sellise lahenduse loomiseks kõige paremini :)
  
Käesolevas õpetuses vaatleme kuidas kasutajate infot hoida ldap serveris
+
===Serveri pool===
 
 
Selleks serverisse järgneva puukujulise struktuuri
 
 
 
dc:        com
 
              |
 
dc:        myserver        (Organisation)
 
          /      \
 
ou:  People  Groups    (Organisational Units, nö grupp kus hoitakse vajalikku infot)
 
      /    \    .. \
 
uid: ..  Ants      test      (OU-spetsiifiline data ehk kasutajad - grupid)
 
 
 
* Base DN: dc=myserver,dc=com
 
* Users: dc=myserver,dc=com,ou=People
 
* Groups: dc=myserver,dc=com,ou=Groups
 
 
 
Ehk tekitame DC myserver,com mis hoiab endas kahte OUd (organisatsional unitit) People ja Groups, millest ühte
 
salvestame kasutajate info ja teise grupiinfo, alternatiivina Linuxi shadow ja group failidele
 
 
 
===Serveri install ja seadistus===
 
  
 
Installime openldap serveri
 
Installime openldap serveri
  
FreeBSDs käib see järgnevalt
+
FreeBSD's
 +
cd /usr/ports/net/openldap22-server/ && make install
  
cd /usr/ports/net/openldap24-server && make install
+
teises os'ides vastavalt siis emerge apt-get install etc
  
 
Süsteemi paigaldatakse ka berkeley db, mida openldab defauldis kasutab, kuid on võimalik seada see tööle ka nö näiteks postgresql peal.
 
Süsteemi paigaldatakse ka berkeley db, mida openldab defauldis kasutab, kuid on võimalik seada see tööle ka nö näiteks postgresql peal.
  
genereerime serverile parooli, mille seadistame hiljem konfiguratsioonis rootpw reale
+
genereerime serverile parooli
 
   
 
   
 
   # slappasswd -s parool
 
   # slappasswd -s parool
 
  {SSHA}nPKG3qbPABkp21aTBZV2IpbcGUHLi3a2
 
  {SSHA}nPKG3qbPABkp21aTBZV2IpbcGUHLi3a2
  
liigume /usr/local/etc/openldap või linuxi puhul /etc/openldap ning avame faili slapd.conf, muudame seda vastavalt allolevale näitele
+
liigume /usr/local/etc/openldap ning avame faili slapd.conf, lisame sinna
  
 
  include        /usr/local/etc/openldap/schema/core.schema
 
  include        /usr/local/etc/openldap/schema/core.schema
 
  include        /usr/local/etc/openldap/schema/cosine.schema
 
  include        /usr/local/etc/openldap/schema/cosine.schema
 
  include        /usr/local/etc/openldap/schema/nis.schema
 
  include        /usr/local/etc/openldap/schema/nis.schema
 
 
  pidfile        /var/run/ldap/slapd.pid
 
  pidfile        /var/run/ldap/slapd.pid
 
  argsfile        /var/run/ldap/slapd.args
 
  argsfile        /var/run/ldap/slapd.args
 
  database        bdb
 
  database        bdb
  suffix          "dc=myserver,dc=com"
+
  suffix          "dc=test,dc=org"
  rootdn          "cn=Manager,dc=myserver,dc=org"
+
  rootdn          "cn=Manager,dc=test,dc=org"
 
  rootpw          {SSHA}nPKG3qbPABkp21aTBZV2IpbcGUHLi3a2
 
  rootpw          {SSHA}nPKG3qbPABkp21aTBZV2IpbcGUHLi3a2
 
  directory      /var/db/openldap-data
 
  directory      /var/db/openldap-data
53. rida: 35. rida:
 
  index          uid            pres,eq,sub
 
  index          uid            pres,eq,sub
  
Selleks, et infovahetus toimuks krüpteeritult, genereerime võtmed ja lisame konfi lõppu veel järgnevad read
+
Selleks, et toimiks kõik info liigutamine TLS krüpteeritult, genereerime võtmed ja lisame konfi read, näiteks
  
 
  # Define SSL and TLS properties (optional)
 
  # Define SSL and TLS properties (optional)
60. rida: 42. rida:
 
  TLSCACertificateFile /etc/ssl/ldap.pem
 
  TLSCACertificateFile /etc/ssl/ldap.pem
  
Aga selleks, et kliendid saaksid anonüümselt audentida vastu ldap serverit, kuid mitte lugeda krütpeeritud paroole, aitavad read
+
Selleks, et kliendid saaksid küll anonüümselt audentida vastu ldap serverit, kuid mitte lugeda krütpeeritud paroole, aitavad read
  
 
  access to attrs=userPassword
 
  access to attrs=userPassword
69. rida: 51. rida:
 
         by * read
 
         by * read
  
natuke failiõigusi paika, turvalisuse huvides
+
natuke failiõigusi paika lihtsalt igaksjuhuks
  
 
  chmod 440 /usr/local/etc/openldap/slapd.conf
 
  chmod 440 /usr/local/etc/openldap/slapd.conf
75. rida: 57. rida:
 
  chown -R ldap:ldap /var/db/openldap*
 
  chown -R ldap:ldap /var/db/openldap*
  
Et slapd käivituks peale serveri booti lisame /etc/rc.conf’i
+
/etc/rc.conf’i lisame ldap’i teenuse käivitamiseks boodil
  
 
  slapd_enable="YES"
 
  slapd_enable="YES"
81. rida: 63. rida:
 
  slapd_sockets="/var/run/openldap/ldapi"
 
  slapd_sockets="/var/run/openldap/ldapi"
  
Peale rebooti peaks ldap kuulama 389 pordil, seda võib sockstat/netstat abil täiendavalt kontrollida
+
peale rebooti võime sockstatiga kontrollida kas ldap kuulab 389 pordil
 
 
===LDAP serverisse algstruktuuri tekitamine ja kasutajate lisamine===
 
  
loome esimesena info.ldiff millega paneme paika kogu struktuuri
+
Nüüd loome test.ldiff faili ning ekspordime selle ldap’i, sellega paneme paika kogu struktuuri
  
  dn: ou=Groups,dc=myserver,dc=com
+
  dn: dc=test,dc=org
  objectClass: organizationalUnit
+
  dc: test
 
  objectClass: top
 
  objectClass: top
  ou: Groups
+
  objectClass: domain
   
+
objectClass: domainRelatedObject
  dn: ou=People,dc=myserver,dc=com
+
associatedDomain: test.org
  objectClass: organizationalUnit
+
  structuralObjectClass: domain
  objectClass: top
+
  dn:ou=groups, dc=test, dc=org
  ou: People
+
objectclass: top
 +
objectclass: organizationalUnit
 +
ou: groups
 +
  structuralObjectClass: organizationalUnit
 +
  dn:ou=people, dc=test, dc=org
 +
objectclass: top
 +
objectclass: organizationalUnit
 +
  ou: people
 +
structuralObjectClass: organizationalUnit
  
Teeme failist eksportimise serverisse
+
Teeme failist eksportimise
  
  '''# ldapadd -x -D "cn=Manager,dc=myserver,dc=com" -W -f info.ldiff'''
+
  # slapadd -l test.ldiff
Enter LDAP Password:                                                 
 
adding new entry "ou=Groups,dc=myserver,dc=com"                     
 
 
adding new entry "ou=People,dc=myserver,dc=com"
 
 
Kaks uute userite lisamise template’t. Slappadd’ga saab nende failide abil ldap’i kasutajad testuser ja testuser2. Hiljem võib kirjutada näiteks shellskripti, mis parameetritena võtab kasutaja parooli ja grupi ning loob automaatselt kodukatalooma ja genereerb slappasswd’ga parooli automaatselt
 
  
Kasutaja mille tekitamine info on:
+
Kaks uute userite lisamise template’t. Slappadd’ga saab nende failide abil ldap’i kasutajad testuser ja testuser2. Muidugi võib kirjutada mingi shellskripti, mis parameetritena võtab kasutaja parooli ja grupi ning loob kodukatalooma lisaks ka :) Genereerida tuleb ka slappasswd’ga parool mõlemale kasutajale
  
cn=StupidTest User
+
Esimene kasutaja testuser.ldiff
dn cn=StupidTest User,ou=People,dc=myserver,dc=com
 
cn StupidTest User
 
gecos Niisama ldap user
 
gidNumber 1000
 
homeDirectory /home/test
 
loginShell /bin/csh
 
User Name testuser
 
uidNumber 1000
 
Password parool
 
  
Selleks tekitame fiali '''testuser.ldiff''' millesse lisame järgneva info
+
  dn: cn=StupidTest User, ou=people, dc=test, dc=org
 
 
# kasutaja info People's OU'sse
 
  dn: cn=StupidTest User, ou=People, dc=myserver, dc=org
 
 
  cn: StupidTest User
 
  cn: StupidTest User
 
  sn: Dummy
 
  sn: Dummy
135. rida: 105. rida:
 
  gidnumber:1000
 
  gidnumber:1000
 
  gecos:Niisama ldap user
 
  gecos:Niisama ldap user
  loginShell:/bin/bash
+
  loginShell:/bin/csh
 
  homeDirectory: /home/test
 
  homeDirectory: /home/test
+
  dn: cn=test, ou=groups, dc=test, dc=org
# grupi info Groups OU'sse
 
  dn: cn=test, ou=Groups, dc=myserver, dc=org
 
 
  objectclass: top
 
  objectclass: top
 
  objectclass: posixGroup
 
  objectclass: posixGroup
146. rida: 114. rida:
 
  memberuid: test
 
  memberuid: test
  
Lisame info ldap serverisse
+
# slapadd -l testuser.ldiff
  
'''# ldapadd -x -D "cn=Manager,dc=myserver,dc=com" -W -f testuser.ldiff'''
+
Teine kasutaja testuser2.ldiff
Enter LDAP Password:
 
adding new entry "cn=StupidTest User, ou=People, dc=myserver, dc=com"
 
 
adding new entry "cn=test, ou=Groups, dc=myserver, dc=com"'
 
  
Kui vaatame nüüd phpldamadminiga struktuuri näeb see välja järgnev
+
  dn: cn=StupidTest User2, ou=people, dc=test, dc=org
 
 
[[Pilt:Ldapstruktuur.png]]
 
 
 
Loome veel ka teise kasutaja, tekitame selleks faili testuser2.ldiff
 
 
 
  dn: cn=StupidTest User2, ou=people, dc=myserver, dc=org
 
 
  cn: StupidTest User2
 
  cn: StupidTest User2
 
  sn: Dummy
 
  sn: Dummy
181. rida: 139. rida:
 
  memberuid: test2
 
  memberuid: test2
  
  '''# ldapadd -x -D "cn=Manager,dc=myserver,dc=com" -W -f testuser2.ldiff'''
+
  # slapadd -l testuser2.ldiff
Enter LDAP Password:                                                 
 
adding new entry "ou=Groups,dc=myserver,dc=com"                     
 
 
adding new entry "ou=People,dc=myserver,dc=com"
 
  
Nüüd on meil kaks posix kasutajat ja gruppi, järgnevalt vaatame kuidas need kasutajad autentima panna
+
===Kliendi pool===
 
 
===FreeBSD poolne autentimine===
 
 
 
http://www.freebsd.org/doc/en/articles/ldap-auth/article.html
 
  
 
Installime nss_ldap ja pam_ldap softi, sellekäigus paigutatakse süsteemi ka openldap-client
 
Installime nss_ldap ja pam_ldap softi, sellekäigus paigutatakse süsteemi ka openldap-client
198. rida: 148. rida:
 
  cd /usr/ports/security/pam_ldap/ && make install
 
  cd /usr/ports/security/pam_ldap/ && make install
  
lisame /etc/pam.d/ldap faili FreeBSD 5.x või kõrgema puhul ja /etc/pam.conf FreeBSD 4.x süsteemis rea
+
lisame /etc/pam.d/ldap faili 5x puhul või /etc/pam.conf 4x süsteemis rea
  
 
  login  auth    sufficient      /usr/local/lib/pam_ldap.so
 
  login  auth    sufficient      /usr/local/lib/pam_ldap.so
212. rida: 162. rida:
 
  ldap_version 3
 
  ldap_version 3
 
  host 192.168.1.1 <- siia siis ldap serveri ip
 
  host 192.168.1.1 <- siia siis ldap serveri ip
  suffix          "dc=myserver,dc=org"
+
  suffix          "dc=test,dc=org"
  nss_base_passwd ou=People,dc=myserver,dc=org?sub
+
  nss_base_passwd ou=People,dc=test,dc=org?sub
  nss_base_group ou=Group,dc=myserver,dc=org?sub  
+
  nss_base_group ou=Group,dc=test,dc=org?sub  
  nss_base_shadow ou=people,dc=myserver,dc=org?sub
+
  nss_base_shadow ou=people,dc=test,dc=org?sub
 
   
 
   
  BASE    dc=myserver, dc=org
+
  BASE    dc=test, dc=org
 
  scope sub
 
  scope sub
 
   
 
   
233. rida: 183. rida:
 
nüüd kirjutame /etc/pam.d/sshd konfi
 
nüüd kirjutame /etc/pam.d/sshd konfi
  
auth            required        pam_nologin.so          no_warn
+
  auth            sufficient      /usr/local/lib/pam_ldap.so no_warn try_first_pass
auth            sufficient      pam_opie.so            no_warn no_fake_prompts
+
  auth            required        pam_unix.so
auth            requisite      pam_opieaccess.so      no_warn allow_local
 
  auth            sufficient      /usr/local/lib/pam_ldap.so     no_warn
 
  auth            required        pam_unix.so             no_warn try_first_pass
 
 
  account        required        pam_login_access.so
 
account        required        /usr/local/lib/pam_ldap.so      no_warn ignore_authinfo_unavail  ignore_unknown_user
 
  
 
kommenteerime kõik muud read vastavalt teiste teenuste pam konfidesse, /etc/pam.d all tuleb lisada samad read, kui huvi ka neid saada ldap’ilt auth’ima, nagu ftp imap jms
 
kommenteerime kõik muud read vastavalt teiste teenuste pam konfidesse, /etc/pam.d all tuleb lisada samad read, kui huvi ka neid saada ldap’ilt auth’ima, nagu ftp imap jms
268. rida: 212. rida:
 
viimane rida näitab, et tuleks luua ka serverisse kodukataloog userile ning see nfs’i abil jagada kliendile :)
 
viimane rida näitab, et tuleks luua ka serverisse kodukataloog userile ning see nfs’i abil jagada kliendile :)
  
===Linux poolne autentimine===
+
===Linux ldap klient===
  
Installida tuleb samad paketid miss FreeBSD's ehk nss_ldap ja pam ldap
+
Installida tuleb samad paketid nagu nss_ldap ja pam ldap
  
/etc/lpdap.conf'i võib jääda samaks mis oli BSD näiteks
+
/etc/lpdap.conf'i kasutame sama, mis bsd'l
  
 
pam'i konfimiseks kirjutame faili
 
pam'i konfimiseks kirjutame faili
301. rida: 245. rida:
 
===Haldusvahendid===
 
===Haldusvahendid===
  
Enda serveri lokaalsete kasutajate ldap’i viimiseks vajalikud skriptid saab http://www.padl.com/OSS/MigrationTools.html Ühtteist saab veel teha näiteks automount ja samba http://www.idealx.org/prj/samba/samba-ldap-howto.pdf ning veebiliides muretseda. Viimaseid on mitmeid kirjutatud.
+
Enda serveri lokaalsete kasutajate ldap’i viimiseks vajalikud skriptid saab http://www.padl.com/OSS/MigrationTools.html Ühtteist saab veel teha näiteks automount ja samba http://www.idealx.org/prj/samba/samba-ldap-howto.pdf ning veebiliides muretseda. Viimaseid on mitmeid kirjutatud, aga alati võib ka ise midagi nokitseda http://ee.php.net/manual/en/ref.ldap.php
  
 
Lisaks veel … Yet Another Passwd 2 LDIF Converter http://freshmeat.net/projects/yap2lc/?topic_id=861
 
Lisaks veel … Yet Another Passwd 2 LDIF Converter http://freshmeat.net/projects/yap2lc/?topic_id=861
309. rida: 253. rida:
 
Kasutajate administreerimiseks http://cpu.sourceforge.net/
 
Kasutajate administreerimiseks http://cpu.sourceforge.net/
  
===Veebi haldusliides phpldapadmin===
+
Muidugi ka http://phpldapadmin.sourceforge.net
 
 
Kättesaadav urlitlt http://phpldapadmin.sourceforge.net
 
 
 
Phpldapadmini sisselogimiseks kasutaja "cn=Manager,dc=test,dc=org" ja parooliks see mis sai eelnevalt slapd.confi  defineeritud
 
 
 
Uue kasutaja loomiseks tuleb seal vajutada ou=Peolpe peale, valida create a child entry, generic: unix accout ja täita väljad, paljusid neist soovitab veebiliides seejuures juba ise automaatselt.
 
  
 
===Ldap ja Apache===
 
===Ldap ja Apache===
328. rida: 266. rida:
 
  ssl start_tls
 
  ssl start_tls
 
  tls_checkpeer no
 
  tls_checkpeer no
  suffix          "dc=myserver,dc=org"
+
  suffix          "dc=domeen,dc=ee"
 
  host 192.168.1.100
 
  host 192.168.1.100
 
  base dc=domeen,tdc=ee
 
  base dc=domeen,tdc=ee
 
  ldap_version 3
 
  ldap_version 3
 
  pam_password SSHA
 
  pam_password SSHA
  nss_base_passwd ou=people,dc=myserver,dc=com?sub
+
  nss_base_passwd ou=people,dc=domeen,dc=ee?sub
  nss_base_group ou=groups,dc=myserver,dc=com?sub
+
  nss_base_group ou=groups,dc=domeen,dc=ee?sub
  
 
installime peale ka pam_ldap mooduli
 
installime peale ka pam_ldap mooduli
361. rida: 299. rida:
 
  httpd    account    required    /usr/local/lib/pam_lda
 
  httpd    account    required    /usr/local/lib/pam_lda
  
===Ldapi Berkeley db remont===
+
===Ldap ja db uuendamine===
  
 
Kasutades dbd backendit võib selle uuendamisel ldap mitte enam toimida
 
Kasutades dbd backendit võib selle uuendamisel ldap mitte enam toimida
368. rida: 306. rida:
 
  db4.5_recover -v -h /var/lib/openldap-data/
 
  db4.5_recover -v -h /var/lib/openldap-data/
 
  chown -R ldap\: /var/lib/openldap-data/
 
  chown -R ldap\: /var/lib/openldap-data/
 
===Logi ja debug===
 
 
Logilevelite kohta ütleb man järgmist
 
 
man slapd.conf
 
...
 
        loglevel <integer>
 
              Specify the level at which debugging statements and
 
              operation statistics should be syslogged (currently
 
              logged to the syslogd(8) LOG_LOCAL4 facility).  Log
 
              levels are additive, and available levels are:
 
                      1      trace function calls
 
                      2      debug packet handling
 
                      4      heavy trace debugging
 
                      8      connection management
 
                      16    print out packets sent and received
 
                      32    search filter processing
 
                      64    configuration file processing
 
                      128    access control list processing
 
                      256    stats                            log
 
                              connections/operations/results
 
                      512    stats log entries sent
 
                      1024  print  communication  with  shell
 
                              backends
 
                      2048  entry parsing
 
 
syslog seadistus võiks olla järgnev /etc/syslog.conf
 
 
local4.* /var/log/ldap.log
 
 
Selleks, et ldap hakkaks logima nimetatud faili on vajalik teha veel restart syslogile
 
 
===Berkeley Db tuunimine===
 
 
Kasutades berkeley db'd on soovitatav andmebaasi asukohta (käesoleval juhul /var/db/openldap-data)
 
tekitada DB_CONFIG fail. http://www.oracle.com/technology/documentation/berkeley-db/db/programmer_reference/env_db_config.html
 
 
näiteks
 
 
set_cachesize 0 8388608 8
 
set_lg_regionmax 1048576
 
set_lg_bsize 2097152
 
 
===PHP abil ldap kasutamine===
 
 
Alati võib ka ise midagi nokitseda abiks manual lingil http://ee.php.net/manual/en/ref.ldap.php
 
 
Vajalik on, et eelnevalt php kompileeritaks ldap toega
 
 
Ühenduse loomine
 
 
<source lang=php>
 
<?php
 
    $ldapHost = "192.168.1.11";
 
        $ldapPort = "389";
 
    $ldapUser ="cn=Manager,dc=myserver,dc=com";
 
    $ldapPswd ="parool";
 
 
$ldapLink =ldap_connect($ldapHost, $ldapPort)
 
    or die("Can't establish LDAP connection");
 
 
if (ldap_set_option($ldapLink,LDAP_OPT_PROTOCOL_VERSION,3))
 
{
 
    echo "Using LDAP v3";
 
}else{
 
    echo "Failed to set version to protocol 3";
 
}
 
 
ldap_bind($ldapLink,$ldapUser,$ldapPswd)
 
    or die("Can't bind to server.");
 
?>
 
</source>
 
 
Käivitamise järel peaks skript teatama
 
 
Using LDAP v3
 
 
Kasutajate nimekiri
 
 
<source lang=php>
 
<?php
 
    $dn = " ou=People,dc=myserver,dc=com";
 
    $attributes = array("cn", "Sn");
 
    $filter = "(cn=*)";
 
    $ad = ldap_connect("193.40.0.61")
 
          or die("Couldn't connect to AD!");
 
 
    ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3);
 
 
    $bd = ldap_bind($ad,"cn=Manager,dc=myserver,dc=com","parool")
 
          or die("Couldn't bind to AD!");
 
 
    $result = ldap_search($ad, $dn, $filter, $attributes);
 
 
    $entries = ldap_get_entries($ad, $result);
 
 
    for ($i=0; $i<$entries["count"]; $i++)
 
    {
 
        echo $entries[$i]["cn"]
 
            [0]."<br />";
 
    }
 
 
    ldap_unbind($ad);
 
 
?>
 
</source>
 
 
Kasutaja lisamine
 
 
<source lang=php>
 
<?php
 
    $ad = ldap_connect("193.40.0.61")
 
          or die("Couldn't connect to server!");
 
 
    ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3);
 
 
    $bd = ldap_bind($ad,"cn=Manager,dc=myserver,dc=com","parool")
 
          or die("Couldn't bind to AD!");
 
 
    $info["cn"] = "John Jones";
 
    $info["sn"] = "Jones";
 
 
    $info["objectClass"][0] = "top";
 
    $info["objectClass"][1] = "person";
 
    $info["objectClass"][2] = "posixAccount";
 
    $info["objectClass"][3] = "shadowAccount";
 
 
    $info["uid"] = "testuser";
 
    $info["userpassword"] = "{SSHA}wU0T6ixZb9sU2+JTK8Au8sq7noNfMkbv";
 
    $info["uidnumber"] = "1002";
 
    $info["gidnumber"] = "1002";
 
 
    $info["gecos"] = "TestUser";
 
    $info["loginShell"] = "/bin/csh";
 
    $info["homeDirectory"] = "/home/test2";
 
 
    $bd = ldap_add($ad, "cn=Jobukakk7, ou=People, dc=myserver, dc=com", $info);
 
 
    ldap_unbind($ad);
 
?>
 
</source>
 
  
 
===Kasulikud lisamaterjalid===
 
===Kasulikud lisamaterjalid===
  
 +
* http://www.cultdeadsheep.org/FreeBSD/docs/Quick_and_dirty_FreeBSD_5_x_and_nss_ldap_mini-HOWTO.html Originaalselt kasutatud selle pala kirjutamise juures
 
* http://kuutorvaja.eenet.ee/wiki/OpenLDAP_kasutamine_Debianiga
 
* http://kuutorvaja.eenet.ee/wiki/OpenLDAP_kasutamine_Debianiga
* http://www.gentoo.org/doc/en/ldap-howto.xml Ldap ja Gentoo
 
* http://www.openldap.org/pub/ksoper/OpenLDAP_TLS.html
 

Redaktsioon: 6. juuni 2010, kell 20:03

LDAP

(Lightweight Directory Access Protocol) http://www.openldap.org/ on Michigani Ülikooli (University of Michigan) poolt välja töötatud kataloogiteenuse protokoll asendamaks X.500 DAP (Directory Access Protocol) protokolli. Süsteemis pakub ta võimalust ühe teenuse piires hoida ning väljastada mitmesugust kasutajakontode kohta käivat infot. Näiteks hoida lisaks kasutaja paroolile ja nimele veel tema kontaktandmeid, samba parooli jms. Samuti saab ldap’i hästi kasutada kui on mitu serverit (mail, www, samba, terminaliserver) ning oleks vaja, et samad kasutajad eksisteeriksid kõigis neis serverites. Käesolev näide sobibki sellise lahenduse loomiseks kõige paremini :)

Serveri pool

Installime openldap serveri

FreeBSD's

cd /usr/ports/net/openldap22-server/ && make install

teises os'ides vastavalt siis emerge apt-get install etc

Süsteemi paigaldatakse ka berkeley db, mida openldab defauldis kasutab, kuid on võimalik seada see tööle ka nö näiteks postgresql peal.

genereerime serverile parooli

 # slappasswd -s parool
{SSHA}nPKG3qbPABkp21aTBZV2IpbcGUHLi3a2

liigume /usr/local/etc/openldap ning avame faili slapd.conf, lisame sinna

include         /usr/local/etc/openldap/schema/core.schema
include         /usr/local/etc/openldap/schema/cosine.schema
include         /usr/local/etc/openldap/schema/nis.schema
pidfile         /var/run/ldap/slapd.pid
argsfile        /var/run/ldap/slapd.args
database        bdb
suffix          "dc=test,dc=org"
rootdn          "cn=Manager,dc=test,dc=org"
rootpw          {SSHA}nPKG3qbPABkp21aTBZV2IpbcGUHLi3a2
directory       /var/db/openldap-data
index           objectClass     eq
index           uid             pres,eq,sub

Selleks, et toimiks kõik info liigutamine TLS krüpteeritult, genereerime võtmed ja lisame konfi read, näiteks

# Define SSL and TLS properties (optional)
TLSCertificateFile /etc/ssl/ldap.pem
TLSCertificateKeyFile /etc/openldap/ssl/ldap.pem
TLSCACertificateFile /etc/ssl/ldap.pem

Selleks, et kliendid saaksid küll anonüümselt audentida vastu ldap serverit, kuid mitte lugeda krütpeeritud paroole, aitavad read

access to attrs=userPassword
       by self write
       by anonymous auth
       by * none
access to *
       by * read

natuke failiõigusi paika lihtsalt igaksjuhuks

chmod 440 /usr/local/etc/openldap/slapd.conf
chown ldap:ldap /usr/local/etc/openldap/slapd.conf
chown -R ldap:ldap /var/db/openldap*

/etc/rc.conf’i lisame ldap’i teenuse käivitamiseks boodil

slapd_enable="YES"
slapd_flags='-h "ldapi://%2fvar%2frun%2fopenldap%2fldapi/ ldap://0.0.0.0/"'
slapd_sockets="/var/run/openldap/ldapi"

peale rebooti võime sockstatiga kontrollida kas ldap kuulab 389 pordil

Nüüd loome test.ldiff faili ning ekspordime selle ldap’i, sellega paneme paika kogu struktuuri

dn: dc=test,dc=org
dc: test
objectClass: top
objectClass: domain
objectClass: domainRelatedObject
associatedDomain: test.org
structuralObjectClass: domain
dn:ou=groups, dc=test, dc=org
objectclass: top
objectclass: organizationalUnit 
ou: groups
structuralObjectClass: organizationalUnit
dn:ou=people, dc=test, dc=org
objectclass: top
objectclass: organizationalUnit
ou: people
structuralObjectClass: organizationalUnit

Teeme failist eksportimise

# slapadd -l test.ldiff

Kaks uute userite lisamise template’t. Slappadd’ga saab nende failide abil ldap’i kasutajad testuser ja testuser2. Muidugi võib kirjutada mingi shellskripti, mis parameetritena võtab kasutaja parooli ja grupi ning loob kodukatalooma lisaks ka :) Genereerida tuleb ka slappasswd’ga parool mõlemale kasutajale

Esimene kasutaja testuser.ldiff

dn: cn=StupidTest User, ou=people, dc=test, dc=org
cn: StupidTest User
sn: Dummy
objectclass: top
objectclass: person
objectclass: posixAccount
objectclass: shadowAccount
uid:testuser
userpassword:{SSHA}GmbwsRvJugoiT5NIIJ2bk+5YVfWMUVa1
uidnumber:1000
gidnumber:1000
gecos:Niisama ldap user
loginShell:/bin/csh
homeDirectory: /home/test
dn: cn=test, ou=groups, dc=test, dc=org
objectclass: top
objectclass: posixGroup
cn: test
gidnumber: 1000
memberuid: test
  1. slapadd -l testuser.ldiff

Teine kasutaja testuser2.ldiff

dn: cn=StupidTest User2, ou=people, dc=test, dc=org
cn: StupidTest User2
sn: Dummy
objectclass: top
objectclass: person
objectclass: posixAccount
objectclass: shadowAccount
uid:testuser2
userpassword:{SSHA}wU0T6ixZb9sU2+JTK8Au8sq7noNfMkbv
uidnumber:1001
gidnumber:1001
gecos:TestUser
loginShell:/bin/csh
homeDirectory: /home/test2 
dn: cn=test2, ou=groups, dc=test, dc=org
objectclass: top
objectclass: posixGroup
cn: test2
gidnumber: 1001
memberuid: test2
# slapadd -l testuser2.ldiff

Kliendi pool

Installime nss_ldap ja pam_ldap softi, sellekäigus paigutatakse süsteemi ka openldap-client

cd /usr/ports/net/nss_ldap && make install clean
cd /usr/ports/security/pam_ldap/ && make install

lisame /etc/pam.d/ldap faili 5x puhul või /etc/pam.conf 4x süsteemis rea

login   auth    sufficient      /usr/local/lib/pam_ldap.so

lähme /usr/local/etc ning nimetame nss_ldap.conf.sample nss_ldap.conf loome sellest softlingi ldap.conf’ile

ln -s /usr/local/etc/ldap.conf /usr/local/etc/nss_ldap.conf

kirjutame ldap.conf’i

ssl start_tls
tls_checkpeer no
ldap_version 3
host 192.168.1.1 <- siia siis ldap serveri ip
suffix          "dc=test,dc=org"
nss_base_passwd ou=People,dc=test,dc=org?sub
nss_base_group ou=Group,dc=test,dc=org?sub 
nss_base_shadow ou=people,dc=test,dc=org?sub

BASE    dc=test, dc=org
scope sub

pam_password exop
pam_filter objectclass=posixAccount
pam_login_attribute uid
pam_member_attribute memberuid


avame faili /etc/nsswitch.conf ning kirjutame sinna

passwd:  files ldap
group:   files ldap

nüüd kirjutame /etc/pam.d/sshd konfi

auth            sufficient      /usr/local/lib/pam_ldap.so no_warn try_first_pass
auth            required        pam_unix.so

kommenteerime kõik muud read vastavalt teiste teenuste pam konfidesse, /etc/pam.d all tuleb lisada samad read, kui huvi ka neid saada ldap’ilt auth’ima, nagu ftp imap jms

# id testuser
uid=1000(testuser) gid=1000 groups=1000
# id testuser2
uid=1001(testuser2) gid=1001 groups=1001
# finger testuser
Login: testuser                         Name: Niisama ldap user
Directory: /home/test                   Shell: /bin/csh
Never logged in.
No Mail.
No Plan.
# ssh testuser2@localhost
Password:
Last login: Tue May 31 14:54:12 2005 from localhost
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
       The Regents of the University of California.  All rights reserved.

FreeBSD 5.4-RELEASE (GENERIC) #0: Sun May  8 10:21:06 UTC 2005
Welcome to FreeBSD!
Could not chdir to home directory /home/test2: No such file or directory

viimane rida näitab, et tuleks luua ka serverisse kodukataloog userile ning see nfs’i abil jagada kliendile :)

Linux ldap klient

Installida tuleb samad paketid nagu nss_ldap ja pam ldap

/etc/lpdap.conf'i kasutame sama, mis bsd'l

pam'i konfimiseks kirjutame faili

/etc/pam.d/system-auth

read

auth    required    pam_env.so
auth    sufficient  pam_unix.so likeauth nullok shadow
auth    sufficient  pam_ldap.so use_first_pass
auth    required    pam_deny.so

account requisite  pam_unix.so
account sufficient pam_localuser.so
account required   pam_ldap.so

password    required pam_cracklib.so retry=3
password    sufficient pam_unix.so nullok use_authtok shadow md5 plain
password    sufficient pam_ldap.so use_authtok use_first_pass
password    required pam_deny.so

session required    pam_limits.so
session required    pam_unix.so
session required    pam_mkhomedir.so skel=/etc/skel/ umask=0066
session optional    pam_ldap.so

Haldusvahendid

Enda serveri lokaalsete kasutajate ldap’i viimiseks vajalikud skriptid saab http://www.padl.com/OSS/MigrationTools.html Ühtteist saab veel teha näiteks automount ja samba http://www.idealx.org/prj/samba/samba-ldap-howto.pdf ning veebiliides muretseda. Viimaseid on mitmeid kirjutatud, aga alati võib ka ise midagi nokitseda http://ee.php.net/manual/en/ref.ldap.php

Lisaks veel … Yet Another Passwd 2 LDIF Converter http://freshmeat.net/projects/yap2lc/?topic_id=861

Web-based password changing cgi script for LDAP-based user databases http://www.cloudmaster.com/~sauer/projects/fom-files/cache/90.html

Kasutajate administreerimiseks http://cpu.sourceforge.net/

Muidugi ka http://phpldapadmin.sourceforge.net

Ldap ja Apache

htaccess vastu ldap'i audentima leidsin kõige lollikindlam panna vastu pam'i mis omakorda ldap külge ehk siis kuigi apachel on tore moodul auth_ldap teatas minu ldap server ,et kasutagem ldapv3 mitte mingit iidset protokolli. Apachet saab ka muidugi ldap'i toega kompileerida.

loomulikult siis tehtud bsd peal aga peaks toimima ka linuxil täpselt samuti. Apache 222 puhul võib olla kõik veel omasoodu erinev. ldap.conf

ssl start_tls
tls_checkpeer no
suffix          "dc=domeen,dc=ee"
host 192.168.1.100
base dc=domeen,tdc=ee
ldap_version 3
pam_password SSHA
nss_base_passwd ou=people,dc=domeen,dc=ee?sub
nss_base_group ou=groups,dc=domeen,dc=ee?sub

installime peale ka pam_ldap mooduli

portsude alt make mod_auth_pam'ile ja apache's read lisada

LoadModule auth_pam_module    libexec/apache2/mod_auth_pam.so
LoadModule auth_sys_group_module libexec/apache2/mod_auth_sys_group.so


/etc/pam.d alla tekitasin faili httpd kuhu kirjutasin read

auth            sufficient      /usr/local/lib/pam_ldap.so no_warn try_first_pass
auth            required        pam_unix.so             no_warn try_first_pass

ja siis lihtsalt .htaccess vajalikku kohta näiteks

AuthType Basic
AuthName "secure area"
require user kasutaja

FreeBSD 4.x korral tuleb muuta faili /etc/pam.conf lisades sinna

httpd    auth       required     /usr/local/lib/pam_ldap.so
httpd    account    required     /usr/local/lib/pam_lda

Ldap ja db uuendamine

Kasutades dbd backendit võib selle uuendamisel ldap mitte enam toimida selljuhul aitab näiteks

db4.5_recover -v -h /var/lib/openldap-data/
chown -R ldap\: /var/lib/openldap-data/

Kasulikud lisamaterjalid