OpenLDAP ile Merkezi Kimlik Yönetimi
- Murat Akpınar
- Linux , Open source
- 1 Mart 2025
İçindekiler
Beş sunucunuz varsa kullanıcı eklemek beş kere useradd yazmak demektir. Elli sunucuda aynı iş, birinin ayrıldığı gün elli yerden hesap silmek anlamına gelir — ve biri mutlaka atlanır. Kimliği tek bir yerde tutmanın karşılığı budur: hesap bir kez açılır, bir kez kapatılır.
Bu yazıda Debian/Ubuntu üzerinde OpenLDAP kurup dizini yapılandıracak, phpLDAPadmin ile web arayüzünü açacak ve ilk kullanıcı ile grubu LDIF dosyalarıyla oluşturacağız.
Aşağıdaki tüm alan adları, IP adresleri ve kullanıcı isimleri kurgusal bir test ortamına aittir. Komutlar gerçektir; değerler örnektir.
1) Sunucu Hostname Ayarları
İlk olarak, sunucunuzun hostname’ini (FQDN - Tam Nitelikli Alan Adı) ayarlamanız gerekiyor. Bu örnekte, sunucunun hostname’ini ldap.foxhound.com ve IP adresini 192.168.1.20 olarak ayarlayacağız.
FQDN ile dizin alan adının uyumlu olması önemlidir: dizinin temel DN’si dc=foxhound,dc=com olacaksa sunucunun adı da foxhound.com alanı altında olmalıdır. İkisi ayrıştığında sertifika doğrulaması ve istemci yapılandırması ilerleyen adımlarda tutmaz.
Aşağıdaki komutu root kullanıcısı olarak çalıştırın. ldap.foxhound.com yerine kendi tercih ettiğiniz domain ve hostname’i yazabilirsiniz.
hostnamectl set-hostname ldap.foxhound.com
exec bash
Ardından, /etc/hosts dosyasını sunucunun hostname’i ve IP adresi ile güncelleyin. Bu, ağ içinde hostname çözümlemesi yapabilmek için gereklidir.
echo '192.168.1.20 ldap.foxhound.com ldap' >> /etc/hosts
Sunucunun hostname’ini pingleyerek doğru bir şekilde ayarlandığını kontrol edin.
ping -c 3 ldap.foxhound.com
2) OpenLDAP Paketlerinin Kurulumu
Bir sonraki adım, OpenLDAP paketlerini kurmaktır. Aşağıdaki komutu çalıştırarak OpenLDAP paketlerini yükleyin.
sudo apt install slapd ldap-utils -y
Kurulum sırasında slapd size bir yönetici parolası soracaktır. Bu parola cn=admin,dc=foxhound,dc=com hesabına aittir ve dizin üzerinde tam yetkilidir.
3) OpenLDAP Sunucusunun Yapılandırılması
sudo dpkg-reconfigure slapd
- Bu komut, terminalinizde bir dizi soru oluşturacaktır. İlk olarak, OpenLDAP sunucusu yapılandırmasını başlatmak için ilk soruda ‘Omit OpenLDAP server configuration?’
Noseçeneğini seçin. - Ardından, DNS domain adını girin. Bu, LDAP dizininin temel DN’sini oluşturmak için kullanılacaktır. Bu örnekte,
foxhound.comdomain adını kullanacağız. Bu nedenle, DNdc=foxhound,dc=comolarak temsil edilecektir.ENTERtuşuna basın. - Daha sonra, organizasyonunuzun adını girin. Bu da temel DN’nin bir parçası olacaktır. Bu örnekte,
foxhound.comdomain adını kullanacağız. - LDAP dizini için yönetici şifresini girin ve
ENTERtuşuna basın. - Şifreyi tekrar girerek onaylayın ve
ENTERtuşuna basın. slapdpaketi kaldırıldığında veritabanının silinip silinmeyeceği sorulduğunda, ’ Do you want the database to be removed when slapd is purged?’Noseçeneğini seçin.- Son olarak, eski veritabanını kaldırmak ve yeni bir veritabanı oluşturmak için ‘Move old database’
Yesseçeneğini seçin.
4) OpenLDAP Yapılandırma Dosyasının Düzenlenmesi
Buradaki /etc/ldap/ldap.conf, istemci tarafı yapılandırma dosyasıdır: ldapsearch, ldapadd gibi araçların hangi sunucuya ve hangi temel DN’ye bağlanacağını söyler. Sunucunun kendi yapılandırması slapd içinde tutulur ve bu dosyadan etkilenmez.
sudo vim /etc/ldap/ldap.conf
BASE ve URI ile başlayan satırları bulun ve yorum satırı işaretlerini kaldırın. OpenLDAP sunucunuzun domain adını girin. Bu örnekte, BASE dc=foxhound,dc=com ve URI ldap://ldap.foxhound.com olacaktır.
BASE dc=foxhound,dc=com
URI ldap://ldap.foxhound.com
Değişiklikleri kaydedin ve dosyadan çıkın. Ardından, slapd servisini yeniden başlatın ve durumunu kontrol edin.
systemctl restart slapd
systemctl status slapd
OpenLDAP temel yapılandırmasını doğrulamak için aşağıdaki komutu çalıştırın. -Y EXTERNAL -H ldapi:/// birleşimi, yerel soket üzerinden root yetkisiyle parola sormadan bağlanmayı sağlar:
ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b dc=foxhound,dc=com
dn: dc=foxhound,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: foxhound.com
dc: foxhound
Bu aşamada dizinde yalnızca temel girdi vardır; ou=people ve ou=groups gibi birimleri 7. adımda biz oluşturacağız. Çıktı No such object (32) diyorsa temel DN yanlış girilmiş demektir — dpkg-reconfigure slapd adımına dönün.
5) phpldapadmin Kurulumu
Önce .deb paketini indirip kuruyoruz:
wget https://launchpad.net/ubuntu/+archive/primary/+files/phpldapadmin_1.2.6.7-1_all.deb
sudo apt -y install apache2 php php-cgi libapache2-mod-php php-mbstring php-common php-pear
sudo dpkg -i phpldapadmin_1.2.6.7-1_all.deb
sudo apt --fix-broken install
Sürüm uyarısı: phpLDAPadmin 1.2.6.7 eski bir paket ve PHP 8 ile uyumlu değildir; Ubuntu 22.04 ve sonrasında boş sayfa ya da
Call to undefined functionhataları görebilirsiniz. Bu kurulum PHP 7.x bulunan bir sistemde denenmiştir. Güncel bir sistemde web arayüzü istiyorsanız LDAP Account Manager (LAM) ya da masaüstünden bağlanan Apache Directory Studio daha sağlıklı seçeneklerdir. Arayüz olmadan da devam edebilirsiniz — 7. adımdaki işlerin tamamı komut satırından yapılıyor.
Yapılandırma dosyasında yapılması gerekenler:
sudo vim /etc/phpldapadmin/config.php
...
$servers->setValue('server','name','FoxHound LDAP Server');
$servers->setValue('server','host','192.168.1.20');
$servers->setValue('server','base',array('dc=foxhound,dc=com'));
$servers->setValue('login','auth_type','session');
$servers->setValue('login','bind_id','cn=admin,dc=foxhound,dc=com');
...
config.php dosyasındaki bu bölümlerde yer alan example değerlerini kendi LDAP sunucu ayarlarınıza göre değiştirip Apache’yi yeniden başlatmanız gerekir.
6) Apache Ayarları
Arayüzün adresi normalde http://192.168.1.20/phpldapadmin/ olur; yönlendirme ekleyerek doğrudan sunucu IP’sinden bu sayfanın gelmesini sağlayacağız.
sudo vim /etc/apache2/sites-available/000-default.conf
<VirtualHost> bloğunun içine şu satırı ekleyin:
RedirectMatch ^/$ /phpldapadmin/
Değişikliklerin geçerli olabilmesi için Apache servisini yeniden başlatıyoruz:
sudo systemctl restart apache2.service && sudo systemctl status apache2.service
Bu satırı ekledikten sonra sunucu IP adresine sorunsuz şekilde ulaşabilirsiniz.
7) Örnek Kullanıcı ve Grup Oluşturma
Önce kullanıcılar ve gruplar için birer organizasyon birimi (OU) oluşturuyoruz. base-groups.ldif adında bir dosya açıp içine şunları kopyalayın:
dn: ou=people,dc=foxhound,dc=com
objectClass: organizationalUnit
ou: people
dn: ou=groups,dc=foxhound,dc=com
objectClass: organizationalUnit
ou: groups
Ardından bunu ldapadd komutu ile dizine işliyoruz. -W seçeneği admin parolasını sorar:
ldapadd -x -D cn=admin,dc=foxhound,dc=com -W -f base-groups.ldif
Şimdi sysadmin grubunu ve bigboss adında bir kullanıcı oluşturacağız. Kullanıcı parolasının hash’ini önce üretmeniz gerekir — LDIF dosyasına düz metin ya da yer tutucu yazmak işe yaramaz:
slappasswd
# New password:
# Re-enter new password:
# {SSHA}k3JmA9x0PqR7sVbN2wLtYcE4uZfH6dGi
Çıkan değeri create-sysadmin.ldif dosyasındaki userPassword alanına yapıştırın:
# sysadmin grubunu oluştur
dn: cn=sysadmin,ou=groups,dc=foxhound,dc=com
objectClass: top
objectClass: posixGroup
cn: sysadmin
gidNumber: 5000
# bigboss kullanıcısını oluştur
dn: uid=bigboss,ou=people,dc=foxhound,dc=com
objectClass: top
objectClass: inetOrgPerson
objectClass: posixAccount
uid: bigboss
cn: Big
sn: Boss
userPassword: {SSHA}k3JmA9x0PqR7sVbN2wLtYcE4uZfH6dGi
loginShell: /bin/bash
uidNumber: 5001
gidNumber: 5000
homeDirectory: /home/bigboss
Bu değişiklikleri aktif hâle getirmek için yine ldapadd kullanıyoruz:
ldapadd -x -D cn=admin,dc=foxhound,dc=com -W -f create-sysadmin.ldif
Kullanıcıyı gruba ek üye olarak eklemek istiyorsanız bu ayrı bir işlemdir — var olan bir girdiyi değiştirdiği için ldapadd değil ldapmodify ister. add-member.ldif:
dn: cn=sysadmin,ou=groups,dc=foxhound,dc=com
changetype: modify
add: memberUid
memberUid: bigboss
ldapmodify -x -D cn=admin,dc=foxhound,dc=com -W -f add-member.ldif
bigboss kullanıcısının gidNumber değeri zaten 5000 olduğu için sysadmin onun birincil grubudur; yukarıdaki memberUid kaydı, grubu üye listesinden okuyan uygulamalar için ek üyeliği görünür kılar.
Doğrulama
Girdilerin gerçekten oluştuğunu dizinden okuyarak doğrulayın:
ldapsearch -x -LLL -b dc=foxhound,dc=com "(uid=bigboss)" uid cn uidNumber gidNumber
dn: uid=bigboss,ou=people,dc=foxhound,dc=com
uid: bigboss
cn: Big
uidNumber: 5001
gidNumber: 5000
Parolanın çalıştığını da kullanıcının kendisi olarak bağlanarak sınayın; bu, hash’in doğru üretildiğini kanıtlayan tek testtir:
ldapwhoami -x -D uid=bigboss,ou=people,dc=foxhound,dc=com -W
# dn:uid=bigboss,ou=people,dc=foxhound,dc=com
Parola yanlışsa ldap_bind: Invalid credentials (49) alırsınız.
Bu Terimler Nedir?
ou=people,dc=foxhound,dc=com— Kullanıcı hesaplarını tutan organizasyon birimi. Bir şirkette çalışanların hesapları burada saklanır; her kullanıcı bu OU altında bir “entry” olarak temsil edilir.ou=groups,dc=foxhound,dc=com— Grupları tutan organizasyon birimi. Gruplar, kullanıcıları bir araya getirip onlara toplu izin veya erişim hakkı atamak için kullanılır: “IT” grubu, “Finance” grubu gibi.
Buradaki dc bileşenleri (dc=foxhound,dc=com) dizinin kökünü, ou ise o kökün altındaki dalları tanımlar. LDAP dizini bir ağaçtır ve her girdinin adresi, kökten kendisine giden yolun tamamıdır — bu adrese DN (Distinguished Name) denir.
Neden Bunu Oluşturuyoruz?
- Organizasyon ve yönetim kolaylığı. Kullanıcıları ve grupları ayrı OU’lar altında tutmak aramayı ve yönetmeyi kolaylaştırır; tüm hesapları
ou=peoplealtında toplamak, tek bir sorguyla tüm kullanıcıları listeleyebilmek demektir. - Yetkilendirme ve erişim kontrolü. Erişim kuralları (ACL) DN yoluna göre yazılır.
ou=peopleileou=groupsayrı olduğunda “kullanıcılar kendi girdisini değiştirebilsin ama grup üyeliklerine dokunamasın” gibi bir kural tek satırda ifade edilebilir; her şey tek dalda dursaydı bu ayrım yapılamazdı.
Sonuç
- LDAP bir ağaçtır ve yapıyı baştan doğru kurmak sonradan taşımaktan ucuzdur.
ou=people/ou=groupsayrımı bugün gereksiz görünse de erişim kurallarının yazılabilmesi buna bağlıdır. - Parola hash’i
slappasswdile üretilir. LDIF dosyasına düz metin parola ya da yer tutucu yazmak sessizce çalışmayan bir hesap üretir;ldapwhoamiile bağlanmayı denemek bunu kanıtlayan tek testtir. - Yeni girdi eklemek
ldapadd, var olanı değiştirmekldapmodifyişidir. İkisini karıştırmak, LDIF dosyasındakichangetypesatırına rağmen beklediğiniz sonucu vermez.
Bu kurulum düz ldap:// üzerinden çalışır; parolalar ağda şifresiz gider. Üretim ortamına almadan önce LDAPS (636) ya da StartTLS yapılandırması ve dizine erişimi kısıtlayan ACL kuralları eklenmelidir.
Kimlik yönetimine Windows tarafından bakmak isterseniz: Kurumsal Active Directory yapısı nasıl kurulur. Linux’ta yerel grup yönetimi için: Gruplar ve kullanıcıları gruplara ekleme/çıkarma.