Возможный дубликат:
Мой сервер был взломан в АВАРИИ
Есть файл, который заражен этот код. Я не могу понять почему. Итак, я хочу регистрировать, кто загружает или изменяет файл. Есть ли способ записать, кто загружает или изменяет определенный файл?
PS: Нет входа по FTP. Мы используем только SSH и Plesk.
Да, есть. Подсистема аудита имеет довольно удобные функции учета.
Выполнение следующей команды будет проверять изменения в файле:
auditctl -w /my/specificly/modified/file.txt -p w -k "suspect file change"
Это установит наблюдение за этим файлом, всякий раз, когда он модифицируется посредством записи, изменение будет регистрироваться, и будет регистрироваться довольно широко.
Вы можете проверить журналы, выполнив:
ausearch -i -k "suspect file change"
Это вернет такой результат, как:
type=PATH msg=audit(05/08/2012 17:32:32.353:13118) : item=1 name=/tmp/test.txt inode=5767528 dev=fd:00 mode=file,644 ouid=root ogid=root rdev=00:00 obj=staff_u:object_r:user_tmp_t:s0
type=PATH msg=audit(05/08/2012 17:32:32.353:13118) : item=0 name=/tmp/ inode=5767169 dev=fd:00 mode=dir,sticky,777 ouid=root ogid=root rdev=00:00 obj=system_u:object_r:tmp_t:s0
type=CWD msg=audit(05/08/2012 17:32:32.353:13118) : cwd=/home/matthew/Testbed/C/fanotify
type=SYSCALL msg=audit(05/08/2012 17:32:32.353:13118) : arch=x86_64 syscall=unlinkat success=yes exit=0 a0=0xffffffffffffff9c a1=0xb540c0 a2=0x0 a3=0x7fff50cfba20 items=2 ppid=13699 pid=2773 auid=matthew uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts0 ses=2 comm=rm exe=/usr/bin/rm subj=staff_u:sysadm_r:sysadm_t:s0 key=some file
Если вы хотите что-то более сильное, вы можете пойти на что-то, что, скажем, отслеживает любые удаления пользователем, обычно не склонным к этому. Что касается производительности, чем конкретнее правило, тем лучше.
auditctl -a exit,always -F arch=b64 -S unlink -S rmdir -F auid=78 -F dir=/var/www/vhost
-F определяет фильтры, а -S определяет системные вызовы, чем больше фильтров, тем менее интенсивно ядро отслеживает их. Итак, в этом случае я фильтрую по пользователю (apache), каталогу vhosts и arch. Arch становится важным b64 как 64-битный b32 для 32-битного.
Вы можете установить их на длительный срок, поместив правила в /etc/audit.rules.
Поскольку вы используете CentOS, это то, для чего вы можете использовать SELinux. Вы можете пометить файл, о котором идет речь, как-то вроде httpd_config_t
вот так: chcon -v --type=httpd_config_t /the/html/file/in/question.html
Затем SELinux зарегистрирует ошибку в /var/log/audit/audit.log. Если вы используете SELinux в «разрешающем» режиме, это разрешит изменение; если вы работаете в «принудительном» режиме, изменение не допускается.
Взгляни на: http://wiki.centos.org/HowTos/SELinux Узнать больше. Примечание: по умолчанию SELinux работает и применяется в CentOS, поэтому вам просто нужно изменить метку для этого файла.