Please Donate to Bitcoin Address : [[address]]

Donation of [[value]] BTC Received. Thank You.
[[error]]

Centos 7’de OpenLDAP Sunucu Kurulumu ve Ayarlanması

Bu yazıda OpenLDAP’ın Centos 7’de nasıl kurulacağı, standart bir LDAP ağacının nasıl oluşturulacağı, LDAP’ın SSL ile nasıl entegre çalışacağı ve LDAP’tan doğrulama yapan Linux client’ları hakkında bir şeyler anlatacağım. OpenLDAP sunucusuyla alakalı her şey Centos 7.1 üzerinde çalışacak şekilde bu dokümanı yazıyorum. Client ayarlamaları kısmına geldiğinizde ilgili spec bilgilerini o başlıklarda bulabileceksiniz.

OpenLDAP ?

Open – Lightweight Directory Access Protocol. Yani bir protokolün açık kaynak bir implementasyonu.

Yeniyo mu içiliyo mu diye ekstra bakmak isteyen buradan bakabilir.

Sunucuda Yapılması Gerekenler

Ben sunucunun FQDN’ini ldap.aydintd.net olarak geçireceğim bu yazıda. LDAP domain’i ile sunucunun hostname domainin aynı olmasında fayda var.

Bunun dışında internet bağlantısı ve paket deponuzun güncel olduğundan + epel deposunun sisteminizde yer aldığından emin olun.

# yum install epel-release; yum update -y

Son olarak firewalld üzerinden ldap ve ldaps portlarını açıp aktif hale getirmek gerekiyor.

Aşağıdaki şekilde active zone’u ve tanımlı interface’i öğrenin :

# firewall-cmd --state
> running
# firewall-cmd --get-active-zones
> public
  interfaces : enp0s3

Public zone üzerinde enp0s3 interface’i üzerinde ldap servis portlarını aşağıdaki komutlarla açın :

# firewall-cmd --permanent --zone=public --add-service=ldap
# firewall-cmd --permanent --zone=public --add-service=ldaps
> success
# firewall-cmd --reload
> success

Aşağıdaki şekilde ilgili servis portlarının açıldığından emin olabilirsiniz :

# firewall-cmd --zone=public --list-all
public (default, active)
  interfaces: enp0s3
  sources: 
  services: dhcpv6-client ldap ldaps ssh
  ports: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules:

Son olarak ben SELinux’u disable ettim 🙁 ben ettim, siz etmeyin.

# getenforce
> Disabled

OpenLDAP Kurulumu

Aşağıdaki openldap paketlerini sisteminize kurun. :

# yum install openldap-servers openldap-clients openldap -y

Öntanımlı DB_CONFIG dosyasını /var/lib/ldap/DB_CONFIG olarak kopyalayıp, slapd servisini başlatın :

# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# chown ldap. /var/lib/ldap/DB_CONFIG
# systemctl start slapd
# systemctl enable slapd

Bu kısımdan sonrasında internette görebileceğiniz ayarlanma aşamaları farklılık gösterecektir.  Genel olarak iki yaklaşım var, ilki her bir LDAP ayarını ldif uzantılı dosyalar yaratarak LDAP’ta ayarlamak. İkincisiyse /etc/openldap/slapd.d altındaki ayar dosyalarını düzenleyerek gitmek.

Ben ilkini tercih edeceğim.

OpenLDAP Ayarlanması

OpenLDAP parolası oluşturup sisteme eklemekle başlayalım :

# slappasswd 
New password: 
Re-enter new password: 
{SSHA}W9GbB7tV/5xpR97jgIwL5PM9aGzb3Zp+

Size output olarak verdiği SSHA hashini olcRootPW olarak aşağıdaki şekilde bir ldif dosyası tanımlayıp bunu sisteme aşağıdaki şekilde tanımlayın :

Çalışma yöntemi olarak ben ldif dosyalarının isimlendirmelerine dikkat ediyorum, hangi işi hangi dosyada yaptığınızı görmek işinizi kolaylaştıracaktır.

# mkdir /root/ldif_files ; cd /root/ldif
# vim change_rootpw.ldif

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}W9GbB7tV/5xpR97jgIwL5PM9aGzb3Zp+

