Sistem Servislerinde Kimlik Kanıtlama

LDAP, sistem servisleri için kimlik kanıtlamada PAM (Pluggable Authentication Modules) ile birlikte çalışır. Bu şekilde pam kullanan servislerin (ftp, ssh, sistem kullanıcısı vb.) hepsi için tek bir yerden kimlik kanıtlama gerçekleştirilir. Eğer servis kullanıcı adı ve parola dışında başka hesap bilgilerine de (örneğin ev dizini) ihtiyaç duyuyorsa NSS (Name Service Switch) kullanılmalıdır.

OpenLDAP + PAM + NSS

Kurulum için apt-get install ldapscripts libpam-ldap libnss-ldap komutu verilir. Burada ldapscripts paketi LDAP dizinindeki kullanıcı hesaplarını yönetmek için (kullanıcı/grup ekleme, silme vb.) gereken kabuk betiklerini kurar. libpam-ldap paketi PAM kullanabilen servislerin LDAP üzerinden kimlik kanıtlama yapabilmesini sağlar. libnss-ldap paketi ise kimlik kanıtlama sırasında gerekli olan diğer bilgilerin LDAP sunucudan alınması için gereklidir. Kurulum sırasında çeşitli diyaloglarla paketlerin yapılandırılması yapılır.

Paketleri kurarken bizden bazı bilgileri istiyor. Libpam-ldap için ldap host ismini, ldap'ın base adresini (ldap.conf'deki kök dizini "dc=ornek,dc=com"), ldap versiyon 3 seçtik. Make local root Database admin (bu seçenekte bize root kullanıcı ile ldap admin gibi davransın mı diye soruyor.) yes diyoruz. Does the LDAP database require login? (ldap veri tabanı için kullanıcı girişi gereksin mi?) no diyoruz. LDAP account for root: ldap root kullancısının tam yolunu ( dn) yazıyoruz. Ldap root'unun parolasını yazıyoruz.Local crypt to use when changing passwords ( ldap kendi içerisindeki parolaları nasıl saklasın? ) md5 diyoruz. Ve şimdilik işimiz bitti. Sonra /etc/nsswitch.conf'u düzenliyoruz. Bu dosyayı aşağıdaki gibi değiştiriyoruz:

passwd:         compat ldap
group:          compat ldap
shadow:         compat ldap

Ardından /etc/libnns-ldap.conf'da ldap host'un adresini, base adresini, ldap_version 3, binddn ve bindpw'yi değiştiriyoruz. Bind yaparken buradaki kullanıcı üzerinden yapar ya da rootdn rootpw girebilirsiniz.

Egroupware

Egroupware programında yapacağımız sadece kimlik kanıtlaması kullanıcıların diğer bilgilerini seçilen başka bir veri tabanında kayıt edilecek şekilde hazırlanmıştır bu ayarlar.

egroupware setup web sayfasından yönetici olarak giriş yaptıktan sonra Configuration bölümünden Edit Current Configuration bölümüne geçiş yapıyoruz.

Authentification / User Accounts: başlığının altında bulunan Which kind of authentification do you want to use: ldap - Kimlik kanıtlaması için ne kullanılacağını belirtiyoruz. Select where you want to store/retrieve user accounts: sql - Burada da kullanıcının diğer bilgilerinin saklanacağı yeri belirtiyoruz. Aşağıda ise ldap ayarlarının bulunduğu bölümde değişikler yapacağız.

İf using ldap:
LDAP host:              localhost (Ya da ldap sunucusun bulunduğunu ip adresi)
LDAP accounts context :  ou=dugum1,dc=comu,dc=edu,dc=tr
LDAP search filter accounts, default:       (uid=%user)
“uid=%user)”,%domain=eGW-domain:
LDAP group context:                     (bir group belirtmediğimiz için boş)
LDAP rootdn(searching accounts and 
changing password):                     cd=manager,dc=comu,dc=edu,dc=tr
LDAP root password:                 xxx (slapd.conf içine girdiğimiz parola)
LDAP encryption:                    md5 
Do you want to manage homedirectory and loginshell attributes:           No(bu özelliğini sql üzerinde tutulacak.)
LDAP default homedirectory prefix (e.g. /home for /home/username):        /ldap/home
Ldap defualt shell(e.g. /bin/bash)      /bin/bash

Böylece egroupware ile OpenLDAP ilişkilendirilmiş oldu.

Vsftp

Vsftpd kimlik kanıtlamasını pam üzerinden yapmaktadadır. Bu yüzden pam'de değişiklikler yapılacak. Ancak vsftpd de ufak birkaç değişiklik yapacağız. Başlangıç olarak vsftpd yi yüklüyoruz.

#apt-get install vsftpd

/etc/vsftpd.conf dosyasında local_enable=YES satırını açıyoruz ki kayıtlı kullanıcılar girebilsin. chroot_local_user=YES satırını açıyoruz. pam_service_name=vsftpd - bu satırdan emin oluyoruz. Çünkü kimlik kanıtlaması yaparken pam.d'nin altındaki hangi dosyaya bakacağını belirtiyor.

/etc/pam.d/vsftpd dosyasına:

auth       sufficient   /lib/security/pam_ldap.so
account    sufficient   /lib/security/pam_ldap.so
password   sufficient   /lib/security/pam_ldap.so
satırlarını ekliyoruz.

/etc/pam_ldap.conf dosyasında:

