УНИТе

Портал > Документация > LDAP клиентски софтуер за достъп до LDAP сървъра

LDAP клиентски софтуер за достъп до LDAP сървъра

Съдържание:

  1. Предварителна информация
  2. Web-базиран LDAP клиент върху отдалечен сървър
  3. LDAP клиент в команден ред, базиран на пакета openldap-clients

 

1. Предварителна информация

Целта на този документ е да запознае новите потребители и администратори на LDAP сървъри с най-популярните LDAP клиенти. По-долу са описани два - един с web-интерфейс и един, който се използва от команден ред. Разбира се, съществуват и други LDAP клиенти, които могат да бъдат използвани и които не са описани по-долу (такъв е например Apache Directory Studio, който е базиран на Eclipse). При заявка и интерес, те могат да бъдат добавени към документацията.

 

2. Web-базиран LDAP клиент върху отдалечен сървър

За момента, най-популярният и използван web-базиран LDAP клиент, който се изпълнява върху отдалечен сървър през браузъра на клиента, е phpldapadmin. В този случай, за да достъпите клиента, вие трябва да имате само браузър, чрез който да се свържете до web-сървъра, на който се намира инсталацията на phpldapadmin.

За да инсталирате phpldapadmin на сървър работещ под CentOS 7 и Scientific Linux 7, трябва да имате върху него инсталиран, конфигуриран и работещ Apache web-сървър, с поддръжка на SSL (последното е задължително).

Инсталирането на phpldapadmin върху сървъра става по следния начин (като зависимост ще бъде инсталиран php):

# yum install phpldapadmin

След като phpldapadmin бъде инсталиран в системата, трябва да редактирате два файла:

  • /etc/httpd/conf.d/phpldapadmin.conf

    Тази конфигурация е нужна на Apache, за да може да намери локалните директории с инсталацията на phpldapadmin (от където да стартира/изпълнява php скриптовете) и за да може да предостави на потребителя URL чрез който (през браузър) той може да достъпи този софтуера:

    Alias /phpldapadmin /usr/share/phpldapadmin/htdocs
    Alias /ldapadmin /usr/share/phpldapadmin/htdocs
    
    <Directory /usr/share/phpldapadmin/htdocs>
      <IfModule mod_authz_core.c>
        Order allow,deny
         Allow from all
         Require all granted
      </IfModule>
    </Directory>

    В този пример, потребителят ще може да достъпи инсталацията на phpldapadmin, ако въведе в браузъра адресите (забележете какво стои след декларациите Alias):

    https://server_name/phpldapadmin

    https://server_name/ldapadmin

    Тук "server_name" е конкретното DNS име на сървъра, върху който е направена инсталацията на phpldapadmin.

  • /etc/phpldapadmin/config.php

    В този файл трябва да посочите адреса (като име на хост или IP адрес) на 389 директорийния сървър и да определите начина, по който ще става идентифицирането на потребителя. По подразбиране, phpldapadmin предполага, че 389 се изпълнява на същия физически сървър и е достъпен на адрес 127.0.0.1 (localhost). В повечето случаи това ще е така (обикновено phpldapadmin се инсталиран на същия сървър, на който се намира LDAP сървъра). Във всички други случаи ще трябва да зададете ръчно името на сървъра като разкоментирате следния ред:

    // $servers->setValue('server','host','127.0.0.1');

    (разкоментирането се състои в това да изтриете символите "// " така, че символа "$" да е в началото на реда) и след това да замените 127.0.0.1 с адреса (или DNS името) на отдалечения сървър:

    $servers->setValue('server','host','ds.unite-bg.eu');

    В случая, в който 389 сървъра е отдалечен е добре да вземете мерки за криптиране на комуникацията между него. За целта махнете коментара пред реда:

    // $servers->setValue('server','tls',false);

    и заменете "false" с "true":

    $servers->setValue('server','tls',true);

    Възможно е да искате да удостоверявате потребителя на база на неговия LDAP dn (вместо да използвате SASL). В този случай намерете тези два реда:

    // $servers->setValue('login','attr','dn');
    $servers->setValue('login','attr','uid');

    след това премахнете коментара пред първия ред и сложете коментар пред втория:

    $servers->setValue('login','attr','dn');
    // $servers->setValue('login','attr','uid');

    Запазете така направените промени в /etc/phpldapadmin/config.php и презаредете конфигурацията на Apache:

    # systemctl reload httpd
  • /etc/https/conf.d/ssl.conf (за достъп до клиента с потребителски X.509 сертификат)

    Ако трябва да защитите достъпа до интерфейса на phpldapadmin така, че да не е възможно произволен web-клиент да иницира каквото и да е изпълнение на php скрипт от инсталацията на phpldapadmin (което е добре да бъде направено), ще се наложи да редактирате файла /etc/https/conf.d/ssl.conf и в секцията "VirtualHost" да поставите следния блок деклрации:

    <Location /phpldapadmin>
      SSLOptions +StdEnvVars
      SSLVerifyClient require
      SSLVerifyDepth 2
    </Location>

    Освен това, трябва да бъде организирана валидацията на поребителските X.509 сертификати така, че до phpldapadmin да се допускат само тези web-клиенти, чиито сертификати са издадени от точно определен удостоверител(и). За целта, удостоверителските сертификати (един или повече, зависи от конкретния случай) трябва да се поставят във файла /etc/pki/tls/certs/ca.crt, и пътя до този файл да се укаже в /etc/https/conf.d/ssl.conf скед декларацията SSLCACertificateFile:

    SSLCACertificateFile /etc/pki/tls/certs/ca.crt

    Запазете така направените промени в /etc/https/conf.d/ssl.conf и презаредете конфигурацията на Apache:

    # systemctl reload httpd

