28 Ekim 2011 Cuma

Debian: OpenLDAP Kurmak


    Özet
    Bu yazının amacı Debian üzerinde OpenLDAP kurulumunu ve yapılandırmasını kolay anlaşılır bir şekilde anlatmaktır.
    Bu rehberin sonunda, bireysel makinelerde elle kullanıcı yaratmaya gerek kalmayacak şekilde, ağdaki bütün makilerde kullanıcı girişi için merkezi yetkilendirme sistemi olarak hizmet verecek fonksiyonel bir LDAP sunucusuna sahip olacaksınız.
    Bununla birlikte, gelişmiş yetkilendirme güvenliği ve gerçek bir ağ tabanlı çözüm için, LDAP'ın Kerberos ile birlikte kullanılması önerilir. Kerberos kurulumu MIT Kerberos 5 Guide belgesinde anlatılmaktadır,
    Bu yazı Spinlock Solutions'ın, Debian GNU Guide, MIT Kerberos 5 Guide, OpenLDAP Guide, OpenAFS Guide ve FreeRADIUS Guide'ı içeren 5 yazılık Unix ağlarına giriş serisinin bir parçasıdır.
    
    Giriş
    LDAP geleneksel olarak sistem yöneticilerinin ve ileri düzey kullanıcıların ilgisini cezbeden bir servistir. Ama yüksek girdi bariyeri(high entry barrier) ve altyapı gereksinimleri birçok kişiyi onu kullanmaktan uzak tutmuştur.
    LDAP hali hazırda sayısız yayının konusu olmuştur. Burada sadece gerekli bir özet sunacağız; içeriği yerleştirmek ve pratik sonuçlar elde etmek için yeterli bilgi.
    Harici bağlantıları izlemek zorunda değilsiniz; bununla birlikte, belirli tekil konuların belirli teknik işleyişine işaret etmesi amacıyla, bağlantılar makale boyunca kullanılmış ve makalenin sonunda hep birlikte sunulmuştur.

    Bir ağda LDAP'ın rolü
    OpenLDAP, Lightweight Directory Access Protocol - Hafifletilmiş Dizin Erişim Protokolü'nün açık kaynaklı bir uygulamasıdır. Dizin ağaç yapısında, okuma-en iyilenmiş(read-optimized) haldedir. Sarı sayfalar ya da bir telefon rehberi, zihinde canlandırmak açısından iyi örnekler ancak LDAP çok daha güçlüdür.
    OpenLDAP'ı, bireysel(individual) makinelere ilk eriştiklerinde ev dizinlerini de otomatik olarak yaratacak şekilde, ağda herhangi bir yerdeki kullanıcı girişleri için bir merkezi yetkilendirme konumu sağlamak için kullanacağız.
    Bu belge OpenLDAP'ı hem yetkilendirme sağlamak hem kullanıcı üst verisi sunmak amacıyla kullanmak için kendi başına yeterlidir. Bununla birlikte, LDAP sunucusuna yapılan düz metin bağlantıları ve kablo üzerinde parolaların gezinmesi sebebiyle LDAP'ı burada anlatıldığı şekilde yetkilendirme amacıyla kullanmak güvenli değildir. Bu nedenle LDAP'ı üstün ve güvenli ağ yetkilendirme mekanizması Kerberos'la kullanmak tavsiye edilir. Kerberos bir diğer makale MIT Kerberos 5 Guide'da anlatılmaktadır.
    Haydi, LDAP kurulumumuza başlayalım.
    Teknik bir bakış açısından, LDAP dizini sıradüzensel olarak düzenlenmiş girdilerin(entries) kümesini içerir. Her girdi belli Nesne Sınıflarına (Object Classes) aittir ve özellikler(attributes) olarak adlandırılan değişik sayıda  anahtar=değer(key=value) çifti içerir.
    Her girdi bir Ayırıcı İsim (Distinguished name - "DN") ile tekil olarak(uniquely) tanımlanır. DN ağacın başından başlayan, girdiye ait "tam yolu" (full path) sağlayan, virgüllerle ayrılmış, bir özellikler kümesi şeklindedir. Örneğin, Example, Inc. şirketi dc=example,dc=com 'da ağacın köküne sahip olabilir. Example, Inc. şirketinde çalışmaya başlayan birisi DN'i cn=person,ou=People,dc=example,dc=com olan bir LDAP girdisine sahip olabilir.
    Bir girdide hangi özelliklerin olabileceği ya da olması gerektiği girdinin objectClass'ları tarafından yönetilir.
    Farkedebileceğiniz gibi, yukarıdaki cn=person gibi, DN'in tekil parçaları da anahtar=değer şeklindedir. Bu "anahtarlar", cn, ou ve dc; Common Name, Organizational Unit ve Domain Component kelimelerinin kısaltmalarıdır. Bunlar hergün kullanacağınız LDAP terminolojisinin bir parçasıdır.
    ObjectClassları; özellikler, söz dizimler(syntaxes), eşleşme kuralları (matching rules) ve ağaç yapısının diğer detayları LDAP sunucusunun başlangıcında /etc/ldap/slapd.conf dosyasında tanımlı şema (schema) dosyaları okunarak yapılandırılabilir ve yüklenebilir.
    Hadi hızlıca kurulumumuzdaki LDAP'a özel elemanları tanımlayalım:
  • LDAP geleneksel sistem kullanıcı isimleri ya da diğer veriyle herhangi bir şekilde bağlantılı değildir. Bununla birlikte, kurulumumuzda LDAP'ın işlenselliğinin bir kısmı gelenksel Unix dosyaları /etc/passwd ve /etc/group'da bilgi saklamayı içerir. 
        Kişilerin giriş isimleri (login names) kişileri LDAP ağacında karşılık gelen veriyle eşleştirilerek kullanılacaktır. Örneğin, person kullanıcı ismi uid=person,ou=People,dc=example,dc=com LDAP girdisine eşlenir.
  •  LDAP kullanıcı parolalarıın içerecek şekilde yapılandırılabilir. Parolalar belirli kullanıcıları yetkilendirmek ve korunan girdilere erişim sağlamak ve kullanıcının doğru parolayı bilip bilmediğini kontrol etmek için kullanılabilir.
         Bir kulanıcı bir LDAP istemcisi açıp dizini taradığında, DN'i ve parolası kimlik ve erişim yetkilerini sağlamakta kullanılır. LDAP kullanıcı yetkilendirme işi için yapılandırıldığında, DN'i ve parolası sadece LDAP dizinine bağlantı sağlanması için kullanılır - başarılı bir bağlantı ("bind") kullanıcının doğru parolayı bildiğini gösterir.
   
     Eksiksiz OpenLDAP belgelendirmesi için OpenLDAP web sayfasına bakabilirsiniz. Güvenilir bir OpenLDAP kitabı için ise, Gerald Carter'ın LDAP System Administration (by O'Reilly) kitabına bakabilirsiniz.

    Tutkal Katmanlar(Glue layers): LDAP'ı sistem yazılımıyla tümleştirmek
    NSS
    Bütün GNU/Linux-tabanlı platformlarda, NSS ağ veri bulma (network data retrieval) yapılandırması için erişilebilirdir. NSS, Name Service Switch mekanızmasının bir uygulamasıdır.
     NSS, LDAP'ın -doğal olarak LDAP desteklemese de- bütün servislerin "kullanıcı veri" yollarına ("user data" path) dahil edilmesine izin verir.
     NSS web sayfasında uygun giriş (ve eksiksiz belgelendirmeye) erişebilirsiniz. Ayrıca nsswitch.conf(5) kılavuz (manual) sayfasına bakınız.

    PAM
    Aynı şekilde, bütün GNU/Linux-tabanlı platformlarda, bulmacanın bir diğer parçası, Linux-PAM, servis-özel (service-specific) yetkilendirme yapılandırması için bulunur.. Linux-PAM, Sun Microsystems'ten PAM ("Pluggable Authentication Modules")'ın bir uygulamasıdır.
     Ağ servisleri,  hard-coded yetkilendirme arayüzleri ve karar mekanizmalarına sahip olmak yerine, standart, önceden-tanımlı arayüz üzerinden PAM'ı çağırır. Bundan sonrası, herhangi ya da bütün yetkilendirme işlerini işletmek ve sonuçları programa göndermek PAM'a aittir.
     PAM'ın kararı nasıl verdiği servisin ilgilendirmez. Geleneksel kurulumlarda (set-ups), bu sıklıkla kullanıcı ismini ve parolsını sorarak ve onaylayarak yapılırdı. Gelişmiş ağlarda, bu retina taramalarıyla olabilir ya da — Kerberos biletletiyle, seiden bir diğer makalede anlatıldığı gibi, MIT Kerberos 5 Guide.
     Linux-PAM web sayfasında uygun giriş (ve eksiksiz belgelendirmeye) erişebilirsiniz. PAM Configuration File Syntax sayfasının üzerinde özellikle durun. Ayrıca Linux-PAM(7) ve pam(7) kılavuz sayfalarına göz gezdirin.

    Conventions
    Belgelendirmedeki talimatları takip edememek gerçekten moral bozucu. Daha fazla devam etmeden bazı konular üzerinde anlaşalım:
  •  Üzerinde pratik bir kurulum gerçekleştireceğimiz platform Debian GNU olacak.
  •  sudo 'yu kurun. Sudo normal kullanıcı hesabınızdan sistem yöneticisi işlerini yapmanıza izin veren bir program. Bu makaledeki bütün örnekler root yetkileri gerektirmektedir, sudo kullanarak kodları kopyalayıp kabuğuna(shell) yapıştırmanız mümkün olacak.
