auditについて(2)

普通のSELinuxでフルパス情報出力

SELinuxのログにフルパスが出ない問題だが、
Fedoraの普通のSELinuxにも当てはまることが判明。

フルパスのログは、context->dummyが1だと、取らないようにされている。
auditのルールを何も登録しないと、context->dummyが1となるようだ。
Fedoraでは、デフォルトでは、auditのルールを何も登録していない。
なので、context->dummyに1がセットされ、
フルパス情報のログ取りが行われない。

適当に
#auditctl -a exit,always -S chdir -F obj_type=syslogd_t
のようにどうでもいいルールを登録すると
フルパス情報のログが出るようになる。
が、フルパス情報のログを取ろうとすると、オーバーヘッドが発生するので注意。

解決方法の整理

MLにRFCしなきゃな。整理せねば。。

  • やりたいこと
    • SELinuxのフルパスログをauditのtype=PATHで得たい
      • そのためには、system call auditを1に、context->dummyを0にする必要がある。
    • 現状、これを実現するには、 auditctl -e 1、およびauditctlでダミーのauditルールを登録する必要がある
    • 問題点1
      • 組込みでは不便。フルパスログ取りのためだけに、auditctlを組込みに移植するのは面倒、無駄。
    • 問題点2
      • 「フルパスログが欲しい」という目的のために、auditctlでダミーのauditルールを登録するのは不自然
  • 案1:全部カーネルでやる
    • 1) audit.hに以下の関数を公開
      • a) context->dummyのゼロ/非ゼロ切り替え
      • b)system call auditをenable/disableする
    • 2) a)b)切り替えのインターフェース
      • /selinuxfs/auditで、a)b)を呼ぶようにする
      • CAP_AUDIT_CONTROLをチェックしなきゃな
  • 案2:一部ユーザランドでやる
    • 1) カーネル
      • context->dummyのゼロ/非ゼロ切り替え関数Xを用意
    • 2) ユーザランド
      • auditctl -e 3とすると、「system call auditの切り替えメッセージを送信する、関数Xを呼ぶメッセージを送信する」ようにauditctlを修正。