Посетете адреса на phpldapadmin клиента (вижте по-горе как той се определя от адреса на web-сървъра и конкретния ресурс, асоцииран с директорията, която съдържа кода на клиента):

натиснете връзката "Login" (вляво) и въведете потребителското име или dn-а на потребителя, и паролата, след което натиснете "Authenticate":

Ако потребителското име (или dn-а) и паролата са валидни, ще получите достъп до интерфейса на phpldapadmin, в който ще можете лесно да навигирате с помощта на менютата в него:

 

3. LDAP клиент в команден ред, базиран на пакета openldap-clients

Проверете дали пакета openldap-clients е инсталиран:

$ rpm -q openldap-clients

Ако пакетът е вече инсталиран в системата, ще получите като резултат името на пакета и версията му:

openldap-clients-2.4.44-21.el7_6.x86_64

Ако пакетът не е наличен, инсталирайте го използвайки yum (нужни са права на super user):

# yum install openldap-clients

Инструментите, които този пакет предлага, са следните:

/usr/bin/ldapadd
/usr/bin/ldapcompare
/usr/bin/ldapdelete
/usr/bin/ldapexop
/usr/bin/ldapmodify
/usr/bin/ldapmodrdn
/usr/bin/ldappasswd
/usr/bin/ldapsearch
/usr/bin/ldapurl
/usr/bin/ldapwhoami

Всеки инструмент от списъка се извиква в командния интерпретатор (обикновено bash) и изисква (освен инструкциите към сървъра) да се въведе адреса на LDAP сървъра и dn-а, с който ще стане удостоверяването пред сървъра за изпълнение на заявените операции:

-H ldaps://server_name -D "cn=Directory Manager" -x -W

Например, изпълнението на заявка за търсене на dn по зададени атрибути, с използването на ldapsearch може да бъде направено така:

$ ldapsearch -H ldaps://hpc-service-host.unite.uni-sofia.bg -D "cn=Directory Manager" -b "ou=users,o=unite-bg.eu" -x -W 'uid=vesso' email

Забележете, че след -H е зададен протокол LDAPS (LDAP over SSL). Всички инструменти в пакета openldap-clients използват библиотеките на OpenSSL, за да създават криптирана връзка с LDAP сървъра. За да може да се гарантира достоверността на сървърския X.509 сертификат, копие от сертификата, който удостоверява веригата на този сертификат, трябва да бъде достъпен локално (в системата, в която ще се използват инструментите от openldap-clients). За да направите това, трябва да създадете отделна директория (поддиректория на домашната директория на потребителя, който ще използва инструментите), да поставите в нея копия от удостоверителските сертификати, които ще са ви нужни (не поставяйте там сертификати, чиято автентичност не сте проверили, или чието използване не очаквате):

