İçeriğe geçmek için "Enter"a basın

SSH Login Loglama ve Log Rotasyonu İşlemi

Son güncelleme tarihi 10 Nisan 2022

SSH Login?

Linux sistem kurmuş ve yöneten herkesin kesinlikle kullandığı ve kullanması gereken bir protokoldür SSH, varsayılan olarak TCP 22 portu üzerinden iletişim sağlanır. RFC-4253 içerisinden teknik dökümanına erişilebilir.

openssh

SSH protokolü, teknik altyapısı ve kullanım alanları başka bir yazının konusu, bu yazımda Linux sistemimize bu protokol üzerinden iletişim kurulduğunda erişim sağlayan (login) kullanıcının bilgilerini loglama işleminden ve bu log dosyalarının şişmemesi için log rotasyonu işleminden bahsedeceğim. Kullandığım sistem Debian GNU/Linux 11 (bullseye) üzerinde OpenSSH 8.4 ve logrotate 3.18.0 Open SSH ve logrotate kullanan diğer dağıtımlarda da konfigürasyon aynı olduğundan diğer dağıtımlarda da çalışacaktır.

PAM nedir?

PAM detaylı olarak başka bir yazıda ele alınacağından sadece tanımı ve ihtiyacımız olan konfigürasyon dosyasını belirteceğim. man pam komutu ile detaylı bilgiye erişilebilir ve bu döküman içerisinde belirtilen tanım;

NAME

      pam – Pluggable Authentication Modules Library

(Takılabilir Kimlik Doğrulama Modülleri Kitaplığı) şeklindedir.

Tanımdan da anlaşılacağı üzere Linux sistemimize kimlik doğrulayarak erişebilmemiz için gerekli kitaplıklar bu sistem tarafından yönetilir. SSH ile login işlemi için de /etc/pam.d/sshd dosyası içerisindeki konfigürasyon kullanılır. Biz de bu dosya içerisinde kendi yazacağımız çalıştırılabilir shell dosyamıza tetikleme satırı ekleyeceğiz.

pam-sshd

Öncelikle pam_exec ile tetiklenecek shell scriptini hazırlayalım.

Hazırlayacağımız script içerisinde;

man pam_exec komutu ile görebileceğimiz PAM_TYPE , PAM_RUSER , PAM_USER PAM_RHOST değişkenlerini, ayrıca hostname, ve işlemin yapıldığı tarih bilgilerini loglama için kullanacağız.

root@uxn-workstation:/etc/pam.d# man pam_exec

PAM_EXEC(8)                                                    Linux-PAM Manual                                                   PAM_EXEC(8)

NAME
       pam_exec - PAM module which calls an external command

SYNOPSIS
       pam_exec.so [debug] [expose_authtok] [seteuid] [quiet] [stdout] [log=file] [type=type] command [...]

DESCRIPTION
...
       items are exported as environment variables: PAM_RHOST, PAM_RUSER, PAM_SERVICE, PAM_TTY, PAM_USER and PAM_TYPE, which contains one of
       the module types: account, auth, password, open_session and close_session.
...

Herhangi bir metin editörüyle dosyamızı /usr/bin/ssh-login-notify.sh şeklinde oluşturup aşağıdaki kodu içerisine ekleyelim.

nano /usr/bin/ssh-login-notify.sh
#!/usr/bin/sh

if [ "$PAM_TYPE" != "close_session" ]; then
	host="$(hostname -f)"
	subject="SSH Login: $PAM_RUSER as $PAM_USER from $PAM_RHOST on $host"
	message="$subject
$(date)"
	echo "$message" >> /var/log/ssh-login.log
fi
exit 0

Shell scriptimizi çalıştırılabilir hale getirelim ve log dosyamızı oluşturalım.

chmod +x /usr/bin/ssh-login-notify.sh
touch /var/log/ssh-login.log

Buraya kadar tetiklenecek shell script hazırlandı, her ssh login işleminde tetikleyecek olan satırı /etc/pam.d/sshd dosyamızın ilgili satırına ekleyelim.

/etc/pam.d/sshd dosyamız içerisinde;

@include common-auth
...
@include common-account
...
@include common-session
...
@include common-password

şeklinde ana bloklar var biz kodumuzu @include common-session bloğunun sonuna ekleyeceğiz.

@include common-auth
...
@include common-account
...
@include common-session
...
session optional        pam_exec.so     /usr/bin/ssh-login-notify.sh

# Standard Un*x password updating.
@include common-password

dosyamızın son görüntüsü üsttekine benzer şekilde olacak ve kaydettikten hemen sonra, her bir ssh login işleminde loglama işlemi başlayacaktır.

ssh-login-logs

Buraya kadar loglama işlemi tamamlandı, peki log dosyamızın şişmemesi için ne yapabiliriz?

Linux sistemlerimizde standart olarak gelen logrotate isminde bir uygulama var ve tam olarak bu işi yapıyor. Burada tek bir konfigürasyon dosyası ile logrotate aracına bizim logları da sıkıştırıp saklamasını söyleyeceğiz,

man logrotate komutu ile örnek konfigürasyonlara ve detaylı bilgiye erişebilirsiniz, ihtiyacımıza göre bir tane hazırlayalım.

nano /etc/logrotate.d/ssh-logins
/var/log/ssh-login.log {
        weekly
        missingok
        rotate 52
        compress 
        notifempty
        createolddir 750 root adm   
        olddir /var/log/ssh-login-old
        create 640 root adm 
}

yukarıdaki dosya logrotate uygulamasına:

  • /var/log/ssh-login.log dosyasını,
  • Haftalık olarak,
  • dosya yoksa hata vermeden,
  • ilk kaydı silmeden 52 hafta boyunca,
  • dosyayı sıkıştırarak,
  • dosya boşsa görmezden gelerek,
  • rotate edilen dosyaları taşıyacağın klasör yoksa oluşturarak,
  • rotate ettiğin dosyaları ssh-login-old klasörüne taşıyarak,
  • dosya izni 640 root kullanıcısı adm grubunda dosyayı oluşturarak rotate işlemini yap.

rotate işlemini yap emirlerini verir. man logrotate manuelinde gerekli tüm bilgi mevcut durumda.

Bu yazımızda ssh, ssh login işlemi, pam, pam.d, pam_exec, shell scripting, logrotate gibi kavramlar kullanıldı.

Herkese iyi çalışmalar dilerim ve üstte bahsi geçen konuları bilmeden kopyala yapıştır ile iş yapmamanızı tavsiye ederek, bu konular hakkında detaylıca yazılar da hazırlama niyetindeyim. Bu gibi konulara ilginiz varsa eğer, GNU/Linux , Network ve Güvenlik kategorilerimi takip edin derim. Kalın sağlıcakla.

Bir yorum

Yorumlar kapatıldı ancak, geri izlemeler ve pingback'ler açık.