Dosyayı kaydedip çıkın ve aşağıdaki şekilde OpenLDAP sunucusuna bu ayarı gönderin :

# ldapadd -Y EXTERNAL -H ldapi:/// -f change_rootpw.ldif
 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"

Örneğin olcDatabase={0}config,cn=config dosyası aynı zamanda /etc/openldap/slapd.d/cn=config altında yer alıyor. İlgili değişikliğin bu dosyada yer aldığını görebilirsiniz.

openldap-servers paketinin içersinde bir çok öntanımlı LDAP şemaları geliyor. Bu şemaları sisteme aşağıdaki şekilde eklemekte fayda var :

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif 

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif 

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=nis,cn=schema,cn=config"

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif 

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=inetorgperson,cn=schema,cn=config"

# ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/ppolicy.ldif 

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=ppolicy,cn=schema,cn=config"

Bu şemalar bir çok özelliği OpenLDAP sunucusuna kazandıracak işlevler (objectClass). Çeşitli password-policy ler, Linux sistemlerde sistem kullanıcılarına özel loginShell vb. gibi işlevleri bize kazandıracak. Daha fazla bilgi için buradan.

Şimdi LDAP domain bilgilerini ayarlamak gerekiyor. aşağıdaki gibi chdomain.ldif isimli bir ldif dosyası yaratıp sisteme eklemeden önce, ağacı yönetmek için yaratacağınız admin RootDN’i için bir admin parolasını tekrar slappasswd komutu kullanarak oluşturun ve aşağıdaki dosyaya bu kullanıcı için yarattığınız parolayı yazın :

# vim /root/ldif/chdomain.ldif

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=aydintd,dc=net" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=aydintd,dc=net

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=admin,dc=aydintd,dc=net

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}gLAhP8sgS0x6Bfaz8dTL9wmwSUbMyeJF

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
  dn="cn=admin,dc=aydintd,dc=net" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=admin,dc=aydintd,dc=net" write by * read

Aşağıdaki komutu verip sisteme ldif dosyasını gönderelim :

# ldapmodify -Y EXTERNAL -H ldapi:/// -f chdomain.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

Bu dosyada openldap suffix’inin ne olacağını, manager dn bilgisi ve parolasının ne olacağını set ettik ve manager dn’den başka diğer ldap ağacında kendini domaine dahil edebilmiş kullanıcıların ağacı yönetmesinin önüne geçmek için ayarlar yaptık.

Benim örneğimde;

suffix : dc=aydintd,dc=net , rootdn : cn=admin,dc=aydintd,dc=net olacak şekilde ayarladım. Kendi ayarlamalarınız yaparken bu kısımları dosya içersinde değiştirmeyi unutmayın.

Son olarak LDAP ağacını oluşturalım. Ben aydintd adında bir organization, admin adında bir organizationRole ve people ve groups adında iki organizationalUnit oluşturacağım.

# cd /root/ldif 
# vim basedomain.ldif

dn: dc=aydintd,dc=net
objectClass: top
objectClass: dcObject
objectclass: organization
o: aydintd
dc: aydintd

dn: cn=admin,dc=aydintd,dc=net
objectClass: organizationalRole
cn: Admin
description: Directory Manager

dn: ou=People,dc=aydintd,dc=net
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=aydintd,dc=net
objectClass: organizationalUnit
ou: Group

Aşağıdaki şekilde sisteme ekleyelim :

# ldapadd -Wx -D cn=admin,dc=aydintd,dc=net -f basedomain.ldif 
Enter LDAP Password: 
adding new entry "dc=aydintd,dc=net"

adding new entry "cn=admin,dc=aydintd,dc=net"

adding new entry "ou=People,dc=aydintd,dc=net"

adding new entry "ou=Group,dc=aydintd,dc=net"

Artık ağacı yönetmeye başladığımızdan bu işlemi cn=admin,dc=aydintd,dc=net kullanıcısıyla yaptığımıza dikkat edin.

OpenLDAP ağacı boş bir şekilde buraya kadar bir problemle karşılaşmamışsanız oluşmuş olmalı. Bir kaç ldap sorgusuyla ldap sunucumuzdan bilgileri alalım :