su -c 'apt-get install sudo'

       Eğer şifre sorulursa root şifresini girin.
       sudo 'yu yapılandırmak için, aşağıdaki satırı $USERNAME i kullanıcı isminizle değiştirerek  /etc/sudoers dosyanıza ekleyin:

$USERNAME ALL=(ALL) NOPASSWD: ALL

  • Debian paketleri debconf arayüzüyle kurulum süreci boyunca bize sorular soracak. debconf 'u bilinen bir duruma ayarlamak için:
sudo dpkg-reconfigure debconf

       Sorulduğunda, arayüz=Diyalog (interface=Dialog) ve öncelik=düşük (priority=low) olarak cevaplayın.

  • Log dosyalarını görüntülemek hataların yakalanmasında çok kritiktir. Bunu yapmanın anlaşılır, hepsini kapsayan yolu bir terminal açmak ve aşağıdaki kodu çalıştırmak:
cd /var/log; sudo tail -F daemon.log sulog user.log auth.log debug kern.log syslog dmesg messages kerberos/{krb5kdc,kadmin,krb5lib}.log

       Komut hata log mesajlarını oluştukça ekrana yazacaktır.
  • Test sistemimizin adı monarch.spinlock.hr ve 192.168.7.12 IP adresine sahip. Sunucu ve istemcinin ikisi de aynı makineye kurulacak. Bununla birlikte, ilişkili oldukları yerlerde sunucu ve istemci rollerini ayırmak için, istemci monarch.spinlock.hr ve sunucu ldap1.spinlock.hr olarak adlandırılacak. /etc/hosts dosyasına yapılacak aşağıdaki gibi bir ekleme bu şemayı destekleyecektir:
