Сегодня гугл прислал письмо, мол «возможно на ваших сайтах вирус». Полез проверять — действительно есть. Я уже неоднократно сталкивался с заражениями. Результат таких заражений:
- либо сайт редиректит куда-то, причём обычно только мобильных пользователей, чтоб не так быстро спалиться
- либо рассылает спам
За отсутствием редиректа я слежу с помощью скрипта, который отслеживает изменения в файле .htaccess. Редиректов не было с тех пор как установил скрипт. За тем, чтобы не рассылался спам — заглядываю в логи сервера и в очередь почтовика.
# tail /var/log/php.mail.log
# exim -bpc
Я очень хочу понять как злоумышленник каждый раз влазит на эти сайты, но у меня для этого пока не хватает знаний. При том, что я меняю пароли для ftp, к базам данных, соли WP и даже переносил их на другие сервера.
В этот раз вирус не редиректит и не рассылает спам. Он просто есть. Обычно я чистил сайты так: скачивал на комп, открывал Text Replacer (он бесплатный, но за лицензию я заплатил, т.к. он мне неоднократно пригождался) искал base64 и массово заменял строки в файлах, в которых он нашелся + удалял файлы, которых не должно быть в движке (обычно не содержат никакого кода кроме самого вируса).
Сегодня, в рамках изучения linux-администрирования я решил сделать поиск внутри файлов средствами самого линукса.
Зашёл в папку, в которой обычно ютятся вирусы (wp-admin), проверил вручную что они присутствуют и запустил в консоли
# grep "base64" -R
↑ эта хуйня не работает. Каретка переводится на следующую строку и в течение получаса ничего не происходит. (Работал на соседней вкладке, пока ждал выполнения этой операции) Прерываю Ctrl+C. Что я делаю не так?
UPD Разобрался. Нужно вводить путь после команды, даже если находишься в нужной папке
↓ это работает!
# grep "base64" -R /var/www/site/data/www/site.ru/wp-content
Остаётся вопрос, что происходит, если не введён адрес? Почему не выдаёт ошибку или не спрашивает ввести путь?
И еще вопрос. Если набрать в гугле man grep — выводится мануал на русском с сайта OpenNet. При этом в самой консоли man на английском. Как докачать русские маны ко всем командам?
Узнал команду mv. Используется для перемещения и переименования файлов.
Попробовал редктировать файлы vim’ом — пока слишком хардкорно, вренулся в mcedit. Узнал как удалить целую строку за раз: Ctrl+K
План
- Сделать на учебном сервере то, что написано в статье: http://habrahabr.ru/post/132302/
- Научиться следить за изменением файлов сайтов. Ведь по идее никто не должен менять файлы в директориях кроме /wp-content/uploads (да и то только закачивать)
- Научиться получать уведомление на почту при внесении каких-то левых изменений.
- Научиться получать уведомление на почту при рассылки слишком большого количества писем.
- Уведомления на почту, когда осталось мало места на сервере.
Научиться хранить логи всех сообщений, отправленных с сервера. (пока хранятся только заголовки) - Научиться чистить старые логи (складывать их по датам?)
- Настроить бекапы в облако, а не только на сервер. Хранить на сервере бекап только за последний день.
- Научиться отслеживать какой сайт грузит систему (apachetop, goaccess, munin, pinba)