Yeni yazı: Kümenin Kapağını Açalım: Kubernetes Bileşenleri Birbirini Neden Hiç Aramaz?
OpenLDAP ile Merkezi Kimlik Yönetimi

OpenLDAP ile Merkezi Kimlik Yönetimi

İç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?’ No seç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.com domain adını kullanacağız. Bu nedenle, DN dc=foxhound,dc=com olarak temsil edilecektir. ENTER tuşuna basın.
  • Daha sonra, organizasyonunuzun adını girin. Bu da temel DN’nin bir parçası olacaktır. Bu örnekte, foxhound.com domain adını kullanacağız.
  • LDAP dizini için yönetici şifresini girin ve ENTER tuşuna basın.
  • Şifreyi tekrar girerek onaylayın ve ENTER tuşuna basın.
  • slapd paketi kaldırıldığında veritabanının silinip silinmeyeceği sorulduğunda, ’ Do you want the database to be removed when slapd is purged?’ No seçeneğini seçin.
  • Son olarak, eski veritabanını kaldırmak ve yeni bir veritabanı oluşturmak için ‘Move old database’ Yes seç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 function hataları 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=people altı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=people ile ou=groups ayrı 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=groups ayrımı bugün gereksiz görünse de erişim kurallarının yazılabilmesi buna bağlıdır.
  • Parola hash’i slappasswd ile üretilir. LDIF dosyasına düz metin parola ya da yer tutucu yazmak sessizce çalışmayan bir hesap üretir; ldapwhoami ile bağlanmayı denemek bunu kanıtlayan tek testtir.
  • Yeni girdi eklemek ldapadd, var olanı değiştirmek ldapmodify işidir. İkisini karıştırmak, LDIF dosyasındaki changetype satı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.

Paylaş :

İlgili Yazılar

Dosya Türleri ve İzinleri: Linux Dosya Yönetiminin Temelleri

Dosya Türleri ve İzinleri: Linux Dosya Yönetiminin Temelleri

ls -l çalıştırdığınızda her satırın başında on karakterlik bir dizi görürsünüz: -rw-r--r--. Çoğu kullanıcı bu diziyi okumadan geçer ve izin gerektiğinde chmod 777 yazıp sorunu “çözer” — sonra o dosyayı sistemdeki herkesin değiştirebildiğini fark etmez.

Linux'da Kullanıcı Bilgilerini Değiştirme ve Parola Yönetimi

Linux'da Kullanıcı Bilgilerini Değiştirme ve Parola Yönetimi

Linux işletim sisteminde, mevcut kullanıcıların bilgilerini güncellemek ve parolalarını yönetmek oldukça önemlidir. Bu makalede, Linux’ta kullanıcı bilgilerini değiştirmenin ve parola yönetiminin nasıl yapıldığına dair bir rehber sunacağız.

Linux'da Disk Genişletme İşlemi

Linux'da Disk Genişletme İşlemi

Sanallaştırma katmanında diski büyütmek beş saniyelik iştir: sanal diske 100 GB eklersiniz ve iş bitmiş görünür. Ama sunucuya girip df -h yazdığınızda hiçbir şeyin değişmediğini görürsünüz — disk büyümüştür, bölüm büyümemiştir; bölüm büyüse bile dosya sistemi hâlâ eski boyuttadır. Alan ancak üç katmanın üçü de büyütüldüğünde kullanılabilir hâle gelir.