192.168.7.12 monarch.spinlock.hr monarch krb1.spinlock.hr krb1 ldap1.spinlock.hr ldap1

    Dikkat
    Bazı Debian kurulumlarında sistemin ağ makine adı(hostname), localhost adresi 127.0.0.1 'e atanmış olabilir. Bu ağ işlemlerinde bazı hatalara yol açabilir ve açacaktır. Bu yüzden /etc/hosts dosyasındaki "localhost" girdisinin aynen aşağıdaki gibi olmasına dikkat edin(ne eksik, ne fazla):

127.0.0.1 localhost localhost.localdomain

    Son olarak, beklendiği gibi ağ kurulumunu test edelim. Makine isimlerine(hostnames) ping atmak uygun FQDN  ve IP'leri gösterecektir:

ping -c1 localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
....
ping -c1 monarch
PING monarch.spinlock.hr (192.168.7.12) 56(84) bytes of data.
....
ping -c1 ldap1
PING krb1.spinlock.hr (192.168.7.12) 56(84) bytes of data.
....

    OpenLDAP
    Sunucu Kurulumu
    OpenLDAP'ın sunucu bileşeni slapd olarak adlandırılır ve bütün ihtiyacımız olan bu.

sudo apt-get install slapd ldap-utils

Debconf cevapları:

