rrdtool
수신 경로가 잘못된지 확인하기 위해 로그하는 방법에 대한 특정 인스턴스를 찾으려고 합니다 .
인수를 기록하는 쉘 스크립트로 실행 파일을 래핑할 수 있다는 것을 알고 있지만, 이를 모니터링하는 커널 전용 방법이 있는지 알고 싶습니다. 특정 /proc/pid/에서 실행될 수 있는 파일 시스템 콜백이 있을 수도 있습니다. 주어진 것과 일치하는 바이너리를 찾을 때 exe를 사용합니까?
답변1
예, 감사 하위 시스템이라는 커널 기능이 있습니다. 데몬은 auditd
로깅을 수행하고 명령은 auditctl
로깅 규칙을 설정합니다. 특정 시스템에 대한 모든 호출을 기록하고 일부 필터링을 수행할 수 있습니다. 실행된 모든 명령과 해당 매개변수를 기록하려면 execve
시스템 호출을 기록하십시오.
auditctl -a exit,always -S execve
특정 프로그램에 대한 호출을 구체적으로 추적하려면 프로그램 실행 파일에 필터를 추가하세요.
auditctl -a exit,always -S execve -F path=/usr/bin/rrdtool
로그는 /var/log/audit.log
배포판이 배치하는 위치나 위치에 나타납니다. 감사 하위 시스템을 제어하려면 루트여야 합니다.
조사를 완료한 후 대신 동일한 명령줄을 사용하여 -d
로깅 -a
규칙을 삭제하거나 실행하여 auditctl -D
모든 감사 규칙을 삭제합니다.
디버깅 목적으로 프로그램을 래퍼 스크립트로 바꾸면 환경, 상위 프로세스에 대한 정보 등을 기록하는 데 더 많은 유연성이 제공됩니다.
답변2
당신이 사용할 수있는스누피.
스누피는 커널 협력이 필요하지 않기 때문에 더 가벼운 솔루션입니다. 필요한 것은 경로가 에 있는 스누피 라이브러리를 미리 로드하는 동적 로더(dl)입니다 /etc/ld.so.preload
.
공개: 저는 현재 스누피 관리자입니다.
답변3
Linux 커널 "감사" 하위 시스템이 귀하의 요구 사항을 충족할 수 있습니다.
예를 들어 다음 명령을 실행하는 경우:
auditctl -a exit,always -F arch=b64 -S execve
auditctl -a exit,always -F arch=b32 -S execve
그런 다음 각 실행 이벤트를 기록하고많은이 문제와 관련하여 제공된 정보
예를 들어, 이것은 제가 실행한 결과입니다.tail /var/log/audit/audit.log
exit=0 a0=7f0e4a21e987 a1=7f0e4a21e6b0 a2=7f0e4a21e808 a3=8 items=2 ppid=906 pid=928 auid=500 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts0 ses=1 comm="tail" exe="/usr/bin/tail" subj=kernel key=(null)
type=EXECVE msg=audit(1543671660.203:64): argc=2 a0="tail" a1="/var/log/audit/audit.log"
type=CWD msg=audit(1543671660.203:64): cwd="/home/sweh"
type=PATH msg=audit(1543671660.203:64): item=0 name="/usr/bin/tail" inode=266003 dev=fd:03 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=unlabeled objtype=NORMAL cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0
type=PATH msg=audit(1543671660.203:64): item=1 name="/lib64/ld-linux-x86-64.so.2" inode=273793 dev=fd:03 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=unlabeled objtype=NORMAL cap_fp=0000000000000000 cap_fi=0000000000000000 cap_fe=0 cap_fver=0
type=PROCTITLE msg=audit(1543671660.203:64): proctitle=7461696C002F7661722F6C6F672F61756469742F61756469742E6C6F67
몇 가지 흥미로운 값을 볼 수 있습니다. 예를 들어 "uid"는 0이지만(실행 중이므로 su
) "auid"는 내 로그인 ID인 500입니다. 따라서 사용자가 계정을 전환한 경우에도 '감사 ID'를 추적할 수 있습니다 su
.sudo
이제 auditctl
재부팅 시 이러한 명령이 손실됩니다. 구성 파일(예 /etc/audit/rules.d/
: CentOS 7의 디렉터리) 에 넣을 수 있습니다 . 정확한 위치는 운영 체제 버전에 따라 다릅니다. 매뉴얼 auditctl
페이지가 여기서 도움이 될 것입니다.
하지만 조심하세요. 이로 인해 다음과 같은 상황이 발생할 수 있습니다.많은생성할 로그 메시지 수입니다. 디스크에 충분한 공간이 있는지 확인하세요!
필요한 경우 규칙을 특정 사용자나 특정 명령으로 제한할 수 있습니다.
또한 주의하십시오. 사용자가 명령 실행 중에 비밀번호를 입력하면 mysql --user=username --password=passwd
이 내용이 기록됩니다.