Inotify Cron (InCron) untuk membangun Sistem Reaktif di Ubuntu 14.04
Pendahuluan
Sebuah sistem reaktif adalah sistem yang peka (aware) dengan sebuah kejadian dari luar (external event). Sebagai contoh:
- Pernahkah kita menginginkan sebuah sistem yang dapat mengamati sebuah usaha penetrasi (hijacking) dengan mempelajari pola serangannya (misalnya bruteforcing) kemudian mengambil tindakan atas usaha tersebut misalnya memasukkan intruder tersebut di daftar blacklist, atau menutup sementara layanan tersebut untuk domain atau network tersebut?
- Memasukkan file melalui layanan file transfer (FTP, SFTP atau LFTP) dan setelah file tersebut selesai ditransfer, file tersebut langsung di-rename atau di-move pada directory public dengan diatur permisinya sedemikian rupa sehingga file tersebut dapat langsung dapat diakses orang banyak (public).
- Mengamati perubahan sebuah file/ direktori yang seharusnya TIDAK boleh dirubah tanpa seijin administrator, seperti file /etc/sudoers atau /etc/passwd atau /home/user/penelitian.docx. Sehingga jika "akan" ada perubahan oleh user non administrator, sistem dapat langsung memberitahu (lewat SMS atau e-mail, atau membunyikan alarm atau melakukan backup file tersebut).
- Mengamati matinya layanan utama (primary service) dan secara otomatis membangkitkan server sementara (temporary server) sehingga mengurangi waktu mati (downtime) sebuah layanan.
- Dan sebagainya.
Cukup banyak hal yang dapat dilakukan dan dimudahkan dengan sistem reaktif seperti ini. Istilah lain otomatisasi.
Teori
Di sistem operasi linux, kita mengenal cron job sebagai akronim dari chronograph. Cron job adalah sebuah sistem penjadwalan pekerjaan dimana kita bisa mengatur kapan sebuah "kegiatan" dilakukan. Misalnya jadwal untuk restart sistem secara berkala, update patch, backup dan maintenance database dan sebagainya, sehingga kita tidak perlu melakukannya secara manual yang kadang lupa.
Permasalahan pada cron job adalah sebuah pekerjaan dilakukan menggunakan time based (berbasis waktu), misalnya sistem perawatan database (analyze dan vacuum) kita jadwal setiap bulan tanggal 1 setiap bulan jam 2 pagi. Proses backup data kita laksanakan setiap 6 bulan (per semester) jam 2 pagi dimana sistem biasanya paling tidak sibuk. Dan seterusnya.
Cron job sangat efektif untuk pekerjaan berbasis waktu, tetapi tidak berbasis kejadian (event based). Misalnya kita punya prosedur pengecekan hidup atau mati sebuah layanan yang dilakukan setiap hari pada jam 13.30. Apabila sistem ditengarai mati (misalnya RTO saat di-ping), maka nyalakan sistem pambantu (backup server). Nah disini timbul permasalahan baru. Apabila layanan server mati pada pukul 13.31. (satu menit setelah sistem melakukan pengecekan terakhir), maka sistem backup baru hidup jam 13.30 di hari berikutnya. Artinya down time-nya 23 jam 59 menit!
Solusi yang bisa dilakukan adalah mempercepat proses pengecekan itu misalnya pengecekan dilakukan per menit (waktu terpendek yang bisa dilakukan oleh cron job). Tetapi hal ini memaksa sistem terus menerus melakukan pekerjaan tiap menit!. Sistem menjadi sibuk (karena melakukan rutin pengecekan) dan TETAP saja down time-nya bisa 59 detik.
Solusi yang bisa dilakukan adalah mempercepat proses pengecekan itu misalnya pengecekan dilakukan per menit (waktu terpendek yang bisa dilakukan oleh cron job). Tetapi hal ini memaksa sistem terus menerus melakukan pekerjaan tiap menit!. Sistem menjadi sibuk (karena melakukan rutin pengecekan) dan TETAP saja down time-nya bisa 59 detik.
Event State
Jauh lebih sederhana jika kita memiliki sistem yang reaktif terhadap perubahan state sebuah kejadian yang dijelaskan sebagai berikut:
Saat event state (X) sistem bernilai true maka dibangkitkan sebuah Event E. Pemodelan kondisi X saat Event E di-generate saat context state
bernilai true.
Event E
berlangsung dalam durasi waktu T yang diilustrasikan pada gambar berikut:
Gambar 1. Event State
Delta Waktu (T2-T1) adalah waktu dimana sebuah kejadian berlangsung. Misalnya kita mengamati sebuah aktifitas perpindahan file dari satu folder ke folder lainnya. Delta T adalah waktu yang diperlukan dari saat mulai proses perpindahan hingga file tersebut "completely moved".
Sebuah event memiliki sebuah proses aktivasi dan de-aktivasi. Aktivasi sebuah event akan menyebabkan kondisi "sedang berada" (at) bernilai true atau dengan kata lain, proses aktivasi dan de-aktivasi akan merubah kondisi event dari status sebelum (before), sedang (at) atau setelah (after). Hal ini perlu dilakukan pada sequential event sebagai "tanda" event berikutnya bisa dikerjakan.
Sebuah event memiliki sebuah proses aktivasi dan de-aktivasi. Aktivasi sebuah event akan menyebabkan kondisi "sedang berada" (at) bernilai true atau dengan kata lain, proses aktivasi dan de-aktivasi akan merubah kondisi event dari status sebelum (before), sedang (at) atau setelah (after). Hal ini perlu dilakukan pada sequential event sebagai "tanda" event berikutnya bisa dikerjakan.
Ini berarti sebuah event dapat memiliki 3 kemungkinan kondisi yaitu:
- Before (T1)
- At (T1<T<T2)
- After (T2)
Sebuah file A akan diamati Event State-nya:
- Saat file A tersebut dibuka.
- Saat file A tersebut dimodifikasi.
- Saat file A tersebut disimpan.
Inotify Cron
Incron
atau inotify cron adalah software (service lebih tepatnya) pengembangan dari software cron biasa. Pada dasarnya kedua jenis cron job ini (cron dan incron) adalah sebuah subsistem pada
kernel Linux yang digunakan untuk melakukan task secara otomatis
dengan kondisi tertentu. Letak
perbedaannya adalah: inotify cron bertindak terhadap perubahan dari file system (event based), sedangkan cron
bertugas untuk penjadwalan yang memungkinkan eksekusi sebuah aksi dalam
interval waku tertentu.
Incron menyediakan cara sederhana bagaimana memecahkan banyak kejadian dengan banyak solusi. Keadaan disini dimaksud dengan jenis event pemicu dijalankannya aksi, karena setiap kejadian yang terjadi di file system merupakan pekerjaan untuk incron. Sedangkan solusi pengerjaan job menggunakan perintah-perintah monitoring yang didukung oleh incron, seperti monitoring terhadap manipulasi file.
Incron menyediakan cara sederhana bagaimana memecahkan banyak kejadian dengan banyak solusi. Keadaan disini dimaksud dengan jenis event pemicu dijalankannya aksi, karena setiap kejadian yang terjadi di file system merupakan pekerjaan untuk incron. Sedangkan solusi pengerjaan job menggunakan perintah-perintah monitoring yang didukung oleh incron, seperti monitoring terhadap manipulasi file.
Metode-metode dalam Incron
Incron memiliki metode sebagai berikut:
Metode | Event Trigger | |
IN_ACCESS | File/ Folder yang diamati sedang diakses. | |
IN_ATTRIB | Perubahan Metadata pada sebuah File/ Folder yang diamati (read/write/execute). | |
IN_CLOSE_WRITE | File/ Folder yang diamati selesai ditulis dan selesai di-save. | |
IN_CLOSE_NOWRITE | File/ Folder yang diamati dibuka tetapi tidak untuk ditulis dan selesai di-save. | |
IN_CREATE | File/ Folder yang diamati selesai dibuat. | |
IN_DELETE | File/ Folder yang diamati selesai dihapus. | |
IN_DELETE_SELF | File/ Folder yang diamati selesai dihapus di dirinya sendiri. | |
IN_MODIFY | File/ Folder yang diamati sedang di-edit. | |
IN_MOVE_SELF | File/ Folder yang diamati selesai dipindahkan di dirinya sendiri. | |
IN_MOVED_FROM | File/ Folder selesai dipindahkan dari tempat yang sedang diamati. | |
IN_MOVED_TO | File/ Folder selesai dipindahkan ke tempat yang sedang diamati. | |
IN_OPEN | File/ Folder yang diamati sedang dibuka. |
Aturan Penulisan:
Aturan penulisan yang diberikan untuk menjalankan aksi tertentu adalah sebagai berikut:
direktori_yang_diamati INCRON_METHOD aksi_yang_dijalankan
misalnya:
/home/haruno/public/ IN_CLOSE_WRITE sudo chmod 777 -R /home/haruno/public/
Implementasi
Operating System yang saya gunakan untuk menjalankan program incron ini adalah Ubuntu 14.04 64 bit.
1. Tahapan Instalasi
Untuk instalasi layanan incron pada OS Ubuntu 14.04 cukup sederhana:
# apt-get install incron
Gambar 2: Instalasi Incron
2. Tahapan Konfigurasi
Setelah proses instalasi, tahapan berikutnya adalah mengijinkan siapa yang boleh dan tidak boleh menjalankan layanan incron ini. File yang digunakan untuk konfigurasi adalah:
- /etc/incron.allow
- /etc/incron.deny
Contoh: Kita tambahkan root untuk bisa melakukan incron
# echo root >> /etc/incron.allow
Gambar 3: User yang dapat menjalankan Incron
Setelah kita daftarkan user "root" ke dalam /etc/incron, kita dapat menambah aturan incron baru dengan perintah:
# incrontab -e
Nah disini kita terapkan metode di atas yang tepat untuk memicu aksi apa yang diharapkan.
Contoh: kita akan membuat permisi untuk setiap file yang datang ke watched directory (misalnya: direktori /home/haruno/public/) dengan permisi 777. Perintah yang diberikan adalah:
/home/haruno/public IN_CLOSE_WRITE sudo chmod 777 -R /home/haruno/public/
4. Melihat Table incron
Kita dapat melihat table incron dengan perintah:
# incrontab -l
Gambar 4: Tabel Aturan Incron
5. Memperbarui table incron
Setelah aturan baru dibuat, jangan lupa layanan incron di direstart agar aturan baru tersebut dapat berjalan.
# /etc/init.d/incron restart
Testing
Untuk menguji apakah aturan tersebut berjalan atau tidak, kita coba copy sebuah file ke directory /home/haruno/public seperti pada gambar berikut:
Penggunaan incron ini bisa sangat luas asal kita dapat berimajinasi dan berinovasi.
Selamat Mencoba
Setelah aturan baru dibuat, jangan lupa layanan incron di direstart agar aturan baru tersebut dapat berjalan.
# /etc/init.d/incron restart
Testing
Untuk menguji apakah aturan tersebut berjalan atau tidak, kita coba copy sebuah file ke directory /home/haruno/public seperti pada gambar berikut:
Gambar 5:Pengujian Incron
Penggunaan incron ini bisa sangat luas asal kita dapat berimajinasi dan berinovasi.
Selamat Mencoba