Как почистить логи линукс

Заметаем следы вместе с хакерами. Чистим логи и историю Bash на взломанных Linux системах

Последним этапом деятельности любого хакера является заметание следов.

Автор: DRD_, Cyber Weapons Lab

Последним этапом деятельности любого хакера является заметание следов. Киберпреступник удаляет следы своей деятельности и логи, чтобы избежать обнаружения. Данный этап особенно важен, если злоумышленник в будущем планирует снова получить доступ к целевому устройству.

Для демонстрации основ заметания следов, сначала скомпрометируем цель, а затем изучим несколько методов, используемых для удаления истории Bash и очистки логов после взлома Linux систем.

Шаг 1. Скомпрометируйте цель

Первое, что нам следует сделать, — взломать цель. Используя некорректную обработку сервером команд ОС, можно применить внедрение команд, для получения оболочки. Затем нашу новую оболочку необходимо обновить до полностью интерактивной. Данная процедура значительно упростит работу. После этого мы сможем повысить наши привилегии до root, чтобы наилучшим образом использовать преимущества системы и оставаться незамеченными.

Шаг 2. Создайте легко удаляемый скрытый каталог

Получив root-доступ, мы можем создать скрытый каталог для работы и хранить в нем любые скрипты или файлы. С одной стороны, подобные манипуляции обманут лишь самого начинающего администратора, но дополнительный уровень защиты определенно не повредит. Во-первых, давайте найдем все доступные для записи каталоги с помощью следующей команды:

С помощью команды mkdir можно создать скрытый каталог, добавив точку к имени:

Зададим команду перечисления содержимого /dev/shm. Как видим, ничего не появилось:

Каталог появляется лишь тогда, когда мы используем переключатель -a для вывода списка всех файлов и каталогов:

Для удаления каталога после завершения работы на машине, используйте команду rmdir :

Шаг 3. Удалите историю Bash

Команды записываются в переменную среды HISTFILE, обычно это .bash_history. Воспользуемся echo для определения местоположения:

Используем команду unset для удаления переменной:

Повторив процедуру снова, видим, что ничего не появляется:

Чтобы история команд не сохранялась, также можно ее отправить в /dev/null. Для этого установите переменную:

Или сделайте то же самое с командой экспорта:

История теперь будет отправлена в /dev/null (то есть никуда):

Установите количество команд, которые будут сохраняться во время текущего сеанса, равным 0, используя переменную HISTSIZE:

В качестве альтернативы используйте команду экспорта:

Измените количество строк, разрешенных в файле истории, с помощью переменной HISTFILESIZE. Установите данное значение на 0:

Или с экспортом:

Для изменения параметров оболочки также можно использовать команду set. Чтобы отключить опцию истории, используйте следующую команду:

Снова включите ее:

Точно так же для изменения параметров оболочки можно использовать команду shopt. Чтобы отключить историю, используйте следующую команду:

Снова включите ее:

Во время выполнения команд на целевой системе иногда получается избежать их сохранения в истории, запустив команду с начального пробела:

Данный метод работает не всегда и зависит от системы. Также можно просто очистить историю с помощью переключателя -c :

Чтобы убедиться, что изменения записаны на диск, используйте переключатель -w :

Данные действия очистят историю только для текущего сеанса. Чтобы окончательно убедиться, что история очищается при выходе из сеанса, пригодится следующая команда:

Также можно использовать команду kill для выхода из сеанса без сохранения истории:

Шаг4. Очистите файлы журнала

Конечно, можно просто удалить журнал с помощью команды rm :

Но скорее всего, данная процедура вызовет многочисленные красные флажки. Поэтому лучше сделать файл пустым, чем стирать его полностью. Используем команду truncate, чтобы уменьшить размер файла до 0:

Читайте также:  Как увеличить tdr windows 10

Обратите внимание, функция усечения присутствует не всегда и не во всех системах.

То же самое можно сделать, отображая в файл “ничего”:

А также использовать > сам по себе для очистки файла:

Мы также можем отправить его в /dev/null:

Или использовать команду tee :

Также можно использовать команду dd, чтобы ничего не записывать в файл журнала:

Команда shred может быть использована, чтобы поверх перезаписать файл с бессмысленными двоичными данными:

Дополнительно добавив -zu, вы обрежете файл и перезапишете его нулями:

Шаг 5. Используйте специальный инструмент для наилучшего сокрытия следов

Перейдите в каталог с возможностью записи и используйте chmod, чтобы сделать его исполняемым:

Затем запустите его:

Нам предоставляется настраиваемая подсказка с несколькими вариантами на выбор. Выберем первый, чтобы очистить логи:

Также можно отключить Bash и историю авторизации с помощью опции 2:

Если вам нужно срочно все очистить, просто добавьте в команду now:

Заключение

Отмечу, что существуют и другие способы удаления следов атаки. Можно использовать Metasploit , сценарии оболочки или осуществить сокрытие следов на взломанной Windows системе. Тем не менее информации, приведенной в статье, вполне достаточно для сокрытия активности на базовом Linux компьютере.

Источник

Очистка лог файлов под linux

Я использую виртуальную машину kvm ubuntu 10.04 для тестирования некоторых функций модуля ядра. Я пролистываю файлы /var/log для просмотра сообщений ядра об этом модуле.

Чтобы начать с чистого состояния, я удаляю файлы журналов, содержащие старые сообщения, выполнив rm -rf /var/log/* , а затем перезагрузив виртуальную машину. Однако после перезагрузки новые файлы журнала все еще содержат эти старые сообщения журнала. Удаление файлов и перезагрузка виртуальной машины занимает около 5-6 циклов, чтобы окончательно избавиться от сообщений журнала.

Почему это происходит? Есть ли более простой способ очистки файлов журнала?

3 ответа

Самый простой способ очистить старые журналы — не удалять их.

Лучший способ очистить журналы — это либо logrotate , как указал Ханан Н., либо:

для каждого из файлов журнала. Я не совсем уверен, на какие записи журнала вы ссылаетесь с предыдущей загрузки, но если вы хотите очистить это после загрузки, вы можете поместить указанную выше команду в /etc/rc.local сценарий, так что вся запись ведется после загрузки.

Обычно, хотя вы не хотите очищать журналы, так как они являются отправной точкой для устранения неполадок.

Для того, что вы делаете, может быть лучше добавить дополнительный файл журнала для сообщений ядра. Некоторые демоны журналов позволяют выполнять сопоставления записываемых записей, так что вы получаете только соответствующие записи в своем файле. Затем вы можете вращать, удалять или переименовывать файлы между запусками. (Если вы не перезагрузите компьютер, вам может потребоваться отправить сигнал HUP демону журнала, чтобы он снова открыл свои файлы.

Есть также инструменты, которые будут извлекать только новые записи из журнала. Утилита logtail из пакета logcheck одна такая утилита. Его можно запустить с файлом альтернативного смещения.

Существуют и другие инструменты, которые отслеживают в журналах записи, соответствующие шаблону, и сообщают о них. Один из них может хорошо сработать для вас.

Похоже, что это работает нормально (в Ubuntu LTS 14.04), свернув журналы в чистый журнал, а затем удалив старые записи журнала. Он похож на метод cp /dev /null, но я думаю, что он чище. YMMV

Источник

Шпаргалка по journalctl в Linux

Журналы — это один из самых важных источников информации при возникновении любых ошибок в операционной системе Linux. Я это уже много раз говорил ранее и вот сказал ещё раз. Раньше в Linux для сохранения журналов сервисов использовался отдельный демон под названием syslogd. Но с приходом системы инициализации systemd большинство функций касающихся управления сервисами перешли под её управление. В том числе и управление логами.

Теперь для просмотра логов определенного сервиса или загрузки системы необходимо использовать утилиту journalctl. В этой статье мы разберем примеры использования journalctl, а также основные возможности этой команды и её опции. По сравнению с обычными файлами журналов, у journalctl есть несколько преимуществ. Все логи находятся в одном месте, они индексируются и структурируются, поэтому к ним можно получить доступ в нескольких удобных форматах.

Читайте также:  Как узнать дату изменения файла linux

Синтаксис и опции journalctl

Синтаксис команды очень простой. Достаточно выполнить команду без опций или передав ей нужные опции. Если утилита не выводит ничего, выполните её от имени суперпользователя:

journalctl опции

А теперь давайте разберем основные опции journalctl:

  • —full, -l — отображать все доступные поля;
  • —all, -a — отображать все поля в выводе full, даже если они содержат непечатаемые символы или слишком длинные;
  • —pager-end, -e — отобразить только последние сообщения из журнала;
  • —lines, -n — количество строк, которые нужно отображать на одном экране, по умолчанию 10;
  • —no-tail — отображать все строки доступные строки;
  • —reverse, -r — отображать новые события в начале списка;
  • —output, -o — настраивает формат вывода лога;
  • —output-fields — поля, которые нужно выводить;
  • —catalog, -x — добавить к информации об ошибках пояснения, ссылки на документацию или форумы там, где это возможно;
  • —quiet, -q — не показывать все информационные сообщения;
  • —merge, -m — показывать сообщения из всех доступных журналов;
  • —boot, -b — показать сообщения с момента определенной загрузки системы. По умолчанию используется последняя загрузка;
  • —list-boots — показать список сохраненных загрузок системы;
  • —dmesg, -k — показывает сообщения только от ядра. Аналог вызова команды dmesg;
  • —identifier, -t — показать сообщения с выбранным идентификатором;
  • —unit, -u — показать сообщения от выбранного сервиса;
  • —user-unit — фильтровать сообщения от выбранной сессии;
  • —priority, -p — фильтровать сообщения по их приоритету. Есть восемь уровней приоритета, от 0 до 7;
  • —grep, -g — фильтрация по тексту сообщения;
  • —cursor, -c — начать просмотр сообщений с указанного места;
  • —since, -S, —until, -U — фильтрация по дате и времени;
  • —field, -F — вывести все данные из выбранного поля;
  • —fields, -N — вывести все доступные поля;
  • —system — выводить только системные сообщения;
  • —user — выводить только сообщения пользователя;
  • —machine, -M — выводить сообщения от определенного контейнера;
  • —header — выводить заголовки полей при выводе журнала;
  • —disk-usage — вывести общий размер лог файлов на диске;
  • —list-catalog — вывести все доступные подсказки для ошибок;
  • —sync — синхронизировать все не сохраненные журналы с файловой системой;
  • —flush — перенести все данные из каталога /run/log/journal в /var/log/journal;
  • —rotate — запустить ротацию логов;
  • —no-pager — выводить информацию из журнала без возможности листать страницы;
  • -f — выводить новые сообщения в реальном времени, как в команде tail;
  • —vacuum-time — очистить логи, давностью больше указанного периода;
  • —vacuum-size — очистить логи, чтобы размер хранилища соответствовал указанному.

Горячие клавиши journalctl

По умолчанию информация лога выводится в формате, в котором её можно листать. Давайте разберем горячие клавиши, которые вы можете для этого использовать:

  • Стрелка вниз, Enter, e или j — переместиться вниз на одну строку;
  • Стрелка вверх, y или k — переместиться на одну строку вверх;
  • Пробел — переместиться на одну страницу вниз;
  • b — переместиться на одну страницу вверх;
  • Стрелка вправо, стрелка влево — горизонтальна прокрутка;
  • g — перейти на первую строку;
  • G — перейти на последнюю строку;
  • p — перейти на позицию нужного процента сообщений. Например, 50p перенесет курсор на середину вывода;
  • / — поиск по журналу;
  • n — найти следующее вхождение;
  • N — предыдущее вхождение;
  • q — выйти.

Теперь вы знаете основные опции команды и клавиши, с помощью которых можно ею управлять. Дальше небольшая шпаргалка journalctl.

Шпаргалка по journalctl

Вывод journalctl представляет из себя цельный список всех сохраненных сообщений. Если вы запустите команду journalctl без параметров, то получите самые первые сообщения, которые были сохранены. В моем случае это данные за 13 января:

Чтобы найти именно то, что вам нужно, необходимо научится перемещаться по этому списку. Формат вывода лога довольно простой:

янв 13 20:55:55 sergiy-pc kernel: Linux version 4.15.0-43-generic

  • янв 13 20:55:55 — дата и время события;
  • sergiy-pc — хост, на котором произошло событие;
  • kernel — источник события, обычно это программа или сервис. В данном случае ядро;
  • Linux version 4.15.0-43-generic — само сообщение.
Читайте также:  Фар для windows 10

Давайте перейдем к примерам фильтрации и перемещения.

1. Просмотр логов сервисов

Самый частый случай использования journalctl — это когда вы пытаетесь запустить какой-либо сервис с помощью systemd, он не запускается и systemd выдает вам такое сообщение подобного содержания: Failed to start service use journalctl -xe for details. Система сама предлагает вам какую команду надо выполнить:

sudo journalctl -xe

Как вы помните из опций, эта команда отображает последние сообщения в журнале и добавляет к ним дополнительную информацию, если она есть. Учитывая, что последнее, что мы делали — был наш сервис, то здесь будут сообщения от него и вы быстро сможете понять почему он не запускается.

Чтобы отфильтровать сообщения только от определенного сервиса можно использовать опцию -u. Например:

sudo journalctl -eu apache2.service

2. Просмотр логов в режиме tail

С помощью опции -f можно указать утилите, что необходимо выводить новые сообщения в реальном времени:

sudo journalctl -f

В этом режиме less не поддерживается, поэтому для выхода нажмите сочетание клавиш Ctrl+C.

3. Просмотр логов загрузки

В логе journalctl содержатся все логи, в том числе и логи загрузки. Для того чтобы открыть лог последней загрузки используйте опцию -b:

sudo journalctl -b

Посмотреть список всех сохраненных загрузок можно командой:

sudo journalctl -list-boots

Теперь, чтобы посмотреть сообщения для нужной загрузки используйте её идентификатор:

sudo journalctl -b 37d5c906c9c6404682f029b2c34ec9dc

4. Фильтрация по дате

С помощью опции —since вы можете указать дату и время, начиная с которой нужно отображать логи:

sudo journalctl —since «2019-01-20 15:10:10»

Опция —until помогает указать по какую дату вы хотите получить информацию:

sudo journalctl -e —until «2019-01-20 15:05:50»

Или сразу скомбинируем две эти опции чтобы получить логи за нужный период:

sudo journalctl —since «2019-01-20 15:10:10» —until «2019-01-20 15:05:50»

Кроме даты в формате YYYY-MM-DD в этих опциях можно использовать такие слова, как yesterday, today, и tomorrow. Также допустимы конструкции 1 day ago (один день назад) или 3 hours ago (три часа назад). Ещё можно использовать знаки + и -. Например -1h30min будет означать полтора часа назад.

5. Журнал ядра

Если вы хотите посмотреть только сообщения ядра используйте опцию -k:

sudo journalctl -ek

6. Настройка формата вывода

По умолчанию journalctl выводит информацию с помощью утилиты less, в которой вы можете её удобно листать и просматривать. Но формат вывода можно изменить:

  • short — используется по умолчанию;
  • verbose — также, как и short, только выводится намного больше информации;
  • json — вывод в формате json, одна строка лога в одной строке вывода;
  • json-pretty — форматированный вывод json для более удобного восприятия;
  • cat — отображать только сообщения, без метаданных.

Чтобы указать нужный формат используйте опцию -o. Например:

sudo journalctl -o json-pretty

sudo journalctl -eo json-pretty

7. Очистка логов

Сначала нужно посмотреть сколько ваши логи занимают на диске. Для этого используйте такую команду:

sudo journalctl —disk-usage

Чтобы уменьшить размер лога можно использовать опцию —vacuum-size. Например, если вы хотите, чтобы ваши файлы журналов занимали на диске не более 2 Гб, выполните команду:

sudo journalctl —vacuum-size=2G

Теперь старые логи будут удалены, пока общий объем хранилища не будет составлять 2 гигабайта. Также можно удалять логи по времени. Для этого используется опция —vacuum-time. Например, оставим только логи за последний год:

Выводы

В этой статье мы разобрали как пользоваться journalctl в Linux. Наличие этой утилиты в системе не означает, что теперь вы не можете пользоваться обычными файлами логов. Большинство сервисов как и раньше пишут свои основные логи в файлы, а в лог journalctl пишутся сообщения при старте сервисов, а также различные системные сообщения.

Источник

Оцените статью