host 127.0.0.1  // ldap sunucusunun adresi
base dc=comu,dc=edu,dc=tr
ldap_version 3
binddn cn=manager,dc=comu,dc=edu,dc=tr
bindpw xxx
scope sub // farklı düğümdeki kullanıcılarda giriş yapabilsin isterseniz bunu değiştirmeyebilirsiniz.
pam_login_attribute userid // giriş yapacak kullanıcın hangi özelligine göre seçileceği.
pam_password md5  // buradaki şifreleme şeklini önceden yapılan ayarlar ile aynı olmalıdır.
Bu ayarlardan sonra vsftpd, OpenLDAP ile kimlik kanıtlaması yapacaktır.

FreeRADIUS

FreeRADIUS kimlik kanıtlamasını farklı yöntemlerle yapabilmektedir. users dosyasında her kullanıcı için birer kullanıcı adı ve parola çifti saklanabileceği gibi istenirse bir veritabanı (mysql, postgresql, gibi) veya ldap kullanarak da kimlik kanıtlaması yapılabilir. Ldap kullanmak isterseniz freeradius-ldap*.deb paketini de (veya dağıtımınıza uygun paketi) kurmanız gerekir.

OpenLDAP sunucusunda yapılacaklar

OpenLDAP sunucusunda FreeRADIUS için kullanabileceğiniz şema kullandığınız pakete göre farklılık içermekle birlikte /usr/share/doc/freeradius/examples/openldap.schema dosyasında bulunmaktadır. slapd.conf dosyasında ldap sunucunun bu şemayı kullanmasını söylemeliyiz.

...
include         /etc/ldap/schema/radius.schema
...

FreeRADIUS sunucusunda yapılacaklar

FreeRADIUS yapılandırma dosyalarında (radiusd.conf, sites-enabled/default, sites-enabled/inner-tunnel, ldap.attrmap) aşağıdaki gibi gerekli değişiklikleri yapıyoruz.

radiusd.conf dosyasında ldap bloğunu açarak parametreleri sunucumuza uygun bir şekilde giriyoruz:

ldap {
server = "localhost"
identity = "cn=admin,dc=localhost"
password = gizli
basedn = "dc=localhost"
base_filter = "(objectclass=radiusObjectProfile)"
access_attr = "cn"
dictionary_mapping = ${raddbdir}/ldap.attrmap
authtype = ldap
ldap_connections_number = 5
timeout = 4
timelimit = 3
net_timeout = 1
dictionary_mapping = ${confdir}/ldap.attrmap
password_attribute = userPassword
set_auth_type = no
}

sites-enabled/default dosyasında authorize bloğu içinde ldap satırını açıyoruz ve gereksiz olanları kapatıyoruz. post-auth bloğunda da ldap satırını açıyoruz:

authorize {
...
#		ntdomain
		ldap
#		unix
#		files
...
}
post-auth {
...
ldap
...
}

sites-enabled/inner-tunnel dosyasında aşağıdaki şekilde değişiklik yapıyoruz:

...
#		chap
#		mschap
#		unix
#		ntdomain
ldap
}
post-auth {
...
ldap
...
}
post-proxy {
...
#		eap
...
}

ldap.attrmap dosyasına aşağıdaki satırları ekliyoruz.

checkItem   User-Password                  userPassword
checkItem   Cleartext-Password             userPassword
replyItem   Tunnel-Type                    radiusTunnelType
replyItem   Tunnel-Medium-Type             radiusTunnelMediumType
replyItem   Tunnel-Private-Group-Id        radiusTunnelPrivateGroupId

Bu değişikliklerden sonra elbette freeradius süreci yeniden başlatılmalıdır.

Jabber

Bu belge hazırlanırken jabber 2.2.1 sürümü kullanılmıştır.

Jabber programında yapacağımız yalnızca kimlik kanıtlanmasını yapılacaktır. Kullanıcıların diğer bilgilerini seçilebilecek başka bir veri tabanında ( mysql, postgresql, gibi) tutulacak şeklinde hazırlanmıştır bu ayarlar.

Jabber kurulumunu kaynak koddan kurulmuştur.

Jabber sunucusunu ldap ile kimlik kanıtlamak için configure sırasında --enable-ldap --enable-idn eklenmelidir. Jabber sunucusunun kurulum aşaması bittikten sonra /usr/local/etc/ altında gerekli olan ayar dosyalarına gerekli değişiklikleri yapabiliriz.

/usr/local/etc/c2s.xml dosyasında aşağıdaki değişiklikler yapılmalıdır.

< authreg > 
< module > ldap </ module >
</ authreg >
...
< ldap>
< host > ldap.comu.edu.tr </ host>
< v3 / >
< binddn > cn=admin,dc=comu,dc=edu,dc=tr </ binddn>
< bindpw > xxx < / bindpw >
< uidattr > uid < / uidattr > 
< base > dc=comu,dc=edu,dc=tr < / base >
</ ldap>

Bu değişiklikler sonrasında jabberd süreci yeniden başlatılmalıdır.

Squid

Öncelikle kullandığınız squid sürümünün ldap ile kimlik kanıtlaması yapıp yapamayacağını aşağıdaki komutla denetlemelisiniz.

# /usr/lib/squid3/squid_ldap_auth -b "dc=comu,dc=edu,dc=tr" -f "uid=%s" ldap.comu.edu.tr

Eğer bir problem yoksa squid.conf dosyasına aşağıdaki satırları eklediğinizde kullanıcı sorgulamasını ldap ile yapabilirsiniz:

auth_param basic program /usr/lib/squid3/squid_ldap_auth -v 3 -b "dc=comu,dc=edu,dc=tr" -f uid=%s ldap.comu.edu.tr
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
...
acl ldapauth proxy_auth REQUIRED
...
http_access allow ldapauth

Bu değişiklikler sonrasında squid3 süreci yeniden başlatılmalıdır.