# ldapsearch -Wx -D cn=admin,dc=aydintd,dc=net -b "dc=aydintd,dc=net"
Enter LDAP Password: 
# extended LDIF
#
# LDAPv3
# base <dc=aydintd,dc=net> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# aydintd.net
dn: dc=aydintd,dc=net
objectClass: top
objectClass: dcObject
objectClass: organization
o: aydintd
dc: aydintd

# admin, aydintd.net
dn: cn=admin,dc=aydintd,dc=net
objectClass: organizationalRole
cn: Admin
description: Directory Manager

# People, aydintd.net
dn: ou=People,dc=aydintd,dc=net
objectClass: organizationalUnit
ou: People

# Group, aydintd.net
dn: ou=Group,dc=aydintd,dc=net
objectClass: organizationalUnit
ou: Group

# search result
search: 2
result: 0 Success

# numResponses: 5
# numEntries: 4

Gördüğünüz üzere LDAP sorgusu yanıt döndü ve bize LDAP ağacını listeledi.

OpenLDAP’ı SSL Çalıştırmak

SSL bağlantılar için LDAP sunucuda bir openssl anahtarı ve sertifikası kullanmanız gerekiyor. Ben bu işlem için self-signed bir sertifika yaratıp devam edeceğim.

SSL sertifikası yaratmak için aşağıdaki adımları uygulayın :

# cd /etc/pki/tls/certs
# echo "03" >> file.srl
# openssl req -out ca.pem -new -x509
# openssl genrsa -out server.key 1024
# openssl req -key server.key -new -out server.req 
# openssl x509 -req -in server.req -CA ca.pem -CAkey privkey.pem -CAserial file.srl -out server.pem

Bu süreç sonunda /etc/pki/tls/certs dizininde ca.pem, server.pem, server.key dosyaları yaratılmış olacak. Bu dosyalar ile
TLS kullanarak LDAPS bağlantısı gerçeklenebilecek.

Şimdi OpenLDAP sunucusunu ldaps çalışacak şekilde ayarlamalarını yapalım :

# vim /etc/sysconfig/slapd

SLAPD_URLS="ldapi:/// ldap:/// ldaps:///"

şeklinde ldaps:/// satırını ekleyin. Daha sonra SSL’i etkin kılmak için aşağıdaki ldif dosyasını oluşturup sisteme eklememiz gerekiyor :

# vim /root/ldif/mod_ssl.ldif

dn: cn=config
changetype: modify
replace: olcTLSVerifyClient
olcTLSVerifyClient: allow
-
replace: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/pki/tls/certs/ca.pem
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/pki/tls/certs/server.pem
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/pki/tls/certs/server.key
# ldapmodify -Y EXTERNAL -H ldapi:/// -f mod_ssl.ldif

slapd daemon’unu yeniden başlattığınızda OpenLDAP sunucunun SSL’den bağlantı kabul eder hale gelmesi gerekiyor.

# systemctl restart slapd

# netstat -ntlpd

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:389             0.0.0.0:*               LISTEN      12000/slapd         
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1153/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1858/master         
tcp        0      0 0.0.0.0:636             0.0.0.0:*               LISTEN      12000/slapd         
tcp6       0      0 :::389                  :::*                    LISTEN      12000/slapd         
tcp6       0      0 :::22                   :::*                    LISTEN      1153/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1858/master         
tcp6       0      0 :::636                  :::*                    LISTEN      12000/slapd

Bu çıktıdan 389 ve 636 portlarının slapd tarafından bind edildiğini görebilirsiniz.

SSL üzerinden sorgu göndererek bağlantı açıp açamadığınızı test edebilirsiniz :

# ldapsearch -LLL -H ldaps://localhost -Wx -D "cn=admin,dc=aydintd,dc=net" -b "dc=aydintd,dc=net" "(objectClass=*)" 
Enter LDAP Password: 
dn: dc=aydintd,dc=net
objectClass: top
objectClass: dcObject
objectClass: organization
o: aydintd
dc: aydintd

dn: cn=admin,dc=aydintd,dc=net
objectClass: organizationalRole
cn: Admin
description: Directory Manager