Omit OpenLDAP server configuration? No
DNS domain name: spinlock.hr
Organization name? spinlock.hr
Administrator password: PASSWORD
Confirm password: PASSWORD
Database backend to use: HDB
Do you want the database to be removed when slapd is purged? No
Allow LDAPv2 protocol? No

    Kurulum tamamlanır tamamlanmaz OpenLDAP sunucusu (slapd komutu) başlayacaktır.

    Başlangıç Yapılandırması
    OpenLDAP sunucumuz hali hazırda çalışıyor. Hadi önce bütün LDAP istemcileri için ortak bir yapılandırma dosyası olan /etc/ldap/ldap.conf 'u düzenleyelim. Bu, ldapsearch ve diğer komutları her defasında temel parametreleri elle girmemize gerek kalmadan çalıştırmamızı sağlayacak.
    /etc/ldap/ldap.conf 'ta aşağıdaki iki satırı ekinleştirin, gerekirse dosyayı kendiniz oluşturun:

BASE dc=spinlock, dc=hr
URI ldap://192.168.7.12/

    Sonrasında, davranışını ayarlamak için sunucunun yapılandırma dosyası /etc/ldap/slapd.conf 'u düzenleyelim.
    Bütün şema dosyalarının etkinleştirildiğinden emin olun:

include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema

    Ayrıntı seviyesini 0 veya "none" 'dan 256 'ya değiştirin:

loglevel 256

    "index objectClass eq" satırını arayın ve bir başka arama indexi daha ekleyin. Belirli kombinasyonlarda, arama girdileri indexlenmediklerinde herhangi bir sonuç dönmemesi mümkün. Bu yüzden bu adım önemli:

index objectClass eq
index uid eq

    Yeni index seçeneğinin uygulanması için, aşağıdaki komutları çalıştırın:

sudo invoke-rc.d slapd stop
sudo slapindex
sudo chown -R openldap:openldap /var/lib/ldap
sudo invoke-rc.d slapd start

    Başlangıç Testi
    Artık kurulumumuzu test etmenin zamanı geldi. OpenLDAP sunucumuz çok fazla bilgi içermiyor ama basit bir okuma işlemi kolayca gerçekleştirilebilir.
    LDAP terimleriyle, okuma (read) işlemi "arama" ("search") olarak adlandırılır. Komut satırından bir arama işlemi yapmak için ldapsearch ve slapcat 'e sahibiz.
    Ldapsearch (ve "ldap" önekiyle başlayan diğer LDAP komutları) LDAP protokolünü kullanarak "çevrimiçi"("online") işlem gerçekleştirirler.
    Slapcat (ve "slapd" önekiyle başlayan diğer LDAP komutları) direkt olarak yerel dosya sisteminde dosyalar açarak "çevrimdışı("offline") işlem gerçekleştirirler. Bu yüzden, sadece yerel olarak LDAP sunucusunda çalıştırılabilirler ve yönetici hakları gerektirirler. Veritabanına yazmaları gerektiğinde, OpenLDAP sunucusu genellikle durdurulmalıdır.
    İki arama komutunun çıktısında, iki LDAP girdisi farkedeceksiniz, bir tanesi ağaçtaki en uç seviye elemanını, diğeri LDAP yönetici girdisini temsil ediyor. slapcat çıktısında, ldapsearch çıktısında gösterilmeyen extra özelliklere dikkat edin. Bunlardan bir tanesi userPassword, /etc/ldap/slapd.conf dosyasındaki öntanımlı erişim kısıtlamalarından dolayı anonim okuyuculara gösterilmez.

ldapsearch -x

# extended LDIF
#
# LDAPv3
# base <dc=spinlock, dc=hr> (default) with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# spinlock.hr
dn: dc=spinlock,dc=hr
objectClass: top
objectClass: dcObject
objectClass: organization
o: spinlock.hr
dc: spinlock

