30 Mayıs 2011 Pazartesi

LDAP ve Apache - Kullanıcı Doğrulaması Pratikleri

LDAP (Lightweight Directory Access Protocol), dizin servislerine (directory services) erişimi sağlayan bir iletişim protokolünü ifade etmektedir. Dizin sunucusu (directory server) adı verilen bir tür veritabanının sunduğu veri erişim servisine dizin servisi adı verilmektedir. Dizin sunucuları, verinin merkezi olarak tutulduğu ve çoğunlukla gezinme, arama ve okuma işlevlerine yazma işlevinden daha fazla gereksinim duyulan durumlarda ön plana çıkan sunuculardır. Verinin hiyerarşik şekilde tutulduğu ve standart arayüzler üzerinden erişim imkanı sunan bu sunucuların kullanıcı veritabanı olmak ve kullanıcı doğrulaması sağlamak gibi işlevlere yönelik olarak geniş bir kullanım alanı bulması doğaldır.

Bu yazıda LDAP protokolü ve sunucularını anlatmaktan çok Apache (http://httpd.apache.org/) Web sunucusu üzerinden verilen bir takım servislerin LDAP üzerinden kullanıcı doğrulaması yapacak şekilde nasıl ayarlanabileceklerine değinilmiştir.

Debian kullanıyorsanız, paket yöneticisi ile yüklediğiniz Apache 2.2 sunucunuz aynı zamanda mod_ldap ve mod_authnz_ldap modülleri ile birlikte gelecektir. Bu modüller etkinleştirilirse, Web sunucusu belirlenen URL alanları için LDAP doğrulaması yapar hale getirilebilmektedir.

Debian dağıtımı ile gelen Apache ayar dizini içindeki mods-enabled dizini içinden, mods-available dizini içindeki ldap.load, ldap.conf ve authnz_ldap.load dosyalarına referans verecek şekilde soft-linkler oluşturulmalıdır. Böylece mod_ldap.so ve mod_authnz_ldap.so dinamik kütüphaneleri Apache açılışında yüklenir hale getirilir.

Aşağıdaki Apache konfigürasyon ifadeleri ile kullanıcı doğrulaması bağlamında yapılabileceklere yönelik pratik örnekler verilmiştir.

Belirli bir URL dizinine erişimin LDAP üzerinden kullanıcı doğrulaması yapmaya zorlanması aşağıda örneklenmiştir:
<Location "/internal">
  AuthType Basic
  AuthName "Kullanicilara Yonelik Bolge"
  AuthBasicProvider ldap
  AuthLDAPURL "ldap://127.0.0.1/uid=user1,ou=Users,dc=x,dc=y,dc=z?uid?sub?(objectClass=inetOrgPerson)"
  Require valid-user
</location>
Apache Web sunucusu üzerinden verilen bir SVN (Subversion) servisi aşağıdaki gibi LDAP üzerinden kullanıcı doğrulaması yapmaya zorlanabilir. (Bu örnekten önce Subversion (SVN) Servislerinin HTTPS Üzerinden Sunulması başlıklı yazıya göz atabilirsiniz.)
<Location /svn/project1>
  DAV svn
  SVNPath /disk/svn/project1
  AuthzSVNAccessFile /disk/svn/project1/conf/authz
  Require valid-user
  AuthType Basic
  AuthName "Project1 - SVN Repository"
  AuthBasicProvider ldap
  AuthLDAPURL "ldap://127.0.0.1/ou=Users,dc=x,dc=y,dc=z?uid?sub?(|(objectClass=inetOrgPerson)(objectClass=simpleSecurityObject))"
</Location>
Aşağıda ise bir Trac (http://trac.edgewall.org/) servisinin LDAP ile kullanıcı doğrulaması yapar hale getirilmesini örneklemektedir. (Bu örnekten önce Debian Üzerine Trac Kurulumu başlıklı yazıya göz atabilirsiniz.)
<Location /trac/project1>
  SetHandler mod_python
  PythonHandler trac.web.modpython_frontend
  PythonInterpreter main
  PythonOption TracEnv /disk/trac/project1
  PythonOption TracUriRoot /trac/project1
  SetEnv PYTHON_EGG_CACHE /tmp
</Location>

<Location "/trac/project1/login">
  AuthType Basic
  AuthName "Project 1 - Trac Interface"
  AuthBasicProvider ldap
  AuthLDAPURL "ldap://127.0.0.1/ou=Users,dc=x,dc=y,dc=z?uid?sub?(objectClass=inetOrgPerson)"
  Require valid-user
</location>
Örneklediğimiz ortamda Apache Web sunucusu ve LDAP sunucularının aynı makinada olacağı düşünülmüştür. Dolayısıyla ayarlarda görüleceği üzere LDAP URL içinde 127.0.0.1 IP adresine erişim söz konusudur. Apache ve LDAP sunucularının ayrı makinalarda olması durumunda güvenli LDAP bağlantısı (LDAPS) kullanılması önerilmektedir.

Burada yapılan işlem sadece kullanıcı doğrulaması (authentication) yapılarak erişilmek istenen servise erişimin ilk aşamasının yapılmasıdır. Servis özelindeki erişim yetkilerinin (authorization) ele alınması ile ilgili sorumluluk ilgili servise (dolayısıyla sunucusuna) bırakılmıştır.

Linkler:

Hiç yorum yok: