web-dev-qa-db-ja.com

`auditctl`のauid、uid、euid、suid、fsuid、obj_uid、gid、egid、sgid、fsgid、obj_gidの違いは何ですか?

私のサーバーはcentos7.6で、auditd 2.8.5です。

監査ルールでは、次のように設定しました。
-a always,exit -F Arch=b32 -S adjtimex,settimeofday -F key=time-change
しかし、このルールは通常のntpdアクティビティも記録するので、このルールを次のように修正しようとしました:

-a always,exit -F Arch=b32 -S adjtimex,settimeofday,stime -F subj_type!=ntpd_t  -F auid!=chrony -F auid!=ntp -F auid!=chrony -F auid!=ntp -F key=time-change

auid!=ntpまたはuid!=ntpを使用する必要がありますか?私は manual を確認しました:

各フィールド間方程式は互いに監査され、-Fで始まる方程式は監査レコードをトリガーします。 2つの演算子がサポートされています-等しい、および等しくない。有効なフィールドは、uid、uid、euid、suid、fsuid、obj_uid、gid、egid、sgid、fsgid、obj_gidです。

私は混乱しています、auditctlのauid、uid、euid、suid、fsuid、obj_uid、gid、egid、sgid、fsgid、obj_gidの違いは何ですか?

3
kittygirl

監査マニュアルは、POSIXセキュリティモデルと多くのタイプのuidに精通していることを前提としています。 man credentials を読んで、これについてよく理解してください。ただし、これは不完全なため、残りについては セキュリティガイド を参照してください。特に:

監査

監査ユーザーIDを記録します。このIDはログイン時にユーザーに割り当てられ、ユーザーのIDが変更された場合でも(たとえば、su-johnでユーザーアカウントを切り替えることによって)すべてのプロセスに継承されます。


ルールとその例外は、効率を上げるために1行で記述できます。ただし、より単純なルールから始めることもあります。理解しやすく、例をつなぎ合わせます。


auditdには、時間の変更を監査し、chronydを無視するためのルール例が付属しています。 /usr/share/doc/audit*/rules/22-ignore-chrony.rulesを見てください。

## This rule suppresses the time-change event when chrony does time updates
-a never,exit -F Arch=b64 -S adjtimex -F auid=unset -Fuid=chrony -F subj_type=chronyd_t
-a never,exit -F Arch=b32 -S adjtimex -F auid=unset -Fuid=chrony -F subj_type=chronyd_t

「64ビットプラットフォームで、adjtimex呼び出しの場合、(ログインシェルではなく)監査UIDが存在せず、ユーザー名がchronyであり、SELinuxコンテキストがchronyd_tであり、ログに記録しない。」

実際、その例にはバグがあるかもしれません。 systemdの下でchronydを実行し、30-pci-dss-v31.rulesのルール例を使用して、監査イベントをuid 0として検出しました。

type=SYSCALL msg=audit(1552670692.891:1067): Arch=c000003e syscall=159 success=yes exit=5 a0=7ffe0d94ae10 a1=0 a2=55e857a3af60 a3=0 items=0 ppid=1 pid=6487 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295 comm="chronyd" exe="/usr/sbin/chronyd" subj=system_u:system_r:chronyd_t:s0 key="10.4.2b-time-change"

psは、ユーザーchronyとして、またchronyd_tコンテキストで実行されていることを報告します。したがって、これは制限されていますが、auditdはsystemdがrootとしてどのように起動したかを反映しています。

条件-F auid=unset -F subj_type=chronyd_tを試してください。ログインシェルからではなく、正しいコンテキストで十分です。

(このサブシステムには癖があります。私がauid = 4294967295をunsetに翻訳できた唯一の場所は メーリングリスト です。)

1
John Mahowald