Ubuntu 12.04 VPS Üzerine Temel Bir LDAP Sunucusu Kurulumu ve Yapılandırması
Giriş
LDAP (Lightweight Directory Access Protocol), dağıtık bilgi servislerine erişmek ve bu servisleri yönetmek için kullanılan bir uygulama katmanı protokolüdür. Genellikle kullanıcı hesapları, gruplar, ağ kaynakları ve diğer sistemler için merkezi bir dizin hizmeti sağlamak amacıyla kullanılır. Bir kurum içindeki tüm kullanıcıların ve kaynakların tek bir yerden yönetilmesine olanak tanıyarak BT altyapısını basitleştirir ve güvenliği artırır. Örneğin, bir kullanıcının Active Directory veya OpenLDAP gibi bir LDAP sunucusunda tanımlanması, o kullanıcının e-posta, dosya sunucusu, VPN ve diğer uygulamalara tek bir kullanıcı adı ve şifre ile erişmesini sağlayabilir.
Bu makale, nispeten eski bir sürüm olmasına rağmen, hala belirli ortamlarda karşılaşılabilecek olan Ubuntu 12.04 LTS (Precise Pangolin) üzerinde temel bir OpenLDAP sunucusunun nasıl kurulacağını ve yapılandırılacağını adım adım açıklamaktadır. Ubuntu 12.04, uzun süreli destek (LTS) sürümü olması nedeniyle, yayınlandığı dönemde birçok sunucu ortamında kullanılmıştır ve bazı eski sistemlerin bakımı veya yeniden oluşturulması gerektiğinde bu bilgi hala değerli olabilir. Bir VPS (Virtual Private Server) ortamı, bu tür bir kurulum için maliyet etkin ve esnek bir platform sunar. Bu makale, LDAP’ın temel kavramlarını tanıtacak, kurulum adımlarını detaylandıracak, temel yapılandırmaları ve güvenlik önlemlerini ele alacak ve yaygın sorunlara çözümler sunacaktır.
Ön Gereksinimler
Bu rehberi takip edebilmek için aşağıdaki ön gereksinimlere sahip olmanız gerekmektedir:
* Ubuntu 12.04 LTS VPS: Root erişimi veya sudo yetkilerine sahip bir kullanıcı ile çalışan bir Ubuntu 12.04 sanal özel sunucusuna sahip olmalısınız.
* SSH Erişimi: Sunucunuza SSH üzerinden bağlanabilmelisiniz.
* Temel Linux Bilgisi: Komut satırı kullanımı, dosya düzenleme (nano veya vi gibi metin düzenleyiciler) ve temel sistem yönetimi konularında bilgi sahibi olmanız beklenir.
* Domain Adı: LDAP dizininizi yapılandırmak için bir DNS domain adına ihtiyacınız olacak (örneğin, example.com). Bu, dizin tabanınızın (dc=example,dc=com) belirlenmesinde kullanılacaktır. Gerçek bir domain’e sahip olmasanız bile, dahili ağınızda kullanmak üzere bir ad belirleyebilirsiniz.
* Güncel Sistem: Kuruluma başlamadan önce sistem paketlerinin güncel olduğundan emin olmak iyi bir pratiktir.
LDAP Kavramlarına Kısa Bir Bakış
LDAP’ın çalışma prensiplerini anlamak, kurulum ve yapılandırma süreçlerini kolaylaştıracaktır. İşte temel LDAP kavramları:
* DIT (Directory Information Tree – Dizin Bilgi Ağacı): LDAP dizinindeki tüm verilerin hiyerarşik bir ağaç yapısında düzenlenmesidir. Kökten dallara ve yapraklara doğru ilerleyen bir yapıya sahiptir, tıpkı bir dosya sistemi gibi.
* DN (Distinguished Name – Ayırt Edici Ad): Bir LDAP dizinindeki her bir girdiyi (entry) benzersiz şekilde tanımlayan tam yoldur. Ağaçtaki kökten o girdiye kadar olan tüm göreceli ayırt edici adların (RDN) birleşimidir. Örneğin, cn=John Doe,ou=People,dc=example,dc=com.
* RDN (Relative Distinguished Name – Göreceli Ayırt Edici Ad): Bir girdinin, üst girdisine göre benzersiz adıdır. DN’nin en spesifik (en soldaki) parçasıdır. Örneğin, cn=John Doe veya ou=People.
* Schema (Şema): LDAP dizinindeki girdilerin hangi tür özelliklere sahip olabileceğini ve bu özelliklerin veri tiplerini tanımlayan kurallar bütünüdür. Her girdi, bir veya daha fazla nesne sınıfına (objectClass) ait olmak zorundadır ve bu nesne sınıfları, girdinin hangi özellikleri taşıyabileceğini belirler.
* ObjectClass (Nesne Sınıfı): Bir LDAP girdisinin türünü belirleyen ve o girdinin sahip olabileceği zorunlu ve isteğe bağlı özellikleri tanımlayan bir şema öğesidir. Örneğin, inetOrgPerson bir kişi girdisini, groupOfNames ise bir grup girdisini tanımlar.
* Attribute (Özellik): Bir LDAP girdisinin belirli bir özelliğini veya niteliğini temsil eden anahtar/değer çiftidir. Örneğin, cn (Common Name), sn (Surname), uid (User ID), mail (E-posta adresi) gibi.
* LDIF (LDAP Data Interchange Format): LDAP dizinindeki girdileri ve değişiklikleri temsil etmek için kullanılan standart, düz metin tabanlı bir formattır. LDAP sunucularına veri eklemek, değiştirmek veya silmek için sıklıkla kullanılır.
Adım 1: Sistemi Güncelleme ve Gerekli Paketleri Kurma
Kuruluma başlamadan önce, sistem paket listesini güncelleyelim ve mevcut paketleri yükseltelim. Bu, olası bağımlılık sorunlarını önlemeye yardımcı olacaktır.
sudo apt-get update
sudo apt-get upgrade -y
Ardından, OpenLDAP sunucu paketi olan slapd ve LDAP ile etkileşim kurmak için gerekli yardımcı programları içeren ldap-utils paketini kuralım:
sudo apt-get install slapd ldap-utils -y
Kurulum sırasında slapd paketi sizi bazı temel yapılandırma sorularıyla karşılayacaktır. Bu sorular, başlangıç yapılandırmasını oluşturmak için kullanılır:
1. “Omitted local LDAP server configuration?”: Bu soruya genellikle “No” (Hayır) yanıtını vererek yapılandırmaya devam etmelisiniz.
2. “DNS domain name:”: LDAP dizininizin temelini oluşturacak DNS domain adını girin. Örneğin, example.com. Bu, dizininizin dc=example,dc=com olarak yapılandırılmasını sağlayacaktır.
3. “Organization name:”: Kuruluşunuzun adını girin (örneğin, My Company). Bu, dizininizin üst düzey açıklamasında kullanılacaktır.
4. “Administrator password:”: LDAP dizini için yönetici (admin) kullanıcısının şifresini belirleyin ve onaylayın. Bu şifre çok önemlidir, güvenli bir şifre seçtiğinizden emin olun.
Bu adımları tamamladığınızda, temel OpenLDAP sunucunuz kurulmuş ve ilk yapılandırması yapılmış olacaktır.
Adım 2: OpenLDAP Yapılandırması
slapd paketi kurulduktan sonra, temel yapılandırma tamamlanmış olsa da, bu yapılandırmayı gözden geçirmek ve gerekirse değiştirmek isteyebilirsiniz. dpkg-reconfigure slapd komutu, kurulum sırasında sorulan soruları yeniden sormanızı ve mevcut yapılandırmayı değiştirmenizi sağlar.
sudo dpkg-reconfigure slapd
Bu komutu çalıştırdığınızda, aşağıdaki adımları takip ederek yapılandırmayı gözden geçirebilirsiniz:
1. “Omit OpenLDAP server configuration?”: “No” seçeneğini seçin.
2. “DNS domain name:”: Önceki adımda girdiğiniz domain adını (örn: example.com) onaylayın veya değiştirin. Bu, temel DN’nizi (dc=example,dc=com) belirler.
3. “Organization name:”: Kuruluş adınızı (örn: My Company) onaylayın veya değiştirin.
4. “Administrator password:”: Yöneticinin şifresini yeniden girin veya yeni bir şifre belirleyin.
5. “Confirm administrator password:”: Şifreyi onaylayın.
6. “Database backend to use:”: HDB (Hierarchical Database) seçeneğini seçin. Bu, en yaygın ve önerilen veritabanı türüdür.
7. “Remove the database when slapd is purged?”: “Yes” (Evet) seçeneğini seçin. Bu, slapd paketi kaldırıldığında veritabanının da silinmesini sağlar.
8. “Move old database?”: Eğer mevcut bir veritabanı varsa, onu taşıyıp taşımayacağınızı sorar. Genellikle “Yes” seçeneğini seçmek güvenlidir.
9. “Allow LDAPv2 protocol?”: “No” (Hayır) seçeneğini seçin. LDAPv3 daha güvenli ve modern bir protokoldür.
Yapılandırma tamamlandıktan sonra, OpenLDAP servisi otomatik olarak yeniden başlatılır. Servisin durumunu kontrol edebilirsiniz:
sudo service slapd status
Çıktıda slapd is running. benzeri bir ifade görmelisiniz.
OpenLDAP’ın yapılandırma dosyaları iki ana yerde bulunur:
* /etc/ldap/ldap.conf: LDAP istemcilerinin ve yardımcı programlarının sunucuya nasıl bağlanacağını belirleyen global istemci yapılandırma dosyası.
* /etc/ldap/slapd.d/: Sunucunun çalışma zamanı yapılandırmasını (cn=config) içeren dizin. Bu dizindeki dosyalar doğrudan düzenlenmemeli, bunun yerine ldapmodify gibi araçlarla güncellenmelidir. Ancak, başlangıçta bazı dosyalara bakmak faydalı olabilir.
Temel DN’nizin doğru yapılandırıldığını kontrol etmek için /etc/ldap/ldap.conf dosyasını inceleyebilirsiniz. BASE ve URI satırlarının doğru olduğundan emin olun:
cat /etc/ldap/ldap.conf
Çıktıda şunları görmelisiniz (örneğin example.com için):
BASE dc=example,dc=com
URI ldap://localhost ldap://127.0.0.1
Adım 3: Temel Dizin Yapısını Oluşturma (LDIF ile)
OpenLDAP sunucusu kuruldu ve temel yapılandırması yapıldı, ancak dizinimiz henüz boş. Şimdi, kullanıcılar ve gruplar gibi nesneleri tutacak temel organizasyon birimlerini (Organizational Units – OU) oluşturmamız gerekiyor. Bunu LDIF (LDAP Data Interchange Format) dosyaları kullanarak yapacağız.
Öncelikle, dizininizin kök girdisini (root entry) ve temel organizasyon birimlerini tanımlayan bir base.ldif dosyası oluşturalım.
nano base.ldif
Dosyanın içine aşağıdaki içeriği yapıştırın. dc=example,dc=com ve o=My Company kısımlarını kendi domain adınız ve kuruluş adınızla değiştirin:
dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: My Company
dc: example
dn: cn=admin,dc=example,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP Administrator
dn: ou=People,dc=example,dc=com
objectClass: organizationalUnit
ou: People
dn: ou=Groups,dc=example,dc=com
objectClass: organizationalUnit
ou: Groups
Açıklamalar:
* dn: dc=example,dc=com: Dizin ağacımızın kök girdisi.
* objectClass: top, dcObject, organization: Bu girdinin bir kuruluş nesnesi olduğunu ve temel LDAP nesne sınıflarını kullandığını belirtir.
* o: My Company: Kuruluşumuzun adı.
* dc: example: Domain bileşeni.
* dn: cn=admin,dc=example,dc=com: LDAP yöneticisi için bir girdi. Bu, dpkg-reconfigure slapd sırasında belirlediğiniz admin kullanıcısıdır.
* objectClass: simpleSecurityObject, organizationalRole: Bu girdinin bir güvenlik nesnesi ve organizasyonel rol olduğunu belirtir.
* cn: admin: Yöneticinin ortak adı.
* dn: ou=People,dc=example,dc=com: Kullanıcı hesaplarını tutacak organizasyon birimi.
* dn: ou=Groups,dc=example,dc=com: Grup hesaplarını tutacak organizasyon birimi.
Dosyayı kaydedin (Ctrl+O, Enter, Ctrl+X).
Şimdi bu LDIF dosyasını kullanarak girdileri LDAP dizinine ekleyelim. Bu işlem için yönetici şifrenizi girmeniz gerekecek:
ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f base.ldif
* -x: Basit kimlik doğrulama kullanır.
* -D "cn=admin,dc=example,dc=com": Yönetici DN’sini belirtir.
* -W: Komutun şifre istemesini sağlar.
* -f base.ldif: Eklenecek verileri içeren LDIF dosyasını belirtir.
Herhangi bir hata mesajı almazsanız, girdiler başarıyla eklenmiştir. Doğrulamak için ldapsearch komutunu kullanabiliriz:
ldapsearch -x -b "dc=example,dc=com"
Bu komut, dc=example,dc=com taban DN’si altındaki tüm girdileri listelemelidir. Çıktıda ou=People ve ou=Groups girdilerini görmelisiniz.
Adım 4: Kullanıcı ve Grup Ekleme
Temel dizin yapımız hazır olduğuna göre, şimdi kullanıcı ve grup girdileri ekleyebiliriz.
Grup Ekleme
Öncelikle, bir grup oluşturalım. Örneğin, “developers” adında bir grup.
group.ldif adında bir dosya oluşturun:
nano group.ldif
İçine aşağıdaki içeriği yapıştırın:
dn: cn=developers,ou=Groups,dc=example,dc=com
objectClass: top
objectClass: posixGroup
gidNumber: 5000
cn: developers
description: Development Team
Açıklamalar:
* dn: cn=developers,ou=Groups,dc=example,dc=com: Grubun ayırt edici adı. ou=Groups altında yer alır.
* objectClass: top, posixGroup: Bu girdinin bir POSIX grubu olduğunu belirtir. posixGroup nesne sınıfı, cn ve gidNumber gibi özellikleri zorunlu kılar.
* gidNumber: 5000: Grubun benzersiz sayısal kimliği (Group ID). Sisteminizdeki diğer GID’lerle çakışmamasına dikkat edin.
* cn: developers: Grubun ortak adı.
Dosyayı kaydedin ve LDAP dizinine ekleyin:
ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f group.ldif
Kullanıcı Ekleme
Şimdi de “John Doe” adında bir kullanıcı ekleyelim ve bu kullanıcıyı “developers” grubuna dahil edelim.
LDAP’ta kullanıcı parolaları genellikle düz metin olarak saklanmaz, bunun yerine hash’lenmiş halleri saklanır. slappasswd komutunu kullanarak bir parola için SSHA (Salted SHA) hash’i oluşturabiliriz:
slappasswd
Komutu çalıştırdığınızda, bir şifre girmeniz istenecek ve size "{SSHA}..." ile başlayan bir çıktı verecektir. Bu çıktıyı kopyalayın.
user.ldif adında bir dosya oluşturun:
nano user.ldif
İçine aşağıdaki içeriği yapıştırın. dc=example,dc=com kısmını kendi domaininizle değiştirin ve userPassword değerini slappasswd ile oluşturduğunuz hash ile değiştirin. uidNumber ve gidNumber değerlerinin sisteminizdeki diğer değerlerle çakışmadığından emin olun.
dn: uid=john.doe,ou=People,dc=example,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
cn: John Doe
sn: Doe
uid: john.doe
uidNumber: 10001
gidNumber: 5000
homeDirectory: /home/john.doe
loginShell: /bin/bash
mail: john.doe@example.com
userPassword: {SSHA}YOUR_PASSWORD_HASH_HERE
shadowLastChange: 18000
description: Developer at My Company
Açıklamalar:
* dn: uid=john.doe,ou=People,dc=example,dc=com: Kullanıcının ayırt edici adı. ou=People altında yer alır.
* objectClass: ...: Kullanıcının bir kişi (person, organizationalPerson, inetOrgPerson), bir POSIX hesabı (posixAccount) ve bir shadow hesabı (shadowAccount) olduğunu belirten nesne sınıfları. Bu nesne sınıfları, kullanıcının cn, sn, uid, uidNumber, gidNumber, homeDirectory, loginShell, userPassword gibi özellikleri taşımasını sağlar.
* cn: John Doe, sn: Doe: Kullanıcının ortak adı ve soyadı.
* uid: john.doe: Kullanıcının benzersiz kullanıcı kimliği.
* uidNumber: 10001: Kullanıcının benzersiz sayısal kimliği (User ID).
* gidNumber: 5000: Kullanıcının birincil grubunun GID’si. Bu, daha önce oluşturduğumuz “developers” grubunun GID’sidir.
* homeDirectory: /home/john.doe: Kullanıcının ana dizini.
* loginShell: /bin/bash: Kullanıcının varsayılan kabuğu.
* mail: john.doe@example.com: Kullanıcının e-posta adresi.
* userPassword: {SSHA}YOUR_PASSWORD_HASH_HERE: Kullanıcının şifresinin hash’lenmiş hali.
* shadowLastChange: 18000: Şifrenin en son değiştirildiği tarih (Unix epoch’tan bu yana geçen gün sayısı).
Dosyayı kaydedin ve LDAP dizinine ekleyin:
ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f user.ldif
Adım 5: LDAP Sunucusunu Test Etme
Kullanıcı ve grupları ekledikten sonra, LDAP sunucumuzun doğru çalıştığını ve eklediğimiz girdilere erişebildiğimizi doğrulamamız önemlidir.
Tüm dizin içeriğini aramak için:
ldapsearch -x -b "dc=example,dc=com"
Bu komut, dc=example,dc=com taban DN’si altındaki tüm girdileri listeler. Çıktıda ou=People, ou=Groups, cn=developers ve uid=john.doe girdilerini görmelisiniz.
Belirli bir kullanıcıyı aramak için:
ldapsearch -x -b "dc=example,dc=com" "uid=john.doe"
Bu komut, sadece john.doe kullanıcısının bilgilerini döndürmelidir.
Kimlik doğrulama (authentication) testi yapmak için ldapwhoami komutunu kullanabiliriz. Bu komut, belirtilen kimlik bilgileriyle LDAP sunucusuna bağlanmaya çalışır ve başarılı olursa, kimliği doğrulanan kullanıcının DN’sini döndürür:
ldapwhoami -x -D "uid=john.doe,ou=People,dc=example,dc=com" -W
Bu komutu çalıştırdığınızda, john.doe kullanıcısının şifresi istenecek. Doğru şifreyi girdiğinizde, çıktı olarak dn: uid=john.doe,ou=People,dc=example,dc=com benzeri bir ifade görmelisiniz. Bu, kullanıcının kimlik doğrulamasının başarılı olduğu anlamına gelir.
Adım 6: Güvenlik Ayarları (Temel)
LDAP sunucunuzu üretim ortamında kullanmayı düşünüyorsanız, güvenlik hayati önem taşır. İşte bazı temel güvenlik önlemleri:
TLS/SSL ile Şifreleme (LDAPS)
LDAP trafiğini şifrelemek için TLS/SSL (Transport Layer Security/Secure Sockets Layer) kullanmak şiddetle tavsiye edilir. Bu, parolalar ve diğer hassas bilgilerin ağ üzerinden düz metin olarak iletilmesini önler. LDAP’ın TLS üzerinden çalışmasına LDAPS denir ve varsayılan olarak 636 numaralı portu kullanır.
Ubuntu 12.04’te cn=config tabanlı yapılandırma kullanıldığından, TLS sertifikalarını yapılandırmak biraz karmaşık olabilir. Genel adımlar şunlardır:
1. Sertifika Oluşturma: Kendi kendine imzalı (self-signed) bir sertifika oluşturabilirsiniz. Üretim ortamları için CA (Certificate Authority) tarafından imzalanmış bir sertifika kullanmalısınız.
sudo mkdir -p /etc/ldap/ssl
sudo openssl req -new -x509 -nodes -out /etc/ldap/ssl/ldap_server.pem -keyout /etc/ldap/ssl/ldap_server.key -days 365
sudo chmod 600 /etc/ldap/ssl/ldap_server.key
sudo chown openldap:openldap /etc/ldap/ssl/ldap_server.*
Sertifika oluştururken size sorulan bilgilere (ülke, eyalet, kuruluş adı, ortak ad vb.) doğru yanıtlar verin. Ortak ad (Common Name) olarak sunucunuzun tam nitelikli alan adını (FQDN) kullanın.
2. TLS Yapılandırmasını LDAP’a Ekleme: Bu adım, ldif dosyaları oluşturup ldapmodify ile cn=config dizinine eklenerek yapılır.
tls.ldif adında bir dosya oluşturun:
nano tls.ldif
İçine aşağıdaki içeriği yapıştırın. dc=example,dc=com kısmını kendi domaininizle değiştirin:
dn: cn=config
changetype: modify
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ldap/ssl/ldap_server.pem
-
add: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ldap/ssl/ldap_server.pem
-
add: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ldap/ssl/ldap_server.key
Dosyayı kaydedin ve uygulayın:
ldapmodify -Y EXTERNAL -H ldapi:/// -f tls.ldif
Bu komut, EXTERNAL kimlik doğrulama yöntemini kullanarak yerel UNIX soketi (ldapi:///) üzerinden cn=config dizinini değiştirir.
3. Hizmeti Yeniden Başlatma: Değişikliklerin etkili olması için slapd servisini yeniden başlatın:
sudo service slapd restart
Artık LDAPS (port 636) üzerinden güvenli bağlantı kurabilirsiniz. İstemcilerinizde ldap:// yerine ldaps:// kullanmanız gerekecektir.
ACL’ler (Erişim Kontrol Listeleri)
ACL’ler, LDAP dizinindeki hangi kullanıcıların hangi verilere erişebileceğini veya değiştirebileceğini kontrol etmenizi sağlar. Bu, hassas verilerin yetkisiz erişimden korunması için kritik öneme sahiptir. ACL’ler de cn=config dizini üzerinden yönetilir.
Örnek bir ACL kuralı, anonim kullanıcıların dizini okumasını engeller ve yalnızca kimliği doğrulanmış kullanıcıların kendi girdilerini okumasına ve değiştirmesine izin verirken, yöneticinin her şeyi okuyup yazmasına izin verir.
Mevcut ACL’leri görmek için:
ldapsearch -Y EXTERNAL -H ldapi:/// -b "olcDatabase={1}hdb,cn=config" olcAccess
Yeni bir ACL kuralı eklemek veya mevcut olanı değiştirmek için acl.ldif adında bir dosya oluşturabilirsiniz:
nano acl.ldif
Aşağıdaki örnek, temel bir ACL yapılandırması sunar. Bu örnek, olcAccess direktifini değiştirir. Mevcut ACL’lerinizi kontrol edip ona göre düzenleme yapmanız önemlidir. Eğer zaten ACL’ler varsa, add yerine replace kullanmanız veya daha spesifik bir dn‘e ACL eklemeniz gerekebilir.
dn: olcDatabase={1}hdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by self write by anonymous auth by dn="cn=admin,dc=example,dc=com" write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to by self write by dn="cn=admin,dc=example,dc=com" write by read
Açıklamalar:
* olcAccess: {0}to attrs=userPassword,shadowLastChange ...: userPassword ve shadowLastChange özelliklerine erişimi kontrol eder.
* by self write: Kendi şifresini değiştirmesine izin verir.
* by anonymous auth: Anonim kullanıcıların kimlik doğrulamasını yapmasına izin verir (ancak okuma/yazma izni vermez).
* by dn="cn=admin,dc=example,dc=com" write: Admin’in şifreleri yazmasına izin verir.
by none: Diğer herkes için bu özelliklere erişimi yasaklar.
olcAccess: {1}to dn.base="" by read: Dizin ağacının temelini (root DSE) herkesin okumasına izin verir. Bu, istemcilerin dizinin temel bilgilerini almasını sağlar.
olcAccess: {2}to by self write by dn="cn=admin,dc=example,dc=com" write by * read: Diğer tüm özelliklere (ilk kuralda belirtilenler hariç) erişimi kontrol eder.
* by self write: Kullanıcının kendi girdisindeki diğer özelliklerini değiştirmesine izin verir.
* by dn="cn=admin,dc=example,dc=com" write: Admin’in her şeyi yazmasına izin verir.
by read: Diğer herkesin tüm özellikleri okumasına izin verir.
Dosyayı kaydedin ve uygulayın:
ldapmodify -Y EXTERNAL -H ldapi:/// -f acl.ldif
ACL’ler karmaşık olabilir ve dikkatli bir şekilde yapılandırılmalıdır. Yanlış yapılandırılmış bir ACL, dizine erişimi tamamen engelleyebilir. Her zaman küçük değişiklikler yapın ve her değişikliği test edin.
Adım 7: LDAP İstemci Yapılandırması (Kısa Bir Bakış)
LDAP sunucunuzu kurduktan sonra, diğer Linux sistemlerinin (istemcilerin) bu sunucuyu kullanıcı ve grup bilgileri için kullanmasını sağlamak isteyebilirsiniz. Ubuntu 12.04’te bu genellikle libnss-ldap ve libpam-ldap paketleri ile yapılır.
Bir istemci makinede (başka bir Ubuntu 12.04 sunucu veya masaüstü olabilir):
1. Gerekli Paketleri Kurun:
sudo apt-get install libnss-ldap libpam-ldap auth-client-config nscd -y
Kurulum sırasında sizden LDAP sunucusunun IP adresi veya hostname’i, temel DN’si ve diğer bilgiler istenecektir. Bu bilgileri kurduğunuz LDAP sunucusunun bilgileriyle doldurun.
2. Yapılandırma Dosyalarını Kontrol Edin:
* /etc/ldap.conf: Bu dosya, LDAP sunucusuna nasıl bağlanılacağını tanımlar. host, base, ldap_version gibi parametreleri kontrol edin.
* /etc/nsswitch.conf: Bu dosya, sistemin kullanıcı ve grup bilgilerini nereden alacağını belirler. passwd, group, shadow satırlarına ldap eklenmelidir (örn: passwd: files ldap).
* /etc/pam.d/common-auth, /etc/pam.d/common-account, /etc/pam.d/common-password: PAM (Pluggable Authentication Modules) yapılandırması, LDAP üzerinden kimlik doğrulamanın nasıl yapılacağını belirler.
3. NSS Cache Daemon’ı Yeniden Başlatın:
sudo service nscd restart
4. LDAP Kullanıcılarını Test Edin:
İstemci makinede getent passwd komutunu çalıştırarak LDAP’tan gelen kullanıcıları görebilmelisiniz. id john.doe komutu ile de kullanıcının UID ve GID bilgilerini kontrol edebilirsiniz.
Bu adım, istemci tarafındaki yapılandırmanın karmaşıklığı nedeniyle sadece genel bir bakış sunmaktadır. Detaylı istemci yapılandırması ayrı bir rehber konusu olabilir.
Yaygın Sorunlar ve Çözümleri
LDAP kurulumu ve yapılandırması sırasında karşılaşabileceğiniz bazı yaygın sorunlar ve olası çözümleri aşağıdadır:
* Bağlantı Sorunları (Can't contact LDAP server):
* Çözüm: slapd servisinin çalışıp çalışmadığını kontrol edin: sudo service slapd status. Çalışmıyorsa sudo service slapd start ile başlatın.
* Çözüm: Güvenlik duvarınızın (firewall) LDAP portlarına (varsayılan olarak 389, LDAPS için 636) izin verdiğinden emin olun. Ubuntu 12.04’te UFW kullanıyorsanız: sudo ufw allow 389/tcp ve sudo ufw allow 636/tcp.
* Çözüm: LDAP sunucusunun IP adresi veya hostname’inin doğru yapılandırıldığından emin olun (hem sunucu hem de istemci tarafında).
* Kimlik Doğrulama Hataları (Invalid credentials, Authentication failed):
* Çözüm: DN’nizin ve parolanızın doğru olduğundan emin olun. Özellikle ldapadd veya ldapmodify komutlarını kullanırken yönetici DN’sini (cn=admin,dc=example,dc=com) ve şifresini doğru girdiğinizden emin olun.
* Çözüm: Kullanıcı parolası hash’ini (userPassword) doğru oluşturup oluşturmadığınızı kontrol edin. slappasswd çıktısını doğru kopyaladığınızdan emin olun.
* Çözüm: LDAP sunucusunun günlüklerini kontrol edin. /var/log/syslog veya dmesg komutları, kimlik doğrulama denemeleriyle ilgili hata mesajları içerebilir.
* LDIF Dosyası Hataları (ldapadd: invalid format, schema violation):
* Çözüm: LDIF dosyanızdaki sözdizimini dikkatlice kontrol edin. Her satırın başında boşluk olmadığından, her özelliğin bir DN’ye ait olduğundan ve boş satırların doğru kullanıldığından emin olun.
* Çözüm: objectClass tanımlarının doğru olduğundan ve ilgili özelliklerin bu nesne sınıfları tarafından izin verildiğinden emin olun. Örneğin, inetOrgPerson olmayan bir girdiye mail özelliği eklemeye çalışırsanız schema violation hatası alabilirsiniz.
* Çözüm: dn satırlarının hiyerarşik olarak doğru olduğundan emin olun. Örneğin, ou=People altına bir kullanıcı eklerken kullanıcının DN’si uid=john.doe,ou=People,dc=example,dc=com şeklinde olmalıdır.
* ACL Sorunları (Erişim reddedildi):
* Çözüm: ACL’lerinizi dikkatlice inceleyin. olcAccess kuralları çok spesifik olabilir ve yanlış bir kural, beklediğinizden daha fazla veya daha az erişime neden olabilir.
* Çözüm: ACL’lerdeki sıralama önemlidir. Daha spesifik kurallar genellikle daha genel kurallardan önce gelir.
* Çözüm: ldapsearch komutunu farklı kullanıcılarla (anonim, normal kullanıcı, yönetici) çalıştırarak ACL’lerinizi test edin.
* Slapd Günlüklerini İnceleme:
* OpenLDAP ile ilgili çoğu sorunun kök nedeni /var/log/syslog veya dmesg komutlarının çıktısında bulunabilir. Hata mesajlarını dikkatlice okuyun.
* Daha detaylı hata ayıklama için, slapd servisini daha yüksek bir hata ayıklama seviyesiyle başlatabilirsiniz. Örneğin, sudo service slapd stop ve ardından sudo /usr/sbin/slapd -d 256 komutuyla detaylı günlükleri terminalde görebilirsiniz.
Sonuç
Bu makalede, Ubuntu 12.04 LTS bir VPS üzerinde temel bir OpenLDAP sunucusunun nasıl kurulacağını ve yapılandırılacağını adım adım ele aldık. LDAP’ın temel kavramlarını açıklayarak başladık, ardından slapd paketinin kurulumunu, temel dizin yapısının oluşturulmasını, kullanıcı ve grup eklemeyi gösterdik. Son olarak, dizinin işlevselliğini test etme, TLS/SSL ile güvenliği sağlama ve temel ACL yapılandırması gibi önemli güvenlik adımlarını tartıştık. Ayrıca, yaygın sorunlara ve çözümlerine de değindik.
Unutulmamalıdır ki, Ubuntu 12.04 eski bir işletim sistemi sürümüdür ve artık resmi güvenlik güncellemeleri almamaktadır. Bu nedenle, üretim ortamlarında mümkünse daha güncel ve desteklenen bir Ubuntu sürümü (örneğin, Ubuntu 20.04 LTS veya 22.04 LTS) kullanılması şiddetle tavsiye edilir. Güncel sürümlerde OpenLDAP’ın kurulum ve yapılandırma süreçleri, özellikle cn=config tabanlı dinamik yapılandırma yönetimi açısından bazı farklılıklar gösterebilir.
LDAP, güçlü ve esnek bir dizin hizmetidir. Bu temel kurulum, daha karmaşık LDAP dağıtımları için sağlam bir temel oluşturur. İleri düzey konular arasında LDAP replikasyonu (yüksek erişilebilirlik için), farklı şemaların entegrasyonu (örneğin, Active Directory ile uyumluluk), GUI tabanlı yönetim araçları (phpLDAPadmin gibi) ve LDAP’ı çeşitli uygulamalarla (posta sunucuları, web sunucuları, VPN’ler) entegre etme yer alır. Bu konular, LDAP bilginizi ve becerilerinizi daha da geliştirmek için keşfedebileceğiniz alanlardır.