Linux 파일 액세스 모니터링

Linux 파일 액세스 모니터링

지난 1주 동안 특정 파일에 누가 액세스했는지 알아낼 수 있는 방법이 유닉스에 있습니까? 어쩌면 사용자나 일부 스크립트가 다른 곳으로 FTP를 보낼 수도 있습니다. 파일에 액세스하는 사용자 이름 목록을 얻을 수 있나요? 특정 파일에 누가 액세스하고 있는지 어떻게 알 수 있나요?

답변1

매우 특이한 로깅 전략이 없으면 누가 어떤 파일에 액세스했는지에 대한 기록이 없습니다(많은 정보가 됨). 시스템 로그에서 누가 언제 로그인했는지 확인할 수 있습니다. 이 last명령은 로그인 기록을 제공하며, 예를 들어 다른 로그에서는 /var/log/auth.log사용자가 어떻게 인증하고 로그인했는지(어느 터미널이나 원격의 호스트) 알려줍니다. ) .

파일을 마지막으로 읽은 날짜를 파일 날짜라고 합니다.액세스 시간, 짧게는 atime. 모든 UNIX 파일 시스템은 이를 저장할 수 있지만 (대개 작은) 성능 저하가 발생하기 때문에 많은 시스템에서는 이를 기록하지 않습니다. ls -ltu /path/to/file또는 stat /path/to/file파일의 액세스 시간을 표시합니다.

사용자가 파일에 액세스하고 자신의 흔적을 숨기려고 시도하지 않은 경우 해당 쉘 기록(예: ~/.bash_history)이 단서를 제공할 수 있습니다.

현재 파일을 여는 사람이 누구인지 확인하려면 를 사용하세요 lsof /path/to/file.

앞으로 파일에 어떤 일이 발생하는지 기록하려면 다음과 같은 여러 가지 방법이 있습니다.

  • 사용inotify기다려. 누군가가 그것을 읽으면 inotifywait -me access /path/to그 줄이 인쇄됩니다 . 인터페이스는 누가 파일에 액세스했는지 알려주지 않습니다. 이 줄이 나타나면 호출할 수 있지만 경쟁 조건이 있습니다(lsof가 실행되기 시작할 때 액세스가 종료될 수 있습니다)./path/to/ ACCESS filefilelsof /path/to/file

  • 로깅 파일 시스템파일 시스템 트리 보기를 제공하고 모든 액세스에 대한 고급 로깅을 허용하는 스택형 파일 시스템입니다. 구성하려면 다음을 참조하세요.LoggedFS 구성 파일 구문.

  • 리눅스를 사용할 수 있습니다감사 하위 시스템파일 시스템 액세스를 포함하여 많은 내용을 기록합니다. 데몬이 시작되었는지 확인한 auditd다음 기록할 내용을 구성하세요.auditctl. 기록된 모든 작업은 기록됩니다 /var/log/audit/audit.log(일반적인 배포판에서). 특정 파일 시청을 시작하려면:

      auditctl -w /path/to/file
    

    디렉터리를 모니터링하면 해당 디렉터리와 해당 하위 디렉터리의 파일도 반복적으로 모니터링됩니다.

답변2

이전 답변은 다음과 같습니다.아니요귀하가 요청한 작업을 수행하기 위한 모범 사례입니다. Linux에는 이러한 목적을 위한 API가 있습니다. 응용 inotify프로그래밍 인터페이스http://linux.die.net/man/7/inotify

  1. 원하는 작업을 수행하는 C 프로그램을 작성하고 inotifyAPI를 직접 호출 할 수 있습니다.
  2. kfsmd를 사용할 수 있습니다.http://www.linux.com/archive/feature/124903데몬 프로세스를 사용하여inotify
  3. 크로스 플랫폼(Linux 특정)으로 작업 inotify하고 Java를 사용하는 경우 JNotify는 크로스 플랫폼(Linux, Mac, Windows)으로 작업하여 기본 운영 체제의 기본 API를 추상화할 수 있습니다.

답변3

위의 inotifywait 예제는 그 중 하나여야 합니다(자세한 내용은 매뉴얼 페이지 참조).

inotifywait /path/to/file
inotifywait -e open /pat/to/file

또는 모니터 모드와 타임스탬프를 사용하세요.

inotifywait -m --format '%w:%e:%T' --timefmt '%F %T %Z %z'

답변4

지난 1주 동안 특정 파일에 누가 액세스했는지 알아낼 수 있는 방법이 유닉스에 있습니까?

귀하의 요청을 엄격하게 시행하십시오. 특정 문서는 그렇습니다.

/etc/audit/audit.rules올바르게 구성되었으며 service enable auditd감사 서비스가 실행되고 기록됩니다./var/log/audit/audit.log

기본적으로 대부분의 Linux 배포판에서는 감사가 켜져 있지만 규칙 파일은 기본적으로 비어 있으므로 audit.log에 매우 기본적인 항목이 표시됩니다. audit.rules파일에 적합하다고 생각되는 규칙을 수동으로 추가해야 합니다 . 또한 auditd.conf무슨 일이 일어나고 있는지 완전히 이해하려면주의 깊게 읽으십시오.

이것이 귀하가 요구하는 것을 수행하는 유일한 방법은 아닐 수도 있지만, 여기에 귀하가 요구하는 것을 수행해야 하는 규칙이 있습니다.

자세한 내용은 웹에서 검색하세요.Linux 감사 모니터링 파일

-w /etc/passwd -p rwxa -k WATCHTHIS
  • -w시계 규칙을 설명하는 것입니다
  • /etc/passwd우리는 이 파일을 보고 있습니다.이에 따라 이것을 변경하십시오.
  • p권한 필터에는 읽기, 쓰기, 실행, 추가의 4가지 선택 사항 조합이 있습니다.
  • k선택 사항입니다. 이 감사 이벤트가 트리거될 때마다 필터 키가 배치됩니다 audit.log. 그렇지 않으면 audit.log에서 이 이벤트를 어떻게 찾을 수 있습니까?이에 따라 이것을 변경하십시오.수십억 줄의 audit.log 중에서 고유하고 쉽게 검색할 수 있는 정보를 만드세요.

이러한 var/log/audit/audit.log항목은 한 줄에 하나씩 많이 있으며 각 항목에는 사람이 읽을 수 있는 월/일/년/시/분/초로 변환해야 하는 에포크 시간 형식의 타임스탬프가 있습니다. WATCHTHIS귀하가 생성한 키 또는 키 중 하나가 포함된 행을 검색 하고 찾고 있는 키 uid=입니다 .gid=

# cheat sheet:

systemctl list-unit-files | grep audit

systemctl enable auditd.service
service auditd enable

service auditd start

# ----------------------------------------------------------------

# sample /etc/audit/rules.d/audit.rules file
# used in rhel/centos 7.9

## 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

# in case of audit failure
# 2=shutdown, 1= goto runlevel 1, 0=no affect

-f 0

# add your desired rules

-w /scratch/somefile.txt -p rwxa -k WATCHTHIS

관련 정보