# admin, spinlock.hr
dn: cn=admin,dc=spinlock,dc=hr
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator

# search result
search: 2
result: 0 Success

# numResponses: 3
# numEntries: 2

sudo slapcat

dn: dc=spinlock,dc=hr
objectClass: top
objectClass: dcObject
objectClass: organization
o: spinlock.hr
dc: spinlock
structuralObjectClass: organization
entryUUID: 350a2db6-87d3-102c-8c1c-1ffeac40db98
creatorsName:
modifiersName:
createTimestamp: 20080316183324Z
modifyTimestamp: 20080316183324Z
entryCSN: 20080316183324.797498Z#000000#000#000000

dn: cn=admin,dc=spinlock,dc=hr
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e2NyeXB0fVdSZDJjRFdRODluNHM=
structuralObjectClass: organizationalRole
entryUUID: 350b330a-87d3-102c-8c1d-1ffeac40db98
creatorsName:
modifiersName:
createTimestamp: 20080316183324Z
modifyTimestamp: 20080316183324Z
entryCSN: 20080316183324.804398Z#000000#000#000000

    Temel Ağaç Yapısını Yaratmak
    Açıklandığı gibi, LDAP veritabanı ağaç şeklinde yapılandırılmıştır. Kurumunuz için en uç seviye elemanı genellikle alan adıdır(domain name). Alan adının spinlock.hr olması durumunda, en uç seviye elemanı dc=spinlock,dc=hr.
   Alttaki bir sonraki seviyede, kurumunuz, insanlar, gruplar, servisler, ağlar, protokoller vb. alt "kurumsal birimlere"("organizational units") ayrılır.
    Bu nedenle, LDAP dizininde insanların Unix "üst verilerini"("meta data") desteklemek için, bahsedilen kurumsal birimlerden iki tanesinin yaratılmasıyla ilgileneceğiz, İnsanlar(People) ve Grup(Group). Bu ikisi yaklaşık olarak Unix /etc/passwd ve /etc/group dosyalarına karşılık gelecektir.
    Ldap verisi LDIF denilen metinsel bir formata dönüştürülür. Komut satırı LDAP araçları bu formatta veri alır ve üretir. LDIF akışları(stream) aynı zamanda LDAP girdileri ekleme, değiştire ve silme gibi komutlar içerebilir.
    Bu bilgiyle, sunucuyla etkileşerek iki kurumsal birim ekleyecek basit bir LDIF dosyası yaratalım, /var/tmp/ou.ldif. Boş satırların girdileri ayırdığına dikkat edin:

dn: ou=People,dc=spinlock,dc=hr
ou: People
objectClass: organizationalUnit

dn: ou=Group,dc=spinlock,dc=hr
ou: Group
objectClass: organizationalUnit

    LDIF dosyasını sunucuya yüklemek için, çevrimdışı aracı, slapadd, kullanarak bir örnek gösterelim:

sudo invoke-rc.d slapd stop
sudo slapadd -c -v -l /var/tmp/ou.ldif
sudo invoke-rc.d slapd start

    Hadi ldapsearch kullanarak yaratılan girdileri kontrol edelim.

ldapsearch -x ou=people

# extended LDIF
#
# LDAPv3
# base <dc=spinlock, dc=hr> (default) with scope subt
# filter: ou=people
# requesting: ALL
#

# People, spinlock.hr
dn: ou=People,dc=spinlock,dc=hr
ou: People
objectClass: organizationalUnit

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

    Kullanıcı Hesapları Yaratmak
    İki kurumsal birim yarattığımız gibi, ilk grubumuzu ve buna ait bir kişi yaratalım. Tekrar, problemi bir LDIF dosyası yaratarak ve yükleyerek çözelim, /var/tmp/user1.ldif. Boş satırlar girdileri ayırmaktadır:

dn: cn=mirko,ou=group,dc=spinlock,dc=hr
cn: mirko
gidNumber: 20000
objectClass: top
objectClass: posixGroup

