Sintaks file konfigurasi LoggedFS

8

Apa sintaks dari file konfigurasi LoggedFS ?

Dokumentasi resmi hanya memiliki instruksi penggunaan untuk loggedfsperintah dan contoh file konfigurasi. Oke, ini XML, tapi apa saja kemungkinan tag dan atribut dan apa artinya?

Gilles 'SANGAT berhenti menjadi jahat'
sumber

Jawaban:

8

Saya melihat Config.cpp, file yang bertanggung jawab untuk mengurai konfigurasi. Contoh konfigurasi sebenarnya melakukan pekerjaan yang cukup bagus untuk menangkap opsi yang tersedia - tidak banyak

Ketika saya merujuk ke "output contoh" di bawah, saya berbicara tentang baris ini (ditarik secara acak dari halaman sampel):

17:29:35 (src/loggedfs.cpp:136) getattr /var/ {SUCCESS} [ pid = 8700 kded [kdeinit] uid = 1000 ]

Tag root adalah <loggedFS>. Ini memiliki dua atribut opsional:

  • logEnabled adalah sebuah string - "true" berarti itu harus benar-benar menampilkan info log; apa pun menonaktifkan semua pencatatan. Default ke "true", karena itulah inti dari seluruh program
  • printProcessName adalah string - "true" berarti output log akan menyertakan nama proses, yang lain berarti tidak akan. Default ke "true". Dalam contoh output, kded [kdeinit]adalah nama proses

Satu-satunya simpul anak yang dipedulikannya adalah <include>dan <exclude>. Dalam contoh mereka mengelompokkan yang di bawah <includes>dan <excludes>blok, tetapi mereka diabaikan oleh parser (seperti halnya node lain kecuali <include>dan <exclude>).

Secara alami, <include>aturan menyebabkannya mengeluarkan garis log jika cocok, sedangkan <exclude>garis menyebabkannya tidak. Jika terjadi tumpang tindih, <exclude>timpa <include>. Biasanya Anda membutuhkan setidaknya satu <include>aturan untuk mencocokkan acara yang akan dicatat, tetapi pengecualian adalah jika ada 0 <include>aturan - maka semua acara dicatat, bahkan jika ada <exclude>baris yang cocok .

Keduanya <include>dan <exclude>mengambil atribut yang sama:

  • ekstensi adalah ekspresi reguler yang cocok dengan path absolut dari file yang diakses / dimodifikasi / apa pun ( extensionadalah nama yang agak buruk, tapi saya rasa itu adalah penggunaan umum). Misalnya, jika Anda touch /mnt/loggedfs/some/file, ekspresi reguler di extensionperlu (parsial) cocok/mnt/loggedfs/some/file
  • uid adalah string yang berisi bilangan bulat atau *. Aturan hanya cocok dengan operasi yang diberikan jika pemilik proses yang menyebabkan operasi memiliki ID pengguna yang ditentukan ( *secara alami berarti setiap ID pengguna cocok). Dalam contoh output, 1000adalah uid
  • action adalah tipe operasi spesifik yang dilakukan pada sistem file. Dalam contoh output, getattradalah tindakan. Tindakan yang mungkin dilakukan adalah:
    • mengakses
    • chmod
    • dikunyah
    • getattr
    • tautan
    • mkdir
    • mkfifo
    • mknod
    • Buka
    • baca-saja
    • open-readwrite
    • buka-tulis saja
    • Baca
    • readdir
    • tautan baca
    • ganti nama
    • rmdir
    • statfs
    • symlink
    • memotong
    • batalkan tautan
    • utime
    • utimens
    • menulis
  • retname adalah ekspresi reguler. Jika kode kembali dari operasi sistem file aktual yang dilakukan oleh LoggedFS adalah 0, ekspresi reguler dicocokkan dengan string SUCCESS. Kode pengembalian yang tidak nol menyebabkannya cocok FAILURE. Mereka adalah nilai-nilai hanya mungkin, sehingga kemungkinan besar Anda baik akan hardcode SUCCESS, FAILURE, atau penggunaan .*jika Anda ingin kedua. Dalam contoh output, SUCCESSadalahretname

Berbeda dengan <loggedFS>atribut, ini tidak memiliki standar. Juga, sementara parser akan mengenali atribut yang tidak dikenal dan kesalahan keluar, itu tidak mendeteksi atribut yang hilang, jadi jika Anda lupa atribut itu akan menggunakan memori yang tidak diinisialisasi.

Michael Mrozek
sumber
Apa daftar sertakan / kecualikan bawaan (kosong sehingga tidak ada yang disertakan, saya pikir)? Jika Anda termasuk /a, mengecualikan /a/bdan memasukkan /a/b/c, apakah Anda /a/b/cditonton? Apakah termasuk direktori selalu menyertakan isinya?
Gilles 'SANGAT berhenti menjadi jahat'
@Gilles Tidak tahu apa-apa tentang direktori, hanya mengambil jalur absolut lengkap dan mencocokkannya dengan ekspresi reguler. Jadi <include extension="/a" uid="*" action=".*" retname=".*" />akan mencocokkan setiap operasi yang beroperasi pada file yang jalurnya berisi /a- bahkan bisa jadi /foo/abc/bar. Anda mungkin ingin menjangkar mereka semua dengan ^dan $, tetapi kemudian Anda harus menyertakan seluruh jalan untuk mencocokkan
Michael Mrozek
@Gilles Tidak memiliki aturan sebenarnya adalah kasus khusus, jadi saya akan menambahkannya ke jawabannya
Michael Mrozek