Linux Bash Aktivitelerinin Loglanması

Linux sunucumuzda birden fazla kullanıcı erişim yetkisine sahip ise bütün kullanıcıların aktivite kaydını tutmak isteyebiliriz.

Evet .bash_history altında kayıt ediliyor fakat yeteri kadar güvenli değil. Anında kayıt olmuyor ve sistem çöktüğünde ya da istenmeyen şekilde bash oturumu sona erese kayıtlara ulaşamayabiliriz.

Bash aktivite loglarını olası bir istenmeyen durum karşısında incelemek için log sunucumuza göndermemiz daha sağlıklı olacaktır ve önce kaydımızı alıp sonra yazdığımız komutun işletilmesini sağlayacağız.

Herhangi bir metin düzenleme editorü ile /etc/bash.bashrc açalım. Ben direk düzenleme modu ile açıyorum.

sudo -e /etc/bash.bashrc

Daha sonra aşağıdaki satırı ekleyelim.

export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

Ve kayıt edip çıkalım.

Linux-Bash-Aktivitelerinin-Loglanmas-1--1

Şİmdi log dosyasını kayıt yolunu ve dosya adını ayarlayalım. /etc/syslog.conf herhangi bir metin editörü ile açalım.

sudo -e /etc/syslog.conf

Ve aşağıdaki satırı ekleyelim

local6.*                /var/log/bashaktivite.log
Linux-Bash-Aktivitelerinin-Loglanmas-1--2

Ve kayıt edelim çıkalım.

Log dosyamızın kullanıcıların müdahale etmesini engellemek için izinleri değiştirmeyi unutmayalım

sudo chattr +a /var/log/bashaktivite.log

Son olarak log servisimizi yeniden başlatalım.

systemctl restart rsyslog.service

Her şey tamam şimdi /var/log/bashaktivite.log log dosyamızı açarak kayıtları görebiliriz.

cat /var/log/bashaktivite.log
Linux-Bash-Aktivitelerinin-Loglanmas-3

Komutu tanıyalım

logger -p local6.debug "CMDAUDIT EVENT! $(whoami):[$(id -u)]:[$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"

“PROMPT_COMMAND” Adında ortam değikenimiz var. Bu değişken bash çıktısı vermeden önce işlemin yürütülmesini sağlıyor

RETRN_VAL=$? Kodumuzu değişkene atıyoruz

$(whoami) işlemi yapan kullancı adı

[$$] Mevcut shell PID. Eğer aynı kullanıcıya ait başka oturumlar varsa bunları ayırt edebiliriz.

$(history 1 | sed “s/\1[0-9]+[ ]//” ) Son çalıştırdığımız komutu sed ile index ve boşlukları silerek gösterir.

[$RETRN_VAL] Dönüş değerimiz.

Log dosyasını daha detaylı hale getirmek için loglanmasını istediğiniz değişkeni ekleyebilirsiniz.

Son olarak unutmadan sunucumuz kendi halinde değilse sürekli işlem yapıyorsak log dosyamız baya şişecektir bunun önüne geçmek için log rotate yapmamız gerek.

sudo -e /etc/logrotate.d/rsyslog

Açalım ve log dosyamızı buraya ekleyelim

Linux-Bash-Aktivitelerinin-Loglanmas-4