$ mkdir ~/.cacerts

С цел илюстрация как сертификат може да попадне в тази директория, по-долу е даден пример с изтеглянето на X.509 сертификата на Удостоверителя на СУ:

$ ca ~/.cacerts
$ wget https://pki.uni-sofia.bg/crt/SU_ECC_Root_CA.crt

След като файла, който съдържа сертификата на удостоверителя, е изтеглен и поставен в директорията, трябва да се убедите, че той е във формат "PEM" (инструментите от пакета openldap-clients четат сертификати в този формат). За целта използвайте инструкциите, които са дадени в "Приложение 1: Как да определим дали един X.509 сертификат е във формат PEM или DER". Ако файлът съдържа сертификата в двоичен формат, прочетете в "Приложение 2: Конвертиране на X.509 сертификат от PEM в DER и обратно" как да го конвертирате в "PEM". След това изчислете контролната сума на сертификата:

$ ca ~/.cacerts
$ openssl x509 -fingerprint -sha256 -noout -in SU_ECC_Root_CA.crt

и я сравнете с тази, която е обявена от Удостоверителя.

Ако има съвпадение, трябва да създадете специален "symlink" обект, който да сочи към файла с копието на удостоверителския сертификат. Това може да направите съгласно инструкциите в "Приложение 3: Създаване на "symlink" към X.509 сертификат".

За да може да контролирате параметрите на SSL комуникацията (версия на SSL протолоа, шифри), трябва да създадете файла

~/.ldaprc

(този файл е локиран в домашната директория на потребителя, който ще използва инструментите в пакета openldap-clients) и в него да поставите следните три реда:

TLS_CACERTDIR /home/username/.cacerts
TLS_PROTOCOL_MIN 1.2
TLS_CIPHER_SUITE ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384

Отбележете, че след TLS_CACERTDIR стои пътя до директорията, в която се намира колекцията от удостоверителския X.509 сертификати, дискутирана по-горе. Заменете username в конкретното име на потребител.

Възможно е да направите така, че да не въвеждате всеки път паролата за dn-а, с който се удостоверявате пред LDAP сървъра. За целта трябва да създадете файл, който съдържа паролата (използвайте точно начина, който е описан по-долу!!!):

$ echo -n "password" > ~/.ldappasswd
$ chmod 400 ~/.ldappasswd

При изпълнението на този команден ред, вместо password укажете реалната парола. Така създадения файлъ с паролата може да се използва по следния начин:

$ ldapsearch -H ldaps://hpc-service-host.unite.uni-sofia.bg -D "cn=Directory Manager" -b "ou=users,o=unite-bg.eu" -y ~/.ldappasswd 'uid=vesso' email

 

Приложение 1: Как да определим дали един X.509 сертификат е във формат PEM или DER

  • проверка дали сертификата е в "PEM" формат:

    Изпълнете следния команден ред (заменете там файла "SU_ECC_Root_CA.crt" с този файл, съдържанието на който искате да проверите):

    $ openssl x509 -inform PEM -in SU_ECC_Root_CA.crt -noout

    Ако проверяваният файл съдържа X.509 сертификат и той е във формат "PEM", изпълнението на горния команден ред няма да изведе никакво съобщение. В случай, че бъде изведено съобщение и то има вида:

    $ unable to load certificate
    139929898715024:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:707:Expecting: TRUSTED CERTIFICATE

    това е ясна индикация, че в проверявания файл няма X.509 сертификат или ако го има, той е във формат "DER".

  • проверка дали сертификата е в "DER" формат:

    Изпълнете следния команден ред (заменете там файла "SU_ECC_Root_CA.crt" с този файл, съдържанието на който искате да проверите):

    $ openssl x509 -inform DER -in SU_ECC_Root_CA.crt -noout

    Ако проверяваният файл съдържа X.509 сертификат и той е във формат "DER", изпълнението на горния команден ред няма да изведе никакво съобщение. В случай, че бъде изведено съобщение и то има вида:

    $ unable to load certificate
    139929898715024:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:707:Expecting: TRUSTED CERTIFICATE

    това е ясна индикация, че в проверявания файл няма X.509 сертификат или ако го има, той е във формат "PEM".

 

