pam_exec ile oturum açma işlemlerinde özel loglama


Elimizde bir uygulama var. Bu uygulama logları parçalayarak kendi işini görmekte. Fakat istedigi temel bir kaç bilgi var. Örneğin SSH bağlantısı yapıldığında log oluşacak fakat oluşan log da makinenin ip si bir anahtar kelime ve kullanıcı adına ihtiyaç var. Ya da masaüstüne oturum açıldığında benzer bilgilere ihtiyaç duyuluyor.

gel gör ki ssh logunun formatı kısıtlı ve belli ki her istenilen log aynı formatta olması mümkün değil. Formatı da geçtik içerikte farklı olabilir. Bizde naptık… Kendi logumuzu kendimiz basalım ve bunu en kolay olabilecek şekilde yapalım dedik.

Bu minvalde araştırma yaparken artık her bilgi bizi PAM a yönlendirmeye başladı. Eğer login logout olduğumda istediğim log u basabilirsem problem düzelecekti. Bizde öyle yaptık ve pam_exec ile bu işlemi gerçekleştirdik.

Linux /etc/pam.d klasörünün altına bakarsanız bir sürü pam desteği olan uygulama görürsünüz. Bizim ilgilendiğimiz uygulamalar SSH bağlantıları için “/etc/pam.d/sshd” ve Gnome masaüstü oturum açma uygulaması için ise “/etc/pam.d/gdm-password”

Mantık şu. Oturum(session) açıldığında “Authorization Success..” ve oturum kapatıldığında ise “Logout …” mesajı merkezi log sunucumuza gönderilecek.

Bu nedenle istediğimiz işlemleri gerçekleştiren bir betik yazdık aşağıdaki gibi.
Bu bash scriptini /etc/ altına .logsend diye kaydettik ve chmod +x ile çalıştırılabilir hale getirdik.

#!/bin/bash
logserver="10.20.30.65"
port="514"
host="`hostname`"
ip="`hostname -I`"
msg="<14>"

# Eger PAM aksiyon tipi close_session degilse basarili mesaji olustur. Eger open session degilse oturum kapatıldi mesaji olusturu ve bunu nc ile rsyslog sunucusuna gönder
if [ "$PAM_TYPE" != "close_session" ]; then
   msg+="Authorization Succeed, $PAM_SERVICE Session Started: User:$PAM_USER from
   RHost:$PAM_RHOST on Host:$host Ip:$ip"
elif [ "$PAM_TYPE" != "open_session" ]; then
   msg+="Logout, $PAM_SERVICE Session Closed: User:$PAM_USER from
   RHost:$PAM_RHOST on Host:$host Ip:$ip"
fi
echo "$msg" | nc -u -v -w 0.1 $logserver $port

Sonra gidip /etc/pam.d/sshd ve /etc/pam.d/gdm-password dosyalarına girip alttaki satırı ekledik.

session optional pam_exec.so stdout /etc/.logsend

Herhangi bir şeyi restart etmenize gerek yok. Test için 10.20.30.65 ip li makineye gidiniz ve alttaki komut ile gelen mesajlari görebilirsiniz(login logout olmayı unutmayın istemci makinede).

nc -l 514 -u

İyi Çalışmalar

 

Reklamlar