LinuxローカルホストでのPostgreSQL認証失敗の根本原因の追跡

LinuxローカルホストでのPostgreSQL認証失敗の根本原因の追跡

データベースパスワードを変更した後に表示されるPostgreSQLデータベースログファイルには、これらのログが含まれています。

2023-09-14 11:57:15.937 UTC [3401773] username@db-name FATAL:  password authentication failed for user "username"
2023-09-14 11:57:15.937 UTC [3401773] username@db-name DETAIL:  Password does not match for user "username" 
Connection matched pg_hba.conf line 96: "host    all             all             127.0.0.1/32            md5"

このリクエストのソースをどのように追跡しますか?私のすべてのサービスはDockerコンテナで実行されており、サービスを停止してもPostgreSQLログに同じエラーが表示されます。

以下は、これらの要求に関連すると考えられるシステムログです。

Sep 14 12:43:23 dev supervisord[539]: 2023-09-14 12:43:23,814 INFO exited: laravel-worker_04 (exit status 1; not expected)
Sep 14 12:43:27 dev supervisord[539]: 2023-09-14 12:43:27,025 INFO spawned: 'laravel-worker_04' with pid 3417768
Sep 14 12:43:28 dev supervisord[539]: 2023-09-14 12:43:28,229 INFO success: laravel-worker_04 entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)

また、システムを再起動しても、これらのログが繰り返され続けます。再起動後にこれらの要求を引き起こすファイルをどのように見つけるのか疑問に思います。 crontabとサービスを確認してみると、これに関連するcronjobやサービスはありません。

修正する

PostgreSQL接続でプロセスIDを見つけることができます。出力は次のとおりですps aux pid

postgres: 12/main: username database 127.0.0.1(s-port) idle

答え1

コマンドが実行された場所を見つける方法はありますか?

一般的に言えば、簡単な答えは次のとおりです。はい/var/log/audit/audit.log次のような結果が出ます。審査Linuxのサブシステム。ただし、/etc/audit/rules.d/audit.rulesこの種のコンテンツをキャプチャするにはファイルをカスタマイズする必要があります。私はすべてのコマンドがデフォルトでキャプチャされるとは信じていません。これにより、1時間後にaudit.logが爆発します。

あなたの場合は、実行中のコマンドをキャプチャするためにフォルダの場所に監視を置くか、ルールで具体的-wに呼び出して検索することができますaudit.logexe=実行中のコマンドを示すフィールドが監査行にあり、その行または後続の行には現在のcwd=作業ディレクトリがあります。コマンドが実行された場所。

ここにいくつかの例があります。/etc/audit/rules.d/audit.rules

-a always,exit -F path=/usr/sbin/semanage -F auid>=1000 -F auid!=unset -k privileged-priv_change
-a always,exit -F path=/usr/sbin/setsebool -F auid>=1000 -F auid!=unset -k privileged-priv_change
-a always,exit -F path=/usr/bin/chcon -F auid>=1000 -F auid!=unset -k privileged-priv_change
-a always,exit -F path=/usr/sbin/setfiles -F auid>=1000 -F auid!=unset -k privileged-priv_change
-a always,exit -F path=/usr/bin/passwd -F auid>=1000 -F auid!=unset -k privileged-passwd
-a always,exit -F path=/usr/sbin/unix_chkpwd -F auid>=1000 -F auid!=unset -k privileged-passwd
-a always,exit -F path=/usr/bin/gpasswd -F auid>=1000 -F auid!=unset -k privileged-passwd
-a always,exit -F path=/usr/bin/chage -F auid>=1000 -F auid!=unset -k privileged-passwd
-a always,exit -F path=/usr/sbin/userhelper -F auid>=1000 -F auid!=unset -k privileged-passwd
-a always,exit -F path=/usr/bin/su -F auid>=1000 -F auid!=unset -k privileged-priv_change
-a always,exit -F path=/usr/bin/sudo -F auid>=1000 -F auid!=unset -k privileged-priv_change

-w /var/run/faillock -p wa -k logins
-w /var/log/lastlog -p wa -k logins
-w /etc/sudoers -p wa -k privileged-actions
-w /etc/sudoers.d/ -p wa -k privileged-actions

利用可能な/etc/audit/rules.d/audit.rulesファイルを完成させてください。

以下をフル/etc/audit/rules.d/audit.rulesテキストファイルにしますaudit.rules.orig。その後、aを実行して構文エラーがあるかどうかを確認したら、ステータスは次のように応答する必要がありますservice auditd restartservice auditd status -l活動(実行)基本情報にエラーはありません。

## First rule - delete all
-D

## Increase the buffers to survive stress events.
## Make this bigger for busy systems
# -b 8192

# set from 8k to 1mb
-b 1048576


# 2 is shutdown, 1 is runlevel 1
-f 1


-a always,exit -F arch=b32 -S execve -C uid!=euid -F euid=0 -k setuid
-a always,exit -F arch=b64 -S execve -C uid!=euid -F euid=0 -k setuid
-a always,exit -F arch=b32 -S execve -C gid!=egid -F egid=0 -k setgid
-a always,exit -F arch=b64 -S execve -C gid!=egid -F egid=0 -k setgid

-a always,exit -F arch=b32 -S chown -F auid>=1000 -F auid!=unset -k perm_mod
-a always,exit -F arch=b64 -S chown -F auid>=1000 -F auid!=unset -k perm_mod

