Incrond ile File Monitoring

Güvenlik konusunun önemli olduğu bu dönemlerde, Incrond ile Linux işletim sistemine sahip sunucularda dosya ve dizinler üzerinde yapılan işlemleri nasıl izleyeceğimizi konuşacağız.

Incron bildiğimiz cron ile çok benzer fakat cron gibi belirli aralıklar ile çalışmak yerine inode ları izleyerek herhangi bir dosya veya dizin üzerinde değişiklik yapıldığında tetiklenebilir.

Eğer daha önce inode’un ne olduğunu duymadıysanız neler yaptığımızı daha iyi anlayabilmek için buraya tıklayarak Inode nedir isimli yazıyı okuyabilirsiniz.

Kurulum ve kullanım kısımlarında Ubuntu 18.04 kullanacağım. Servisin kurulumu oldukça basit olduğundan diğer dağıtımlara nasıl kurulduğunu araştırabilirsiniz.

Kurulum

Servis kurulum komutunu çalıştırıyoruz.

sudo apt-get install incron

Incron’un cron ile benzer olduğunu söylemiştik. Cron da nasıl crontab kullanıyorsak Incron’un da dosya ve dizinleri izlemeye başlayabilmesi için incrontab komutunu kullanacağız. Fakat bu komutu kullanabilecek kullanıcılara öncelikle izin vermemiz gerekiyor. Bunu da /etc/incron.allow dosyasında yönetiyoruz.

Herhangi bir metin editörü ile /etc/incron.allow dosyasını açalım

nano /etc/incron.allow

Dosya muhtemelen boş olacaktır, her satıra bir kullanıcı yazabiliriz. İçerisine “root” veya bağlı olduğumuz kullanıcımızı yazalım ve kaydedip çıkalım.

root

Bu işlemi tamamladıktan sonra artık incrontab komutunu root kullanıcısı ile çalıştırabiliriz.

Konfigürasyon

incrontab dosyasını “incrontab -e” komutu ile düzenlemeye başlayabiliriz.

incrontab -e

Incrontab dosyasının syntax’ı ise şu şekilde;

<path> <mask> <command>

Şimdi buradaki terimleri biraz açalım,

path : İzlemek istediğiniz dosya veya klasörün sunucu üzerindeki yolunu burada belirtiyoruz. Incron bir klasörün içindeki alt klasörleri izleyemez. Sadece belirttiğiniz klasörün içindeki dosyaları izleyebilir. Eğer alt klasörleri de izlemek istiyorsanız onları da ayrı ayrı yazmanız gerekir.

mask : İzleme yöntemimizi belirlediğimiz bölüm, yani verdiğimiz path’de neler yaşandığında tetikleneceğini söyleyeceğiz. Bu durumda bir çok seçeneğimiz var.

- IN_ACCESS (dosyaya veya klasöre erişildiğinde yani dosya okunduğunda)
- IN_ATTRIB (dosyanın veya klasörün metadata sı değiştiğinde örneğin izinleri vs.)
- IN_CLOSE_WRITE ()
- IN_CLOSE_NOWRITE ()
- IN_CREATE (izlenen klasörün içinde dosya veya klasör oluşturulduğunda)
- IN_DELETE (izlenen dosya ya da klasör silindiğinde)
- IN_DELETE_SELF ()
- IN_MODIFY (dosya yeniden düzenlendiğinde)
- IN_MOVE_SELF ()
- IN_MOVED_FROM (dosya izlenen dizinden başka bir yere taşındığında)
- IN_MOVED_TO (dosya izlenen dizine taşındığında)
- IN_OPEN (dosya açıldığında)

Mask kısmının alabildiği seçeneklerin bazılarının açıklamalarını yazmadım. Yazmadıklarım yaptığım testlerde doğru çalışmadığı veya hala çözülmemiş bug lara sahip oldukları için.

command : Yukarıdaki seçeneklerden biri gerçekleştiğinde çalışmasını istediğimiz komutu yazdığımız bölüm. Bu bizim hazırladığımız bir script olabilir. Örneğin Telegram veya Slack kanallarımıza bildirim gönderebiliriz. Bu bölüm biraz da sizin iş ihtiyacınız veya yaratıcılığınıza kalıyor. Ayrıca burada kullanabileceğimiz bazı argümanlar var, bunlar;

- $$ Dolar işaretini verir.
- [email protected] İzlenen dosya yolunu verir.
- $# İşlem yapılan dosyanın adını verir.
- $% Gerçekleşen işlemin adını verir. (Örn: IN_MODIFY)
- $& Gerçekleşen işlemin kodunu verir. (Örn: 2)

 

Kullanım

Incrond ile ilgili bir örnek gösterelim.

/home/ dizinimiz altında “test” isimli bir dosya oluşturalım ve bu dosyada yapılacak değişiklikleri izleyelim.

touch /home/test

Şimdi incrontab’a girelim.

incrontab -e

Syntax’ımızı hatırlayalım, <path> <mask> <command>

/home/test IN_MODIFY echo "$$ [email protected] $# $% $&"

Kaydedip çıktığımızda incron çalışmaya başlayacaktır. Burada /home/test dosyasında bir değişiklik yapıldığında verdiğimiz argümanların syslog’a yazıldığını göreceğiz. Bir değişiklik yapmadan önce komut satırında farklı bir pencere açıp syslog’u izlemeye başlayalım bunun için tail komutunu kullanacağız. Tail ile syslog dosyasına yeni yazılacak verileri ekrana bastıracağız.;

tail -f /var/log/syslog

Şimdi dosyada herhangi bir değişiklik yapalım.

echo 'test yazi' >> /home/test

Değişikliği yaptıktan sonra syslog’da olan değişikliklere bakalım. Şu tarz bir log satırı göreceksiniz.

Mar 17 21:16:18 alpertest incrond[27615]: (root) CMD (echo "$ /home/test  IN_MODIFY 2")

Bunun gibi örnekleri çoğaltmak mümkün, syntax’da <command> bölümünde bash ile yapabildiğiniz herşeyi ekleyebilirsiniz. Kendi hazırladığınız bir custom bash scripti çağırabilir veya servisleri durdurup başlatabilirsiniz. Yazının yukarıdaki kısımlarında söylediğim gibi tamamen sizin yaratıcılığınıza kalmış bir durum.

Yönettiğim sunucularda sıklıkla kullandığım bir servis olduğundan mevcut konfigürasyonlarımı paylaşılabilir hale getirip github’da paylaşacağım. Paylaştıkça bu yazı güncellenecek ve linklerini ekleyeceğim.

Umarım faydalı olmuştur, teşekkürler.