데이터베이스 비밀번호를 변경한 후에 나타나는 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
이러한 유형의 콘텐츠를 캡처하려면 파일을 사용자 정의해야 합니다 . 나는 모든 명령이 기본적으로 캡처된다고 믿지 않습니다. 이로 인해 한 시간 후에 audit.log가 폭파됩니다.
귀하의 경우에는 실행 중인 명령을 캡처하기 위해 폴더 위치에 감시를 두거나 -w
규칙으로 구체적으로 호출한 다음 검색 할 수 있습니다 audit.log
. exe=
실행 중인 명령을 표시하는 필드가 감사 라인에 있고 해당 라인이나 후속 라인에는 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 restart
.service 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
드디어 찾았어요! 제가 올린 두 번째 게시물은 supervisord
서비스에 관한 것이었습니다. 하지만 당시에는 그것이 무엇인지 몰랐습니다 supervisord
. 프로세스를 확인해 보니 백그라운드에서 대기 중인 작업을 실행 중인 supervisord
프로세스라는 것을 발견했습니다 .laravel-worker