0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ファイルのアクセス履歴を確認する方法 (システム、アプリ、ansibleなどのファイルアクセス履歴の確認方法)

Posted at

いろんなシステムやインフラ、アプライアンスを触っているとドキュメント通りに構築できないことがよくあります。
そんなときに作成したコンフィグファイルなどが読み込まれているかどうかを確認することで、設定もれやドキュメントの記載漏れ、バグに気づいたりすることがあるのでそのときのナレッジを記載します
今回は 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環境でシステム構築時にファイルアクセスの状況を確認することができます。

以上、

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?