답변:
매우 특이한 로깅 정책이없는 한, 누가 기록하지 않은 파일에 액세스했는지 (대량의 정보). 시스템 로그에서 누가 로그인했는지 확인할 수 있습니다. 이 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 file
file
lsof /path/to/file
LoggedFS 는 파일 시스템 트리의보기를 제공하고 해당보기를 통해 모든 액세스에 대해 더 빠른 로깅을 수행 할 수있는 스택 가능한 파일 시스템입니다. 이를 구성하려면 LoggedFS 구성 파일 구문을 참조하십시오 .
Linux의 감사 서브 시스템 을 사용 하여 파일 시스템 액세스를 포함하여 많은 것을 기록 할 수 있습니다 . auditd
데몬이 시작 되었는지 확인한 다음로 로그 할 대상을 구성하십시오 auditctl
. 기록 된 각 작업은 /var/log/audit/audit.log
(일반 배포시)에 기록됩니다 . 특정 파일 시청을 시작하려면
auditctl -w /path/to/file
디렉토리에 감시를두면 디렉토리에있는 파일과 그 하위 디렉토리도 반복적으로 감시됩니다.
syslogd access log file /var/log/audit.log at 10:01\nsyslogd access log file /var/log/audit.log at 10:02\n...
inotifywait를 사용한 위의 예는 다음 중 하나 여야합니다 (자세한 내용은 매뉴얼 페이지 참조).
inotifywait /path/to/file
inotifywait -e open /pat/to/file
또는 모니터링 모드 및 타임 스탬프를 사용하는 경우 :
inotifywait -m --format '%w:%e:%T' --timefmt '%F %T %Z %z'
이전 답변은 귀하가 요청한 것을 수행하는 최선의 방법 이 아닙니다 . 리눅스에는이를위한 API가 있습니다. inotify
API http://linux.die.net/man/7/inotify
inotify
API를 직접 호출하여 원하는 작업을 수행하는 C 프로그램을 작성할 수 있습니다.inotify
inotify
Linux에 따라 다름) Java를 사용하는 경우 JNotify는 플랫폼 (Linux, Mac, Windows)에서 작동하여 기본 OS의 기본 API를 추상화합니다.auditd
(단, 지난 주에 auditd
이미 실행 하지 않은 한 지난 주에 파일에 액세스 한 사람을 파악하는 데 도움이되지 않음 ).