Приложение 2: Конвертиране на X.509 сертификат от PEM в DER и обратно

Преди да пристъпите към процеса на конвертиране, трябва да проверите в какъв точно формат е съдържанието на X.509 сертификата. За целта използвайте инструкциите, които са дадени по-горе.

  • от "PEM" в "DER":

    Изпълнете следния команден ред (заменете там файла "SU_ECC_Root_CA.crt" с този файл, в който се намира "PEM" X.509 форматирания сертификат):

    $ openssl x509 -inform PEM -in SU_ECC_Root_CA.crt -outform DER -out SU_ECC_Root_CA.der
  • от "DER" в "PEM":

    Изпълнете следния команден ред (заменете там файла "SU_ECC_Root_CA.crt" с този файл, в който се намира "PEM" X.509 форматирания сертификат):

    $ openssl x509 -inform DER -in SU_ECC_Root_CA.crt -outform PEM -out SU_ECC_Root_CA.pem

 

Приложение 3: Създаване на "symlink" към X.509 сертификат

Тези потребителски инструменти и демони на услуги в CentOS 7 и Scientific Linux 7, които разчитат на библиотеките OpenSSL, за да работят със сертификатния модел X.509, се нуждаят от хранилище, в което се намират X.509 сертификатите на удостоверителите (издателите) на сървърски или клиентски сертификати. Това хранилище е директория, в която се намират копия на удостоверителските X.509 сертификати, в "PEM" формат (виж информацията по-горе за конвертиране на сертификатите от един формат в друг). За да са читаеми от библиотеките на OpenSSL, файловете в тази директория файловете със сертификатите трябва да имат специфично име, което съдържа контролната сума на "Subject" полето в X.509 сертификата. От друга страна, тези контролни суми са неразбираеми на пръв поглед шестнадесетични числа и с нищо не спомагат за добрата системна администрация или управление на съдържанието във въпросната директория. Изход от ситуацията е оригиналното име на файла да се запази, а само да се направи "symlink", чието име да е контролната сума. Това става по следния начин:

Изпълнете скрипта /etc/pki/tls/misc/c_hash, като след пътя и файла със скрипта посочите файл, съдържащ X.509 сертификат:

$ /etc/pki/tls/misc/c_hash SU_ECC_Root_CA.crt

Резултатът, който ще получите ще има следния вид:

4c5f24de.0 => SU_ECC_Root_CA.crt

В началото ще е името на "symlink" обекта, който трябва да създадете (4c5f24de.0, за примера) и след него, посочен със стрелка, ще е файла със сертификата. На база на тази информация създавате нов "symlink" към файла със сертификата по следния начин (за примера това е файла "SU_ECC_Root_CA.crt"):

$ ln -s SU_ECC_Root_CA.crt 4c5f24de.0

Забележете цифрата 0 в края на името на създадения "symlink". Защо е нужно да има това разширение? Възможно е в същата директория да има два X.509 сертификата, с една и съща стойност на "Subject" полето. Очевидно е, че в в този случай, числото преди "." ще е едно и също. Т.е. ако "symlink" обекта за два сертификата е с едно и също име (число), то е ясно, че няма как да се създадат тези два "symlink" обекта в една и съща директория, защото те ще са релно два различни файла с едно и също име (а това не се допуска от файловата система). Един начин да се реши този проблем с колизията на имена на файлове е, след числото на "symlink" обекта, да се сложи наставка (разширение). Например, ".0" в примера по-горе е такова разширение. Използвайки различно разширение (".0", ".1'" и т.н), два "symlink" обекта, които съдържат едно и също число в името си, могат да съществуват в една директория.

 


Последна актуализация: 13 април 2019

2019 УНИТе, Веселин Колев