답변:
예, 감사 기능인 커널 기능이 있습니다. 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
모든 감사 규칙을 삭제합니다.
디버깅 목적으로 래퍼 스크립트로 프로그램을 교체하면 환경, 상위 프로세스에 대한 정보 등을 기록 할 수있는 유연성이 향상됩니다.
-F path=/ust/bin/rrdtool
? rrdtool
관련 소프트웨어조차 어떻게 얻지 못합니다 .
rrdtool
. 모든 프로그램의 호출을 로그하려면 -F path=…
부분을 삭제하십시오 (물론 많은 로그가 나타납니다).
auditctl
명령 은 재부팅 할 때까지만 유효합니까?
auditctl
재부팅 할 때까지만 유효 하지만 어쨌든 좋은 지적입니다. 대답에 재부팅하지 않고 제거하는 방법에 대한 지침을 추가했습니다.
snoopy를 사용할 수 있습니다 .
스누피는 커널 협력이 필요하지 않기 때문에 더 가벼운 솔루션입니다. 스누피 라이브러리를 미리로드하는 동적 로더 (dl) 만 있으면됩니다 /etc/ld.so.preload
. 경로는에 지정되어 있습니다.
공개 : 저는 현재 스누피 관리자입니다.
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
볼 수있는 흥미로운 값이 있습니다. 예를 들어 "auid"는 500인데, "uid"가 0이더라도 ( 'cos 's under under su
) 에도 로그인 ID 입니다. 따라서 사용자가 계정을 전환 su
했거나 sudo
"감사 ID"로 다시 추적 할 수있는 경우에도
이제 auditctl
다시 부팅하면 해당 명령이 손실됩니다. 구성 파일 (예 : /etc/audit/rules.d/
CentOS 7 의 디렉토리)에 파일을 넣을 수 있습니다 . 정확한 위치는 OS 버전에 따라 다릅니다. auditctl
매뉴얼 페이지는 여기에 도움이 될 것입니다.
그러나 이로 인해 많은 로그 메시지가 생성 될 수 있습니다. 디스크에 충분한 공간이 있는지 확인하십시오!
필요한 경우 규칙을 특정 사용자 또는 특정 명령으로 제한 할 수 있습니다.
또한 조심하십시오. 사용자가 명령 실행에 비밀번호를 입력하면 (예 :) 비밀번호 mysql --user=username --password=passwd
가 기록됩니다.
auditd
프로그램 실행뿐만 아니라 명령 행 인수를 기록 할 수있는 방법 이 있습니까? serverfault.com/questions/765179/…