dn: uid=mirko,ou=people,dc=spinlock,dc=hr
uid: mirko
uidNumber: 20000
gidNumber: 20000
cn: Mirko
sn: Mirko
objectClass: top
objectClass: person
objectClass: posixAccount
objectClass: shadowAccount
loginShell: /bin/bash
homeDirectory: /home/mirko

    LDIF dosyasını sunucuya yüklemek için, çevrimiçi aracı, ldapadd, kullanarak bir örnek yapalım. Önceden bahsedildiği gibi, ldapadd LDAP protokolünü kullanır, sunucuya sistem yöneticisi olarak bağlanmalı ve (slapd kurulumu sırasında tanımladığımız) yönetici parolasını girmeliyiz:

ldapadd -c -x -D cn=admin,dc=spinlock,dc=hr -W -f /var/tmp/user1.ldif

Enter LDAP Password: PASSWORD

adding new entry "cn=mirko,ou=group,dc=spinlock,dc=hr"

adding new entry "uid=mirko,ou=people,dc=spinlock,dc=hr"

    Şimdi kullanıcının parolasını tanımlamak için çevrimiçi bir araç kullanalım: ldappasswd. (Eğer LDAP'ı Kerberos ile birlikte kullanırsanız (MIT Kerberos 5 Guide) bu adım gerekli değildir)

ldappasswd -x -D cn=admin,dc=spinlock,dc=hr -W -S uid=mirko,ou=people,dc=spinlock,dc=hr

New password: NEW USER PASSWORD

Re-enter new password: NEW USER PASSWORD

Enter LDAP Password: ADMIN PASSWORD

Result: Success (0)

    Not
    Fark edebileceğiniz gibi bütün girdiler her zaman "fully qualified" olmalı ve soneki (dc=spinlock,dc=hr) ya da DN'in herhangi bir bileşenini gözardı edemezsiniz. Bu genellikle komut satırı örneklerinin uzun ve anlaşılmaz olmasına yol açabilir ve sıkıcı, gereksiz bir iş olarak görülebilir. Bunu sorun olarak görüyorsanız, çözüm için ya bu duruma alışmalısınız ya da bu bilgilerin bir çoğunu sizin için dolduran bir grafiksel LDAP sunucusu kullanmalısınız.

    Şimdi yaratılan kullanıcı girdilerini doğrulamak için ldapsearch kullanalım. /etc/ldap/slapd.conf dosyasındaki erişim kısıtlamalarından dolayı, yaratmış olsak bile parola alanı, userPassword, gösterilmeyecektir.

ldapsearch -x uid=mirko

# extended LDIF
#
# LDAPv3
# base <dc=spinlock, dc=hr> (default) with scope subtree
# filter: uid=mirko
# requesting: ALL
#

# mirko, people, spinlock.hr
dn: uid=mirko,ou=people,dc=spinlock,dc=hr
uid: mirko
uidNumber: 20000
gidNumber: 20000
cn: Mirko
sn: Mirko
objectClass: top
objectClass: person
objectClass: posixAccount
loginShell: /bin/bash
homeDirectory: /home/mirko

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

Tebrikler! Çalışan bir LDAP kurulumunuz var.

    NSS Yapılandırması
    Şimdi LDAP'ta yaratılmış yeni bir kullanıcımız var, sistemin onu görmesine izin vermeliyiz. Örneğin, root ve mirko kullanıcılarının varlığını test edelim. mirko görünmezken yönetici görünecektir:

id root
uid=0(root) gid=0(root) groups=0(root)

id mirko
id: mirko: No such user

    Sistemin LDAP hesaplarını görmesi için libnss-ldap (ki otomatik olarak libpam-ldap paketini de kuracaktır) ve nscd'yi kurmalıyız:

sudo apt-get install libnss-ldap nscd

    Bütün debconf cevapları:

LDAP server URI: ldap://192.168.7.12/ (Note the "ldap://", NOT "ldapi://"!)

Distinguished name of the search base: dc=spinlock,dc=hr

LDAP version to use: 3

Does the LDAP database require login? No

Special LDAP privileges for root? No

Make the configuration file readable/writeable by its owner only? No

Allow LDAP admin account to behave like local root? Yes

Make local root Database admin. No

Does the LDAP database require login? No

LDAP administrative account: cn=admin,dc=h15,dc=ri

LDAP administrative password: PASSWORD

Local crypt to use when changing passwords. md5

PAM profiles to enable: select all

     NSS modülünü yapılandırmak için, /etc/libnss-ldap.conf dosyasını açın. Yapılandırma satırlarını gösterildiği gibi yerlerştirin ve ayarlayın:

base dc=spinlock,dc=hr
uri ldap://192.168.7.12/

    Son olarak, LDAP NSS modulünü etkinleştirmek için, /etc/nsswitch.conf dosyasındaki passwd ve group ile ilgili satırları aşağıdaki iki satırla değiştirin:

passwd:         files ldap
group:          files ldap

    Nscd (the Name Service Caching Daemon) LDAP sunucusunu her seferinde sorgulamak yerine üstveriyi yerel olarak önbelleklemek için kullanılır. Uzun vadede çok etkili bir servis ancak test boyunca veriyi LDAP sunucusundan almak amacıyla bir an için durduracağız:

sudo invoke-rc.d nscd stop

    Şimdi LDAP kullanıcılarının görünür olduğunu doğrulayabiliriz:

id mirko

uid=20000(mirko) gid=20000(mirko) groups=20000(mirko)

    PAM Yapılandırması
    Bu makalenin son adımı LDAP'ı sistem yetkilendirme süreciyle tümleştirmekle ilgili.
    libpam-ldap'ı yükleyip yapılandıralım. (Bu adımı otomatik olarak libnss-ldap kurulumu sırasında yapmış olabilirsiniz — bu durumda Debian paketin zaten kurulu olduğunu söyleyecektir).
   

sudo apt-get install libpam-ldap

    Debconf cevapları:

Make local root Database admin. No

Does the LDAP database require login? No

Local crypt to use when changing passwords. md5

    PAM modülünü yapılandırmak için, /etc/pam_ldap.conf dosyasını açın. Yapılandırma satırlarını gösterildiği gibi yerlerştirin ve ayarlayın:

base dc=spinlock,dc=hr
uri ldap://192.168.7.12/

    Şimdi Linux-PAM 'ın kendisini yapılandıralım. PAM yapılandırması oldukça kırılgandır. Bu yüzden çalıştığı onaylanmış varolan örnekleri kullanın. Herhangi bir değişiklikte,  PAM Configuration File Syntax 'a bakmak isteyeceksiniz. Görünürde önemsiz varyasyonlar üzerinde özellikle durun — PAM'la birlikte, onlar genellikle büyük değişikliklere yol açarlar.
    PAM kullanıcının ya yerel parola dosyasında ya da LDAP'ta olmasını ve yetkilendirme sürecinin devamı için doğru parolayı bilmesini gerektirir.
    Burada anlatıldığı şekliyle LDAP'ta yetkilendirme yapmak LDAP sunucusuna bağlantılar düz metin şeklinde olduğundan ve parolalar kabloda dolaştığından güvenli değildir.
    LDAP sunucusuna bağlantının şifrelendirilmesi yerine, aşağıda gösterilen PAM dosyaları, eğer Kerberos kurulumu yaptıysanız, yetkilendirme için Kerberos'u da destekler. Bu durumda, yorum satırı olarak gösterilen PAM satırlarını değiştirin ve yetkilendirme Kerberos kullanılarak tamamen güvenli ve doğru bir şekilde yapılır.
 
    /ETC/PAM.D/COMMON-ACCOUNT

account sufficient      pam_unix.so
account required        pam_ldap.so

# Enable if using Kerberos:
#account required        pam_krb5.so


    /ETC/PAM.D/COMMON-AUTH

# Disable the three lines if using Kerberos:
auth [success=1 default=ignore] pam_unix.so nullok_secure
auth required pam_ldap.so use_first_pass
auth required pam_permit.so

# Enable the three lines if using Kerberos:
#auth    sufficient        pam_unix.so nullok_secure
#auth    sufficient        pam_krb5.so use_first_pass
#auth    required          pam_deny.so

    /ETC/PAM.D/COMMON-PASSWORD

password sufficient   pam_unix.so nullok obscure md5

# Disable if using Kerberos:
password required     pam_ldap.so use_first_pass 

# Enable if using Kerberos:
#password required pam_krb5.so use_first_pass

    /ETC/PAM.D/COMMON-SESSION

session required        pam_unix.so
session required        pam_mkhomedir.so skel=/etc/skel/ umask=0022

# Enable if using Kerberos:
#session  optional  pam_krb5.so minimum_uid=1000

    Sisteme Giriş Yapma
    Herşey gösterildiği şekilde ayarlandıktan sonra, mirko kullanıcısıyla sisteme giriş başarılı olmalıdır:

Login: mirko
Password: PASSWORD

Debian GNU/Linux tty5

Creating directory '/home/mirko'.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
mirko@host:~$

    Sonuç
    Bu aşamada işlevsel bir LDAP kurulumuna sahipsiniz.
    Merkesi ağ yetkilendirmesi ve kullanıcı üstverisinin paylaşılması (kullanıcı IDsi, grup IDsi, gerçek isimler, grup üyelikleri vb.)
    Bunula birlikte, yukarıda bahsedildiği gibi LDAP üzerinden yetkilendirme yapmak LDAP sunucusuna bağlantılar düz metin şeklinde olduğundan ve parolalar kabloda dolaştığından güvenli değildir. Bu sorunu çözmek için ağ yetkilendirmesi için LDAP yerine Kerberos kullanılması tavsiye edilir.
    Ayrıca, kullanıcılar başarılı bir şekilde yetkilendirildiklerinde, giriş yaptılır ve ev dizinlerine yerleştirilirler. Bununla birlikte, merkezi ağ yetkilendirme şemasında, kullanıcıların yaratılmadığı tekil makinelerde karşılık gelen ev dizinleri vrolmayacaktır. Bu sorun yukarıdaki pam_mkhomedir modülü tarafından halledilir. Bu modül eksik ev dizinlerini otomatik olarak yaratır.
    Bunun anlamı kullanıcı ev dizinlerinin ayrı ayrı giriş yaptıkları her makinede oluşturulur. Kullanıcılar değişik makinelerde değişik dosyalara sahip olacağı için, bu sorunlara yol açabilir. Bu durum Kerberos kullanıldığı taktirde, Kerberized ağlar dosyaların makineler arasında güvenilir ve parolasız olarak kopyalanmasını sağladığı için, kendi başına tamamen kabul edilemez olmayacaktır. Yine de kusursuz bir çözümden çok uzakta olacaktır. Bu sorunu gelişmiş, güvenli, heavy-duty dağıtık ağ dosya sistemleri ile çözmek için serideki bir diğer makaleye, OpenAFS Guide 'a bakınız.
 
    Kurduğumuz iyi bir temelle, LDAP hakkında daha ayrıntılı bilgi için erişilebilir diğer kaynaklara da bakın:
    Ticari danışma ve AFS içeren infrastructure-based ağlar için, Spinlock Solutions ya da OpenLDAP destek sayfasındaki diğer kuruluşlarla iletişim kurun.  

    Linkler

Platformlar:
GNU
Debian GNU

LDAP:
OpenLDAP
Gq — Gtk LDAP İstemcisi
Luma — QT LDAP İstemcisi
jXplorer — Java LDAP İstemcisi
Apache Directory Studio — Eclipse-tabanlı LDAP İstemcisi
web2ldap — web-tabanlı LDAP İstemcisi

Glue layer:
NSS
Linux-PAM

İlişkil altyapısal teknolojiler:
MIT Kerberos
OpenAFS
FreeRADIUS

Ticari destek:
Spinlock Solutions
OpenLDAP support organizations

Diğer:
DocBook

NOT: Bu yazı [1]  adresindeki makalenin Türkçeye çevrilmiş/çevrilmeye çalışılmış halidir. Anlamsal ve söz dizimsel hatalar içerebilir.
[1]: http://techpubs.spinlocksolutions.com/dklar/ldap.html

3 yorum:

  1. Teşekkürler Reis :) Ben bişey yapmadım çevirdim sadece :)

    YanıtlaSil