-a always,exit -F arch=b32 -S chmod -F auid>=1000 -F auid!=unset -k perm_mod
-a always,exit -F arch=b64 -S chmod -F auid>=1000 -F auid!=unset -k perm_mod


-a always,exit -F arch=b32 -S setxattr -F auid>=1000 -F auid!=unset -k perm_mod
-a always,exit -F arch=b64 -S setxattr -F auid>=1000 -F auid!=unset -k perm_mod

-a always,exit -F arch=b32 -S open -F exit=-EPERM -F auid>=1000 -F auid!=unset -k access
-a always,exit -F arch=b32 -S open -F exit=-EACCES -F auid>=1000 -F auid!=unset -k access
-a always,exit -F arch=b64 -S open -F exit=-EPERM -F auid>=1000 -F auid!=unset -k access
-a always,exit -F arch=b64 -S open -F exit=-EACCES -F auid>=1000 -F auid!=unset -k access

-a always,exit -F path=/usr/sbin/semanage -F auid>=1000 -F auid!=unset -k privileged-priv_change
-a always,exit -F path=/usr/sbin/setsebool -F auid>=1000 -F auid!=unset -k privileged-priv_change
-a always,exit -F path=/usr/bin/chcon -F auid>=1000 -F auid!=unset -k privileged-priv_change
-a always,exit -F path=/usr/sbin/setfiles -F auid>=1000 -F auid!=unset -k privileged-priv_change

-w /var/run/faillock -p wa -k logins
-w /var/log/lastlog -p wa -k logins

-a always,exit -F path=/usr/bin/passwd -F auid>=1000 -F auid!=unset -k privileged-passwd
-a always,exit -F path=/usr/sbin/unix_chkpwd -F auid>=1000 -F auid!=unset -k privileged-passwd
-a always,exit -F path=/usr/bin/gpasswd -F auid>=1000 -F auid!=unset -k privileged-passwd
-a always,exit -F path=/usr/bin/chage -F auid>=1000 -F auid!=unset -k privileged-passwd
-a always,exit -F path=/usr/sbin/userhelper -F auid>=1000 -F auid!=unset -k privileged-passwd
-a always,exit -F path=/usr/bin/su -F auid>=1000 -F auid!=unset -k privileged-priv_change
-a always,exit -F path=/usr/bin/sudo -F auid>=1000 -F auid!=unset -k privileged-priv_change

-w /etc/sudoers -p wa -k privileged-actions
-w /etc/sudoers.d/ -p wa -k privileged-actions

-a always,exit -F path=/usr/bin/newgrp -F auid>=1000 -F auid!=unset -k privileged-priv_change
-a always,exit -F path=/usr/bin/chsh -F auid>=1000 -F auid!=unset -k privileged-priv_change

-a always,exit -F arch=b32 -S mount -F auid>=1000 -F auid!=unset -k privileged-mount
-a always,exit -F arch=b64 -S mount -F auid>=1000 -F auid!=unset -k privileged-mount
-a always,exit -F path=/usr/bin/mount -F auid>=1000 -F auid!=unset -k privileged-mount

-a always,exit -F path=/usr/bin/umount -F auid>=1000 -F auid!=unset -k privileged-mount
-a always,exit -F path=/usr/sbin/postdrop -F auid>=1000 -F auid!=unset -k privileged-postfix
-a always,exit -F path=/usr/sbin/postqueue -F auid>=1000 -F auid!=unset -k privileged-postfix
-a always,exit -F path=/usr/libexec/openssh/ssh-keysign -F auid>=1000 -F auid!=unset -k privileged-ssh
-a always,exit -F path=/usr/bin/crontab -F auid>=1000 -F auid!=unset -k privileged-cron
-a always,exit -F path=/usr/sbin/pam_timestamp_check -F auid>=1000 -F auid!=unset -k privileged-pam
-a always,exit -F arch=b32 -S create_module -k module-change
-a always,exit -F arch=b64 -S create_module -k module-change
-a always,exit -F arch=b32 -S init_module -k module-change
-a always,exit -F arch=b64 -S init_module -k module-change


-a always,exit -F arch=b32 -S delete_module -k module-change
-a always,exit -F arch=b64 -S delete_module -k module-change

-a always,exit -F arch=b32 -S unlink -F auid>=1000 -F auid!=unset -k delete
-a always,exit -F arch=b64 -S unlink -F auid>=1000 -F auid!=unset -k delete

-w /usr/bin/kmod -p x -F auid!=unset -k module-change
-w /etc/passwd -p wa -k identity
-w /etc/group -p wa -k identity
-w /etc/gshadow -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/security/opasswd -p wa -k identity

答え2

%hを追加するとPostgresqlログの設定このログからIPアドレスを取得できます。 DBMSを再起動しないと、これを実行できないと思います。または、iptablesで新しい接続を記録し、ログデータを調整することもできます。ポリシーが承認され、既存のルールがないと仮定します。

iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j LOG --log-prefix ' INBOUND TCP ' --log-level 4

答え3

いよいよ見つけました!私が投稿した2番目の投稿はsupervisordサービスに関するものでした。しかし、当時はそれが何であるかわかりませんでしたsupervisord。プロセスを確認したところ、バックグラウンドで待機中のジョブが実行中のsupervisordプロセスであることがわかりました。laravel-worker

関連情報