Ubuntu 12.04/apache 서버와 루트 권한이 있는 "/var/www/foo" 디렉터리가 있습니다.
해당 디렉토리에 대한 권한이 반복적으로 변경되고 있습니다.
질문: 어떻게 조사하고, 무엇이 권한을 변경했나요?
답변1
감사를 사용하여 이를 조사하여 확인할 수 있습니다. 우분투에서는 이 패키지를 auditd
.
파일 또는 폴더 조사를 시작하려면 다음 명령을 사용하십시오.
auditctl -w /var/www/foo -p a
-w
파일/폴더 보기를 나타냅니다.-p a
파일 속성 변경을 모니터링하는 것을 의미합니다.
지금 시작하세요 tail -f /var/log/audit/audit.log
. 속성이 변경되면 로그 파일에 다음과 유사한 내용이 표시됩니다.
type=SYSCALL msg=audit(1429279282.410:59): arch=c000003e syscall=268 success=yes exit=0
a0=ffffffffffffff9c a1=23f20f0 a2=1c0 a3=7fff90dd96e0 items=1 ppid=26951 pid=32041
auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts5
ses=4294967295 comm="chmod" exe="/bin/chmod"
type=CWD msg=audit(1429279282.410:59): cwd="/root"
type=PATH msg=audit(1429279282.410:59): item=0 name="/var/www/foo" inode=18284 dev=00:13
mode=040700 ouid=0 ogid=0 rdev=00:00
나는 chmod 700 /var/www/foo
그것을 실행하기 위해 실행합니다.
- 첫 번째 줄에 보시면
- 이 작업을 수행하는 실행 파일은 다음과 같습니다.
exe="/bin/chmod"
- 프로세스 PID:
pid=32041
- 어떤 사용자인지 확인할 수도 있습니다.
uid=0
제 경우에는 루트입니다.
- 이 작업을 수행하는 실행 파일은 다음과 같습니다.
- 세 번째 줄에는 변경된 패턴이 표시됩니다.
mode=040700
답변2
과거에 권한이 변경된 이유를 어떻게 알 수 있는지 대답할 방법이 없다고 생각하지만 lsof 명령을 사용하면 특정 시간에 어떤 사용자나 프로세스가 파일을 사용하고 있는지 확인할 수 있습니다. cron에 올려서 잡을 수도 있습니다. 파일 권한이 무작위로 변경되고 그것이 무엇인지 모르는 경우 찾기 어려울 수 있습니다.
"chattr" 명령을 사용하면 파일 권한이 변경되는 것을 방지할 수 있습니다. Chattr은 적절한 chattr 명령을 먼저 실행하지 않으면 루트 사용자라도 파일을 수정할 수 없도록 파일을 잠급니다.
chattr +i 파일 이름(파일 이름 속성을 "불변"으로 설정하세요. 누구도 파일에 쓸 수 없습니다.) chattr -i 파일 이름(파일 소유권과 권한을 다시 변경할 수 있도록 불변 플래그를 제거하세요.)
답변3
시스템 이 없으면 auditctl
다음 명령을 사용하여 조사를 시작할 수 있습니다.
$ ls -lc /path/to/folder
이것은 "ctime을 표시하고 이름별로 정렬"하여 폴더가 마지막으로 변경된 시기를 표시합니다. 어쩌면 이 정보를 사용하여 cron 작업에 연결하거나 변경이 수행되었을 때 로그인한 사용자를 볼 때 사용자가 트리거한 이벤트에 변경 내용을 연결할 수 있습니다.
마지막 로그인, 세션 기간, 타임스탬프가 포함된 추가 정보를 보려면 다음 명령을 사용하십시오.
$ last | more