dn: ou=People,dc=aydintd,dc=net
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=aydintd,dc=net
objectClass: organizationalUnit
ou: Group

Can't contact to LDAP Server hatası almanız normal. LDAP clientınızı (bu örnekte konsol istemcisi) SSL/TLS doğrulaması için bilinmeyen bir sertifika otoritesiyle imzalanmış bir SSL anahtarına öntanımlı güvenmediğinden bağlantıyı drop ediyor. Bu ayarı aşağıdaki şekilde değiştirin :

/etc/openldap/ldap.conf dosyasında TLS_REQCERT allow satırını ekleyip dosyayı kaydedin ve tekrar deneyin. Benim örneğimdeki çıktı gibi ağacınızı görünteleyebiliyor olacaksınız. Debug mod için ldapsearch komutuna -d1 parametresi geçirerek de self-troubleshooting yapabilirsiniz.

OpenLDAP Yönetimi

LDAP sunucu çalışıyor ancak LDAP’ı konsoldan yönetmek hayli zorlaştırıyor işi. Bu yüzden çeşitli web arayüzü yönetim panelleri (LDAP Account Manager vb.) Ya da Desktop uygulamaları Apache Directory Studio gibi programlar var.

Ben burada Apache Directory Studio kullanarak LDAP sunucunuza nasıl SSL üzerinden bağlanıp, nasıl kullanıcı ve grup yönetebileceğinizi göstereceğim.
Kendi bilgisayarınıza Apache Directory Studio’yu aşağıdaki adresten indirin :

$ wget http://ftp.itu.edu.tr/Mirror/Apache/directory/studio/2.0.0.v20150606-M9/ApacheDirectoryStudio-2.0.0.v20150606-M9-linux.gtk.x86_64.tar.gz
$ tar -xzvf ApacheDirectoryStudio-2.0.0.v20150606-M9-linux.gtk.x86_64.tar.gz 
$ cd ApacheDirectoryStudio
$ ./ApacheDirectoryStudi

ADS bir Eclipse IDE aslında. LDAP ağaçlarını yönetmek için size sade bir arayüz sunuyor.

Ben böyle ekran görüntüsü koyup blog yazmayı sevmem. O yüzden tarif ederek devam edeceğim.

ADS açıldıktan sonra sol alt köşede Connections göreceksiniz. Oradan yeni bir connection ekleyip sunucu bilgilerini girmemiz gerekiyor.

New Connection dedikten sonra açılan ekranda Connection Name: kısmına ben sunucunun fqdn’ini yazmayı seviyorum, siz de istediğiniz bir isim belirleyebiirisiniz. Geri kalanını aşağıdaki gibi düzenleyebilirsiniz :

Connection Name : ldap.aydintd.net
Hostname : 192.168.56.4
Port : 636
Encryption Method : Use SSL Encryption (ldaps:///)

Provider : Apache Directory LDAP Client API

Check Network Parameter ile bağlantıyı test edebilirsiniz.

Next dedikten sonra size LDAP ağacını yöneteceğiniz RootDN bilgilerini isteyecek. LDAP sunucusunu kurarken oluşturduğumuz dc=admin,dc=aydintd,dc=net ve parolası bu kullanıcının ta kendisi. Doğru bilgileri ekranda seçtikten sonra size self-signed sertifika uyarısı verecektir. Always trust this certificate diyebilirsiniz.

Daha sonra Finish dediğinizde sol menüde size ağacı görüntüleyecektir. LDAP ağacına kullanıcı, grup vb. sadece tıklayıp ilgili attributeClass veya objectClass’ları seçerek istediğiniz gibi yönetebileceğiniz bir arayüz imkanı size sunacaktır.

Bir sonraki blog yazımdaysa LDAP’ta tanımlı kullanıcıların Authentication mekanizmalarına nasıl dahil edilebileceğinden bahsedeceğim. Şimdilik yoruldum, uzun zaman olmuştu zaten blog yazmayalı.

Sevgiler 🙂

Bir cevap yazın

I'm not a freaking robot : Time limit is exhausted. Please reload CAPTCHA.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

13 Ağustos 2015

Posted In: Sistem, Teknik

Etiketler:, , ,

Leave a Comment