Linux Komut Girdilerini Loglama

Merhaba, bu kılavuzda Linux işletim sistemlerine ait kaynakların ileri seviye loglama işlemi anlatmaya çalışacağım. Bu işlem sonucunda Linux kaynağınızda aşağıdaki hareketleri takip ediyor olacaksınız.
- Bash Kabuğu Komut Girdisi ( Session History)
- Komut çalıştıran Kişinin Kullanıcı Adı ( Session History )
- Komut çalıştıran Kişinin Kaynak İp'si ( Session History )
- Komut çalıştıran Kişinin Hangi path üzerinde işlem yaptığı ( Session History )
- Komut çalıştıran Kaynağın ismi ( Session History )
Linux kaynaklarında auditd servisi, auth, syslog gibi bir çok servis loglama işlemi yapmaktadır; fakat bu servisler içerisindeki loglarda zengin içerik bulmak, yapılan hareketin hedefini bulmak gibi bir çok alanda yetersiz kalmaktadır.
Ön Gereksinimler
- Ubuntu 18x-22x
- SuperUser
- Eğer Syslog'a Yönlendirilecekse FW üzerinden Syslog ip'sine UDP 514 portundan erişim izni
- Bash (bash.basrc)
- Rsyslog Servisi
Rsyslog, syslogd’nin geliştirilmiş halidir. Bir çok şey syslogd ile de yapılabilir. Ancak rsyslog kullanarak, logları MySQL, postgreSQL, Oracle vs gibi database’lere yazdırabilirsiniz. Alınan logların formatları ile istediğiniz gibi oynayabilir ve encrypt edebilirsiniz.
Rsyslog hakkında daha fazla bilgi için bakınız:
http://www.rsyslog.com/module-Static_Docs-view-f-features.html.phtml
Bash Komut Geçmişi
Linux rsyslog hizmeti, hem bir günlük sunucusu çalıştırmak için hem de günlük dosyalarını günlük sunucusuna göndermek üzere bireysel sistemleri yapılandırmak için olanaklar sağlar. Yani rsyslog olmadan bu bilgileri toplayamayız. İlk adımda ryslog servisinin çalışır olduğunu doğrulayalım.
sudo service rsyslog status

Aşağıdaki komut satırları ile mevcutta tuttuğumuz yapılandırma dosyasını belirlediğimiz bir dizinine yedekleyerek başlayalım.
Yedekleme yapacağımız dizini oluşturalım.
sudo mkdir /var/backup
Yapılandırma dosyalarını, oluşturduğumuz dizine yedekleyelim.
sudo cp -r /etc/bash.bashrc /var/backup

Bash üzerindeki komut girdilerini almak için, Bash.bashrc yapılandırma dosyasına özel hazırladığımız komutlar eklenmelidir. Editor ile bash.bashrc dosyasını açalım ve son satırına aşağıdaki özel komutları ekleyelim.
sudo vi /etc/bash.bashrc
Dahil edilen özel komutlar sayesinde, tüm kullanıcıların komut girdilerini tek yerde toplayabileceğiz.
distro=`cat /etc/os-release | grep -oP 'PRETTY_NAME="\K[^"]+'`
function history_to_syslog
{
EVENTSOURCE_IP=`hostname -I | awk '{print $1}'`
IP=`who am i |awk '{match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/); ip = substr($0,RSTART,RLENGTH); print ip'}`
CMD=$(history 1)
CMD=$(echo $CMD |awk '{print substr($0,length($1)+2)}')
DIR=$(pwd)
USER=$(echo $USER)
if [ "$CMD" != "$OLD_CMD" ]; then
logger -p local6.debug -- SESSIONHISTORY = $$, USER = $USER, OS= $distro, EVENTSOURCEIP= $EVENTSOURCE_IP, PWD = $DIR, CMD = "${CMD}", IP = ${IP}
fi
OLD_CMD=$CMD
}
trap history_to_syslog DEBUG || EXIT

Dosyayı, kayıt edip çıkınız.
:wq!
Oturum geçmişini, lokalde veya merkez syslog sunucusunda toplamak için, yapılandırma dosyası oluşturalım.
sudo vi /etc/rsyslog.d/session_history.conf
Yapılandırma dosyasına aşağıdaki komut satırlarını ekleyelim. Satır satır ne olduklarına bakalım.
- satırda ki local6 ile başlayan path local üzerine yazmanızı sağlar.
- satır biriktirme dosyaları için benzersiz ad öneki ekler.
- satır 1 gb alan sınırı belirler.
- satır kapatma sırasında mesajları diske kaydeder.
- satır eşzamansız olarak çalıştırır.
- satır ana bilgisayar kapalıysa sonsuz yeniden deneme sayısı.
- ve son satır, syslog veya siem sunucunuzun ip adresinizi yazmanız içindir.
Local üzerinde tutacağım için, ilk satır hariç diğerlerini # sembolü koyarak yorum satırı haline getiriyorum.
local6.* /var/log/bash_history.log
#$ActionQueueFileName fwdRule1
#$ActionQueueMaxDiskSpace 1g
#$ActionQueueSaveOnShutdown on
#$ActionQueueType LinkedList
#$ActionResumeRetryCount -1
#local5.*;local6.* @192.168.1.70:514

Dosyayı kayıt edip çıkınız.
:wq!
Değişikliklerin geçerli olması için source komutu ile bash yapılandırma dosyamızın içeriğini okutalım.
source /etc/bash.bashrc
rysylog servisini yeniden başlatarak işlemi tamamlıyoruz.
sudo service restart rsyslog
Oturum geçmişinin tutulacağı dosyanın oluştuğunu kontrol edelim.
ls /var/log/b*

Evet artık yaptığımız işlemleri ne kadar başarılı olduğunu test edebiliriz. tail komutunu kullanarak oluşturduğumu dosyayı anlık olarak izleyelim.
tail -f /var/log/bash_history.log
Dosyayı açtığımız anda, çalıştırdığımız ilk komut satırının logun'u aldığını görebiliriz. Bir kaç komut çalıştırıyorum ve sonucun başarılı olduğunu görebiliyorum.
hostname
hostname -I

Sonuç olarak bash üzerinde komut geçmişlerini alabildik ve bunları istersek bir merkezi syslog sunucusuna gönderebiliriz.
Girdi geçmişleri sadace bash üzerinden alındığını unutmayın. sh, zsh vb. kabuklarda çalıştırdığınız komut girdileri, bu log dosyasına işlenmez.
