리눅스 파일 액세스 모니터링 1 주일

유닉스에서 지난 1 주일 동안 누가 특정 파일에 액세스했는지 알아낼 수있는 방법이 있습니까? 사용자 또는 일부 스크립트 일 수 있으며 다른 곳으로 ftp 할 수 있습니다. 특정 파일에 액세스 한 사용자 이름 목록을 얻을 수 있습니까? 누가 특정 파일에 액세스하고 있는지 어떻게 알 수 있습니까?



답변

매우 특이한 로깅 정책이없는 한, 누가 기록하지 않은 파일에 액세스했는지 (대량의 정보). 시스템 로그에서 누가 로그인했는지 확인할 수 있습니다. 이 last명령은 로그인 기록 및 /var/log/auth.log사용자가 인증 한 방법 및 로그인 위치 (어떤 터미널 또는 원격 인 경우 어떤 호스트)를 알려주는 기타 로그를 제공합니다 .

파일을 마지막으로 읽은 날짜를 액세스 시간 또는 짧은 시간 이라고합니다 . 모든 유닉스 파일 시스템은 파일을 저장할 수 있지만 많은 시스템은 (보통 작은) 성능 저하가 있기 때문에 기록하지 않습니다. ls -ltu /path/to/file또는 stat /path/to/file파일의 액세스 시간을 보여줍니다.

사용자가 파일에 액세스했는데 자신의 트랙을 숨기려고하지 않은 경우, 쉘 기록 (예 ~/.bash_history:)에 실마리가있을 수 있습니다.

파일을 무엇 또는 누가 지금 열 었는지 알아 보려면을 사용하십시오 lsof /path/to/file.

나중에 파일에 발생하는 사항을 기록하려면 몇 가지 방법이 있습니다.

  • inotifywait를 사용하십시오 . 누군가 읽을 때 inotifywait -e access /path/to줄을 인쇄합니다 . 이 인터페이스는 파일에 누가 액세스했는지 알려주지 않습니다. 이 회선이 표시되는 즉시 전화 를 걸 수 있지만 경쟁 조건이 있습니다 (lsof가 진행될 때까지 액세스가 종료 될 수 있음)./path/to/ ACCESS filefilelsof /path/to/file

  • LoggedFS 는 파일 시스템 트리의보기를 제공하고 해당보기를 통해 모든 액세스에 대해 더 빠른 로깅을 수행 할 수있는 스택 가능한 파일 시스템입니다. 이를 구성하려면 LoggedFS 구성 파일 구문을 참조하십시오 .

  • Linux의 감사 서브 시스템 을 사용 하여 파일 시스템 액세스를 포함하여 많은 것을 기록 할 수 있습니다 . auditd데몬이 시작 되었는지 확인한 다음로 로그 할 대상을 구성하십시오 auditctl. 기록 된 각 작업은 /var/log/audit/audit.log(일반 배포시)에 기록됩니다 . 특정 파일 시청을 시작하려면

    auditctl -w /path/to/file
    

    디렉토리에 감시를두면 디렉토리에있는 파일과 그 하위 디렉토리도 반복적으로 감시됩니다.


답변

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

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

또는 모니터링 모드 및 타임 스탬프를 사용하는 경우 :

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


답변

이전 답변은 귀하가 요청한 것을 수행하는 최선의 방법 이 아닙니다 . 리눅스에는이를위한 API가 있습니다. inotifyAPI http://linux.die.net/man/7/inotify

  1. inotifyAPI를 직접 호출하여 원하는 작업을 수행하는 C 프로그램을 작성할 수 있습니다.
  2. kfsmd, http://www.linux.com/archive/feature/124903 을 사용하는 데몬을 사용할 수 있습니다inotify
  3. 플랫폼에서 작동하는 무언가를 원하고 ( inotifyLinux에 따라 다름) Java를 사용하는 경우 JNotify는 플랫폼 (Linux, Mac, Windows)에서 작동하여 기본 OS의 기본 API를 추상화합니다.

답변

이것은 일반적으로 실현 가능하지 않습니다. 어떤 방식 으로든 가능하게하기 위해 충분한 감사가있는 파일 시스템을 보았지만 일반적인 Unix는 아닙니다.


답변