리눅스 서버에서 사라지는 파일들


13

사용자의 홈 디렉토리에서 계속 사라지는 4 개의 특정 파일이 있습니다. 우리가 아는 한, cronjobs 또는 제거 할 다른 자동화 된 작업은 없습니다. 설정을 감사했지만 로그에 실제로 관심이있는 것은 아닙니다. 백업 유틸리티가 더 이상 존재하지 않을 때까지 매일 밤마다 액세스하는 것을 볼 수 있습니다. 해당 파일이 제거되어 감사를받을 수있는 원인이 있습니까?

해당 파일은 다음과 같습니다.

/home/username/.bashrc
/home/username/.bash_profile

해당 사용자의 .ssh 디렉토리에있는 몇 개의 파일이 있습니다. "keepers"라는 하위 폴더에 배치 된 이러한 파일의 사본도 동시에 삭제됩니다. 000에 대한 사용 권한을 000으로 변경하고 루트가 소유 한 것이 도움이되지 않았습니다.

나는 현재 그 하위 폴더에서 로그 생성, 삭제, 이동을 기록하기 위해 inotifywait 설정을 가지고 있기 때문에, 그것이 일어 났을 때가 아니라 로그를 남기지 않았지만 무언가를 일으킬 것입니다.


1
게시물에 이름과 경로를 추가하면 도움이 될 수 있습니다.
Shadok

2
또한 감사 로그를 게시하면 도움이 될 수 있습니다.
Janne Pikkarainen

3
또한 root 및 chmod 000으로 소유 한 파일을 작성하여 파일이 여전히 제거되는지 (또는 그로 인해 문제가 발생하거나 오류가 발생하는지) 확인하십시오.
다항식

5
chmod 0000 외에도 chattr + i를 사용하여 루트조차도 제거하지 못하도록 시도 할 수 있습니다.
mer

1
chattr은 ext 파일 시스템에서만 도움이됩니다. 그러나 chattr이 도움이 될 것입니다. :-) chattr 대신 SELINUX를 사용하여 파일 수정을 중지 할 수도 있습니다. 그러나 IMHO 삭제는 프로세스 또는 사용자가해야합니다.
JMW

답변:


20

해결 방법 1 : SystemTap을
사용할 수 SystemTap의를 사용하려고하는 모든 PID를 보여주기 위해 () 링크 해제 의 아이 노드에 .bashrc.bash_profile파일을.

커널에 대한 systemtap 및 디버그 기호를 설치 하십시오.

unlink.stap다음 내용 으로 이름을 가진 파일을 작성하십시오 .

probe syscall.unlink
{
    printf ("%s(%d) unlink (%s) userID(%d)\n", execname(), pid(), argstr, uid())
}

그런 다음 sudo stap unlink.stap

해결 방법 2 : inotify inotify
사용 하여 파일이 삭제 된 시점을 확인할 수도 있습니다 .

해결책 3 : ftrace
또 다른 해결책은 ftrace 를 사용하는 것입니다 .

trace-cmd record -e \*unlink\*

파일이 삭제 될 때까지 기다렸다가 Ctrl + C를 눌러 중지 trace-cmd record ...한 후 다음을 실행하십시오.

trace-cmd report

해결 방법 4 : bpftrace
Install bpftrace을 실행 한 후 다음을 실행하십시오.

bpftrace -e 'tracepoint:syscalls:sys_enter_unlink* { printf("%s %s\n", comm, str(args->pathname)); }'

5

micea의 답변 외에도 파일을 루트로 chattr + i하고 제거하려고 할 때 오류가 기록되는지 확인할 수 있습니다.


4

사용자 자신이 실수로 삭제하지 않았 음을 절대적으로 확신합니까?

나는 같은 문제를 가진 단서가없는 (Windows) 사용자가있었습니다. 그들이 ftp 클라이언트로 home-dir을 방문 할 때마다 그 파일들을 스스로 삭제한다는 것이 밝혀졌습니다. .xxxx 파일 (ftp 클라이언트가 파일을 숨기지 않음)을 발견하고 "클러 터"를 제거했습니다.

그들이 며칠 전에 삭제 한 파일이 자발적으로 다시 나타나는 것에 대해 불평하기 전까지는 나 자신에게 그렇게하지 않았습니다.


2
나를 믿어, 나는 이것이 쉬운 일이기를 바랍니다.
차드 P

이것은 재미 있었다 :)
snap

3
지금은 재밌어요 .. 일어 났을 때는 그리 많지 않아서 무슨 일이 있었는지 알 수 없었습니다. @Chad P : 찾은 내용을 알려주십시오. 나는 이것이 호기심이 많다는 것을 안다.
토니

3

우리는 bash 로그 아웃 스크립트 (~ / .bash_logout)를 사용하여 로그 아웃시 특정 파일을 정리합니다. 해당 설정이 있는지 확인할 수 있습니다.


2

/ home / user -name filename -exec rm -f {} \; 찾기를 수행하는 침입자처럼 보입니다 . 그의 몰래 후 :). 백업 파일도 삭제된다고 언급했기 때문에 추측합니다.


1

파일과 내용이 손실되지 않도록 LD_PRELOAD를 통해 libtrash 를 설정할 수 있습니다 . libtrash를 사용하면 여러 가지 일을 할 수 있지만 흥미로울 수있는 것은

INTERCEPT_UNLINK
INTERCEPT_RENAME
INTERCEPT_FOPEN
INTERCEPT_OPEN

libtrash에 대한 좋은 기사는 여기 에서 찾을 수 있습니다

언급 한 다른 것은 파일을 루트로 변경했으며 여전히 제거되었습니다. / home / username은 username이 소유하고 있기 때문입니다. 그리고 dir이 mod 755라고 말하면; 그런 다음 사용자가 제거 할 수있는 사람에 관계없이 해당 디렉토리의 파일 또는 디렉토리를 소유합니다. 루트 파일이거나 dir 인 경우에도 마찬가지입니다. 기본적으로 dir에서 파일을 제거한다는 것은 dir 내용을 변경하는 것을 의미하고 사용자는 dir의 7 (755)을 가지고 있으므로 원하는 모든 것을 할 수 있습니다.

다른 사람들이 이미 ext 파일 시스템에서 chattr을 통해 파일을 불변 (+ i)으로 설정하도록 제안한 것처럼이를 차단하는 방법이 있습니다. 그런 다음 + i 플래그가있는 파일 / dir을 변경하기 전에 변경 불가능한 플래그를 설정 해제해야합니다. 불변 플래그 / chattr은 루트에서만 사용할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.