いろんなシステムやインフラ、アプライアンスを触っているとドキュメント通りに構築できないことがよくあります。
そんなときに作成したコンフィグファイルなどが読み込まれているかどうかを確認することで、設定もれやドキュメントの記載漏れ、バグに気づいたりすることがあるのでそのときのナレッジを記載します
今回は ansible の勉強中にいろいろと発見が多かったので良かった
環境と使うコマンド
Linux 環境でbashコマンドを使います
使うコマンド1 : auditctl
auditd (さまざまなOS上のアクティビティを記録する仕組み)を制御してファイルアクセス記録を取得します
使うコマンド2 : ausearch
auditdが出力した結果を検索するコマンド
使用する環境のイメージ
ansible でとあるシステムを展開しているときに、設定ファイルがシステムに正常に読み込まれているのかを確認する。
audit によるファイルアクセスの監視を開始します
auditの設定
audit設定コマンド
auditctl -w /opt/myapp/docker-settings.yml -p r -k docker_settings_read
オプションは他にもあるけどファイルアクセスの有無を検知するにはこれで十分です。
各オプションの説明
-w auditの監視対象に設定するファイルを指定する
"-p r" -wオプションで指定したファイルを開いたか?読み込んだか?を監視します
-p のオプションでwとかもあるけどとりあえずここでは触れません
-k フィルターキーの設定。ausearchコマンドで検索するときのキーワードを指定
対象のファイルを cat コマンドで読み込み
cat /opt/myapp/docker-settings.yml
version: "3.9"
services:
app:
image: example/app:1.0
ausearch コマンドでキーワードを指定してauditを検索
ausearch -k docker_settings_read
ausearch コマンドを実行すると----- で区切られた2つの出力が確認できます
time->Mon Aug 4 15:25:49 2025
type=PROCTITLE msg=audit(1754321149.725:462): proctitle=617564697463746C002D77002F6F70742F63796265726561736F6E2F646F636B65722D73657474696E67732E796D6C002D700072002D6B00646F636B65725F73657474696E67735F72656164
type=PATH msg=audit(1754321149.725:462): item=0 name="/opt/myapp/" inode=128 dev=fd:09 mode=040755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:unlabeled_t:s0 nametype=PARENT cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(1754321149.725:462): cwd="/root"
type=SOCKADDR msg=audit(1754321149.725:462): saddr=100000000000000000000000
type=SYSCALL msg=audit(1754321149.725:462): arch=c000003e syscall=44 success=yes exit=1112 a0=4 a1=7ffce1dea930 a2=458 a3=0 items=1 ppid=2152 pid=2174 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=3 comm="auditctl" exe="/usr/sbin/auditctl" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)
type=CONFIG_CHANGE msg=audit(1754321149.725:462): auid=1000 ses=3 subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 op=add_rule key="docker_settings_read" list=4 res=1
----
上の出力はauditctlで設定をしたときのアクセス履歴
time->Mon Aug 4 15:27:12 2025
type=PROCTITLE msg=audit(1754321232.213:473): 636174002f6f70742f6d796170702f646f636b65722d73657474696e67732e796d6c00
type=PATH msg=audit(1754321232.213:473): item=0 name="/opt/myapp/docker-settings.yml" inode=378 dev=fd:09 mode=0100644 ouid=0 ogid=0 rdev=00:00 obj=unconfined_u:object_r:unlabeled_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(1754321232.213:473): cwd="/root"
type=SYSCALL msg=audit(1754321232.213:473): arch=c000003e syscall=257 success=yes exit=3 a0=ffffff9c a1=7ffdef0b67de a2=0 a3=0 items=1 ppid=2152 pid=2183 auid=1000 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=3
comm="cat" exe="/usr/bin/cat" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
key="docker_settings_read"
上の出力はcatコマンドで/opt/myapp/docker-setting.ymlを読み込んだ時のアクセス履歴
確認する箇所
proctitle=
=>16進数で表示される実行されたコマンドの全文
16進数文字列を変換することでプログラムの全文に変換できます
comm=
=>実行されたタスクの名称
exe=
=>ロードされた実行ファイルのフルパス
key=
->aiditctlで -k に指定したキーワード
ansibleで読み込まれたかどうかを時間を経過してから確認します
time->Mon Aug 4 15:28:28 2025
type=PROCTITLE msg=audit(1754321308.840:819):
proctitle=2f7573722f62696e2f707974686f6e33002f7573722f6c6f63616c2f62696e2f616e7369626c652d706c6179626f6f6b002f6f70742f616e7369626c652f706c6179626f6f6b732f636f6e6669677572655f736572766572732e796d6c002d6500616e7369626c655f6265636f6d655f706173733d6d7961707000
type=PATH msg=audit(1754321308.840:819): item=0 name="/opt/myapp/docker-settings.yml" inode=378 dev=fd:09 mode=0100644 ouid=0 ogid=0 rdev=00:00 obj=unconfined_u:object_r:unlabeled_t:s0 nametype=NORMAL cap_fp=0 cap_fi=0 cap_fe=0 cap_fver=0 cap_frootid=0
type=CWD msg=audit(1754321308.840:819): cwd="/opt/myapp/python/webui"
type=SYSCALL msg=audit(1754321308.840:819): arch=c000003e syscall=257 success=yes exit=19 a0=ffffff9c a1=7fb013896eb0 a2=80000 a3=0 items=1 ppid=8620 pid=8631 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=(none) ses=4294967295
comm="ansible-playboo"
exe="/usr/bin/python3.9" subj=system_u:system_r:unconfined_service_t:s0 key="docker_settings_read"
proctitle の確認
proctitle=2f7573722f62696e2f707974686f6e33002f7573722f6c6f63616c2f62696e2f616e7369626c652d706c6179626f6f6b002f6f70742f616e7369626c652f706c6179626f6f6b732f636f6e6669677572655f736572766572732e796d6c002d6500616e7369626c655f6265636f6d655f706173733d6d7961707000
これを16進数から変換すると以下の記述になります
/usr/bin/python3 /usr/local/bin/ansible-playbook /opt/ansible/playbooks/configure_servers.yml -e ansible_become_pass=myapp
ansible と ymlファイルに実行されていることが確認できました
comm
"ansible-playboo"
ansible-playbook コマンドで実行されているように見えます。文字数制限があるのでフルパスで確認したい場合はproctitleを確認します
exe
exe="/usr/bin/python3.9"
python 3.9 が実行コマンドとして呼び出されていることが確認できます
key
"docker_settings_read"
auditctl -k で指定したキーワードによりフィルタが正常に動作していることを確認します
以上のコマンドを使うことでLinux環境でシステム構築時にファイルアクセスの状況を確認することができます。
以上、