
Очень часто подобная картина наблюдается у файлов .htaccess и индексных (index.php, index.html). В действительности никакой магии нет. Просто есть масса способов изменять содержимое read-only файла и одна только смена атрибутов на 400 или 444 не дает нужного эффекта. Рассмотрим варианты изменения read-only файла всеми доступными на хостинге средствами, включая php скрипты:
- Просто разрешить запись: самый очевидный способ – прочитать текущие атрибуты, поменять их с помощью chmod(“…”), system(“chmod …”) и т.п., после чего дописать в файл код и снова поменять атрибуты на старые. Если включить сюда сохранение и восстановление даты и времени файла, то вообще сложно будет заметить какие-то изменения. При определенных условиях можно даже сохранять размер файла.
- По FTP: подключиться, разрешить запись в файл, изменить файл, затем снова поменять права на readonly
- По SSH: подключиться, разрешить запись в файл, изменить файл, затем снова поменять права на readonly
- Пересоздать файл: прочитать содержимое файла, удалить файл в каталоге, создать файл с тем же именем, записать в него старое содержимое + новое. Восстановить атрибуты, дату и время по вкусу.
- От рута: получить доступ суперпользователя (например, на “рутованном” сервере) и внести изменения в read-only файл.
- На файл установлены атрибуты “только для чтения” (например, 400 или 440)
- На каталог, в котором размещен файл, установлены атрибуты “только для чтения” (например, 500 или 550)
- У хакера нет доступов по FTP (можно закрыть через .ftpaccess на запись или по IP) и SSH (отключить его)
- На хостинге запрещены все возможные варианты изменения владельца и атрибутов файла (chmod, chown, system, popen, shell_exec, passthru и т.п.)
- Сервер не взломан, у хакера нет доступа с правами суперпользователя (root)
Кстати, под Linux можно использовать расширенные атрибуты, установив на файл "readonly" командой chattr +i file.txt
Данный подход защиты файлов от модификаций используется в процедуре cms hardening ( "цементирование сайта" ), которую мы выполняем