Bash Oturum Geçmişi

Terminal ekranında yazılan komut geçmişi kolay bir şekilde silinebilir. Genelde bir sistem saldırıya uğradığı zaman komut geçmişinin bir kopyası alınması ve ardından silinmesidir. Sistemin güvenliğini içeriden ve dışarıdan korumak için, bizim tüm kullanıcılardan shell üzerinde çalıştırılan komut loglarını almamız gerekmektedir. Aşağıdaki alınacak komut geçmişi sadece bash için geçerlidir.
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 )
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 logunu 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.
