Debian üzerinde OpenLDAP 2.4.23-7.2 sürümü ile uygulanmıştır bu aşamalar. Bu yazı kapsamında yapılacak olan uygulamalar şöyle:
- OpenLDAP log seviyesinin ayarlanması
- OpenLDAP log hedefinin özel bir klasöre yönlendirilmesi
- OpenLDAP log dosyalarının belirli peryotta arşivlenmesi
OpenLDAP log seviyesinin ayarlanması
Kimlik doğrulama veya benzeri sorgulama işlemlerini kayıt altına almaya gerek varsa bu işlem yapılabilir. Bunun için özetle; /etc/ldap/slapd.d/cn\=config.ldif dosyasında log seviyesinin belirtilmesi ve slapd servisinin yeniden başlatılması ( /etc/init.d/slapd restart ) gerekmektedir. /etc/ldap/slapd.d/cn\=config.ldif dosyasında olcLogLevel: none şeklinde olan satırda, none kısmını isteğe göre özelleştirerek denemeler yapılabilir. Kullanılabilecek olan tüm parametrelerin listesi, http://www.openldap.org/doc/admin24/slapdconf2.html adresinde veya yardım dokümanlarında bulunmaktadır.
Benim yaptığım birkaç deneme ve aldığım log çıktıları aşağıdadır:
1 2 3 |
### olcLogLevel: stats2 ### Jun 23 10:27:31 nac slapd[22799]: conn=1000 op=239 ENTRY dn="uid=test.kullanici,ou=personel,dc=bilecik,dc=edu,dc=tr" Jun 23 10:27:40 nac slapd[22799]: conn=1000 op=254 ENTRY dn="uid=test.kullanici,ou=ogrenci,dc=bilecik,dc=edu,dc=tr" |
1 2 3 4 |
### olcLogLevel: stats ### Jun 23 10:25:12 nac slapd[22762]: conn=1000 op=1 SRCH base="dc=bilecik,dc=edu,dc=tr" scope=2 deref=0 filter="(uid=test.kullanici)" Jun 23 10:25:12 nac slapd[22762]: conn=1000 op=1 SRCH attr=radiusNASIpAddress radiusExpiration acctFlags userPassword dBCSPwd sambaNTPassword sambaLMPassword ntPassword lmPassword radiusCallingStationId radiusCalledStationId radiusSimultaneousUse radiusAuthType radiusCheckItem radiusTunnelPrivateGroupId radiusTunnelMediumType radiusTunnelType radiusReplyMessage radiusLoginLATPort radiusPortLimit radiusFramedAppleTalkZone radiusFramedAppleTalkNetwork radiusFramedAppleTalkLink radiusLoginLATGroup radiusLoginLATNode radiusLoginLATService radiusTerminationAction radiusIdleTimeout radiusSessionTimeout radiusClass radiusFramedIPXNetwork radiusCallbackId radiusCallbackNumber radiusLoginTCPPort radiusLoginService radiusLoginIPHost radiusFramedCompression radiusFramedMTU radiusFilterId radiusFramedRouting radiusFramedRoute radiusFramedIPNetmask radiusFramedIPAddress radiusFramedProtocol radiusServiceType gecos radiusReplyItem sasdefaultloginsequence Jun 23 10:25:12 nac slapd[22762]: conn=1000 op=1 SEARCH RESULT tag=101 err=0 nentries=1 text= |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
### olcLogLevel: ACL ### Jun 23 10:25:06 nac slapd[22702]: <= root access granted Jun 23 10:25:06 nac slapd[22702]: => access_allowed: search access granted by manage(=mwrscxd) Jun 23 10:25:06 nac slapd[22702]: => access_allowed: search access to "uid=test.kullanici,ou=personel,dc=bilecik,dc=edu,dc=tr" "uid" requested Jun 23 10:25:06 nac slapd[22702]: <= root access granted Jun 23 10:25:06 nac slapd[22702]: => access_allowed: search access granted by manage(=mwrscxd) Jun 23 10:25:06 nac slapd[22702]: => access_allowed: read access to "uid=test.kullanici,ou=personel,dc=bilecik,dc=edu,dc=tr" "entry" requested Jun 23 10:25:06 nac slapd[22702]: <= root access granted Jun 23 10:25:06 nac slapd[22702]: => access_allowed: read access granted by manage(=mwrscxd) Jun 23 10:25:06 nac slapd[22702]: => access_allowed: result not in cache (gecos) Jun 23 10:25:06 nac slapd[22702]: => access_allowed: read access to "uid=test.kullanici,ou=personel,dc=bilecik,dc=edu,dc=tr" "gecos" requested Jun 23 10:25:06 nac slapd[22702]: <= root access granted Jun 23 10:25:06 nac slapd[22702]: => access_allowed: read access granted by manage(=mwrscxd) Jun 23 10:25:06 nac slapd[22702]: => access_allowed: result not in cache (userPassword) Jun 23 10:25:06 nac slapd[22702]: => access_allowed: read access to "uid=test.kullanici,ou=personel,dc=bilecik,dc=edu,dc=tr" "userPassword" requested Jun 23 10:25:06 nac slapd[22702]: <= root access granted Jun 23 10:25:06 nac slapd[22702]: => access_allowed: read access granted by manage(=mwrscxd) Jun 23 10:25:06 nac slapd[22702]: => access_allowed: result not in cache (sambaNTPassword) Jun 23 10:25:06 nac slapd[22702]: => access_allowed: read access to "uid=test.kullanici,ou=personel,dc=bilecik,dc=edu,dc=tr" "sambaNTPassword" requested Jun 23 10:25:06 nac slapd[22702]: <= root access granted Jun 23 10:25:06 nac slapd[22702]: => access_allowed: read access granted by manage(=mwrscxd) Jun 23 10:25:06 nac slapd[22702]: => access_allowed: result not in cache (sambaLMPassword) Jun 23 10:25:06 nac slapd[22702]: => access_allowed: read access to "uid=test.kullanici,ou=personel,dc=bilecik,dc=edu,dc=tr" "sambaLMPassword" requeste |
OpenLDAP log hedefinin özel bir klasöre yönlendirilmesi
Benim sistemimde log sunucusu (servisi) olarak rsyslog çalışıyordu. Yapılandırmayı buna göre yazdım.
OpenLDAP varsayılan olarak LOCAL4 facility özelliğinde log gönderir. “facility” için, bkz: https://en.wikipedia.org/wiki/Syslog#Facility. İstenirse OpenLDAP farklı bir facility ile log gönderecek şekilde yapılandırılabilir. Bunun yeri de /etc/default/slapd dosyasının en son satırındaki SLAPD_OPTIONS kısmıdır. aşağıda örnek olarak bu satırın düzenlenmiş hali verilmiştir:
1 2 3 4 5 6 |
# Additional options to pass to slapd # zaten default olarak LOCAL4 imis. slapd --help yazinca belirtiyor. ama yine de yazdim ben (murat) # 2015.06.23 http://www.openldap.org/doc/admin24/tuning.html#Logging #VARSAYILAN_AYAR: SLAPD_OPTIONS="" SLAPD_OPTIONS="-l LOCAL4" |
Üstteki gibi bir yapılandırma, /usr/sbin/slapd dosyasına parametre göndermek için kullanılıyor.
Buraya kadar; varsayılan durum açıklanmaya çalışıldı. Ancak halen log’ları farklı bir yere göndermiyor. Çok fazla log gelmiyor ise varsayılan yerinde ( /var/log/syslog dosyasına kaydeder) durmasında da sakınca yoktur. Ancak yukarıdaki gibi detaylı log tutulması gerekecekse, ayırmakta fayda var.
LOG ayırma işini rsyslog yapılandırması üzerinden yapıyoruz. /etc/rsyslog.d/slapd.conf adında bir dosya oluşturup, içini aşağıdaki gibi düzenleyebilirsiniz:
1 2 3 |
# LDAP log'lari LOCAL4.* -/var/log/ldap/slapd.log & ~ |
Yukarıdaki yapılandırmada iki önemli işaret var:
- - (tire) isareti anlamı: Her kayıt yazma işleminde dosya sistemini güncelleme. Biriktirip toptan yaparsın. Boşuna performans düşürme.
- & ~ işaretleri anlamı: Bu satir, ilgili kuralı daha fazla işleme sokmamasını söyler. Eğer bu işaretler olmazsa, hem gonderdiğimiz dosyaya, hem de /var/log/syslog içine yazmaya devam eder. Gereksiz yere mükerrer veri olur.
rsyslog düzenlemesini yaptıktan sonra, log servisini yeniden başlatmalıyız: /etc/init.d/rsyslog restart
rsyslog servisi yeniden başlatıldığında; /var/log/ldap/slapd.log isminde bir dosya oluşturulacak ve kayıtlar yazılmaya başlanacaktır. Çok fazla kayıt oluşacaksa, bunların ara sıra arşivlenmesi gerekecektir. Şimdi bu işlemin nasıl yapılacağına geliyoruz.
OpenLDAP log dosyalarının belirli peryotta arşivlenmesi
Bu işi çok güzel yapan bir uygulama var: logrotate. İstediğiniz her türlü log dosytasını çok ince düzenlemelerle, istediğiniz gibi arşivleyebilirsiniz. Yapılandırması da çok sade ve basit. logrotate uygulamasında da rsyslog’ta olduğu gibi, ilave yapılandırma dosyaları için .d uzantılı bir klasör kullanılıyor. LOG’larını otomatik arşivletmek istediğiniz tüm servisler için, /etc/logrotate.d/ altında bir dosya oluşturabilirsiniz. Bu şekilde yapılandırmayı yönetmek te çok kolay oluyor. Benim oluşturduğum /etc/logrotate.d/slapddosyası şöyle:
1 2 3 4 5 6 7 8 9 10 11 |
/var/log/ldap/*.log { weekly rotate 52 compress delaycompress notifempty missingok postrotate /etc/init.d/slapd force-reload > /dev/null endscript } |
Hafatlık arşivle, arşivlenen dosyayı sıkıştır, vb… Dosya içeriği oldukça kolay okunabildiğinden detaya girmiyorum. İnternette çok güzel kaynaklar var bununla ilgili. logrotate yapılandırmasından sonra bir servisi yeniden başlatmaya gerek yok. Zaten kendisi cron sayesinde düzenli olarak tetikleniyor.
logrotate sayesinde log’lar arşivlendikçe şu tarzda dosyalar oluşacaktır:
1 2 3 4 5 |
slapd.log slapd.log.1 slapd.log.2.gz slapd.log.3.gz ... |
Yapılandırma dosyasında belirtilen peryoda göre (weekly, dailiy, vb.) yeni arşiv dosyaları otomatik olarak oluşturulacaktır.