Ведение логов или журналирование в Linux-системах является одной из основных системных функций, позволяющей отслеживать любые действия, совершённые пользователем, системой или внешними программными средствами. В дальнейшем эта информация становится основным источником данных для восстановления после сбоя или защиты от несанкционированного доступа к ресурсам. Для возможности её эффективного использования необходимо понимать принципы организации хранения логов и методы работы с ними. Рассмотрим их более детально.
Организация системного журналирования в Linux
Журналирование организовано таким образом, чтобы упорядочить поступающую на вход информацию в зависимости от её типа и назначения. С этой целью выделено несколько журналов для фиксации событий, среди которых можно выделить системный, журнал для фиксации сообщений, для приложений и для служб.
В системном журнале фиксируются любые события, связанные с работой системы, что гарантирует определённую стабильность в её работе. К данной категории также относятся журналы аутентификации.
Информация, связанная с аутентификацией пользователей, физически распределена между несколькими системными файлами, среди которых есть как текстовые, так и бинарные. К основным текстовым файлам можно отнести файлы auth.log и lastlog. К бинарным – файлы btmp и wtmp. Все они обычно находятся в системном каталоге /var/log/.
В auth.log информация хранится в виде отдельных записей, в полях которых записываются данные определённого типа. К примеру, там есть поля для даты и времени аутентификации пользователя, для имени удалённого хоста, а также для выводимого сообщения. В итоге это обеспечивает фиксацию абсолютно всех попыток подключения к системе со стороны пользователей или сторонних процессов.
В lastlog фиксируются данные последних сессий каждого из зарегистрированных в системе пользователей.
В btmp регистрируются данные по каждой из неудачных попыток аутентификации в системе.
В wtmp фиксируются все последние посещения пользователей.
Собранная системой информация по аутентификации может быть в дальнейшем использована как Администратором, так и самой системой. К примеру, Администратор может её использовать в следующих целях:
- Управление пользовательскими профилями;
- Выявление слабых мест защиты от несанкционированного доступа;
- Анализ ошибок входа в систему;
- Выявление попыток взлома со стороны определённых IP-адресов и принятие мер по их блокировке;
- Периодическое получение обновленных данных о работе системы аутентификации.
Что касается использования информации по аутентификации для самой Linux-системы, то благодаря ей становится возможным отслеживать внесённые в систему любые изменения.
Для реализации указанных целей Администраторы используют ряд встроенных и внешних программных средств, позволяющих просматривать данные в удобном виде, делать выборку нужных записей, устанавливать и настраивать автоматическую фильтрацию запрещённых пользователей и т. д. Рассмотрим некоторые из этих средств в порядке возрастания их сложности и важности.
Использование простых средств просмотра и поиска в журналах аутентификации
К таким средствам можно отнести программы просмотра и навигации для текстовых файлов большого размера. Они позволяют выбирать нужные участки файла для просмотра, выделять их, а также производить поиск данных, отвечающих нужным критериям, согласно установленным шаблонам поиска. Этих возможностей вполне хватает для осуществления большей части задач по управлению пользовательскими профилями.
Наиболее распространёнными для Linux-систем являются программы tail и less, каждая из которых имеет свою специфику работы и наборы опций для запуска.
Программа tail
Это наиболее простое программное средство просмотра данных, не имеющее возможностей мощных редакторов, однако позволяющее достаточно быстро попасть в нужную часть файла. По функциональности оно наиболее близко к команде head. Команда имеет чуть более десятка опций для запуска, что позволяет установить для неё тот или иной режим работы.
Для начала используем её без опций. Для этого наберём в терминале:
$ tail /var/log/auth.log
В результате мы получили информацию из файла auth.log о последних десяти попытках подключения к системе. Почему именно десяти? Потому что по умолчанию эта программа выводит именно такое количество записей из любого файла. Ниже мы выписали первые пять из выведенных командой записей, чтобы их проанализировать.
Dec 18 15:33:42 | dedicated | systemd-logind[603] | New session 7664 of user root. |
Dec 18 15:33:42 | dedicated | systemd: pam_unix(systemd-user:session) | session opened for user root(uid=0) by (uid=0) |
Dec 18 15:37:27 | dedicated | sshd[1642251] | Unable to negotiate with 218.92.0.59 port 4966: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1 [preauth] |
Dec 18 15:37:34 | dedicated | sshd[1642253] | Unable to negotiate with 220.77.114.179 port 60039: no matching host key type found. Their offer: ssh-rsa,ssh-dss [preauth] |
Dec 18 15:38:02 | dedicated | sshd[1642255] | Invalid user Oracle from 104.248.14.84 port 60530 |
Как видим, в первом столбце (поле) фиксируется точная дата и время произошедшего события. В данном случае это промежуток времени от 15:33 до 15:38 18 декабря.
Во второе поле заносится имя хоста, с которого был произведён вход в систему – dedicated.
В третьем поле отражён источник сформированного сообщения, как правило, это один из базовых компонентов Linux-системы (systemd-logind, sshd и т. д.).
В четвёртом поле находится текст самого системного сообщения. К примеру, «открыта новая сессия под номером 7664 для пользователя root» (New session 7664 of user root) или «нет доступа для пользователя Oracle из IP-адреса 104.248.14.84, порт 60530» (Invalid user Oracle from 104.248.14.84 port 60530).
Применение опций или параметров запуска позволяет сделать программу tail более гибкой и удобной в использовании. Просмотреть эти опции можно с помощью встроенной команды man. Просмотрим их в терминале:
$ man tail
Как видим, здесь приведён подробный синтаксис для использования того или иного параметра. Так, если мы хотим, чтобы команда выводила не десять записей, как сейчас, а только три, то в этом нам поможет параметр -n. Применим его на практике. Для этого введём в терминале:
$ tail -n3 /var/log/auth.log
В результате мы получили в выводе команды только три последние записи, что значительно ускоряет процесс анализа полученных данных.
Другим важным параметром является опция -f, использование которой позволяет получать только ту информацию, которая претерпела изменения, то есть новую. Это позволяет отслеживать файлы журналов в реальном режиме времени. Приведём синтаксис её использования:
$ tail -f /var/log/auth.log
Точно так же и другие опции способны ещё более увеличить гибкость программного средства.
Программа less
Средство имеет мощные возможности полноценного редактора, что позволяет, например, использовать его для произвольного просмотра текста в обоих направлениях, осуществлять постраничный вывод информации, а также производить поиск нужных участков текста согласно введённому шаблону.
Запустим её в терминале для просмотра информации о попытках подключения к системе:
$ less /var/log/auth.log
Программа имеет множество опций запуска, которые всегда можно просмотреть, введя соответствующую команду:
$ man less
Одной из наиболее полезных опций является параметр –s, позволяющий убрать пробелы внутри просматриваемого текста. Синтаксис его использования следующий:
$ less -s /var/log/auth.log
Также полезным может быть использование параметра -a, запрещающего производить поиск в участке текста, который в данный момент отображается на экране.
Опция -Dxcolor позволяет задать нужный цвет отображаемого текста, что также немаловажно для повышения удобочитаемости и уровня восприятия информации.
Осуществить поиск нужной фразы или слова можно с помощью поля с мигающим курсором в нижней части экрана. Введённые символы будут восприниматься программой как шаблон поиска.
Для выхода из режима просмотра достаточно нажать клавишу Q.
Использование системных средств просмотра журналов аутентификации
К таким средствам относятся встроенные команды last и lastlog. В отличие от уже рассмотренных простых средств они ориентированы на работу только с журналами аутентификации и извлекают при этом информацию не только из текстовых файлов, но и бинарных. Поэтому при их использовании нет необходимости вводить полное название файла журнала, они самостоятельно выберут данные из нужного файла.
Для начала продемонстрируем использование команды last. Её основное назначение – вывод информации по всем последним (несколько десятков) попыткам входа в систему со стороны любого пользователя или внешнего программного средства. Причём данные выводятся как по удачным попыткам подключения, так и неудачным, информацию по которым она берёт из бинарного файла log/btmp, в котором они фиксируются.
Введём в терминале:
$ last
Как видим, данные выведены для двух пользователей – root и test_use, а также системному компоненту reboot.
Здесь фиксируются: имя пользователя или процесса; точка входа / подключения (порт, терминал и т.д.); IP-адрес; дата и время события; время сеанса (поле logged in).
Эта информация даёт достаточно сведений, чтобы Администратор смог получить объективную информацию о всех подключениях к системе и принять действенные меры в случае обнаружения скрытых атак злоумышленников.
Команда lastlog настроена на вывод сведений, собранных в одноимённом журнале /var/log/lastlog, в котором, как уже говорилось, фиксируются данные о последней сессии каждого из зарегистрированных в системе пользователей или процессов. Причём выводимая ею информация автоматически упорядочивается согласно записям системного файла passwd.
Используем эту команду получения сведений о последнем сеансе каждого из наших пользователей. Для этого наберём в терминале:
$ lastlog
В результате мы получили полный набор сведений, состоящий из значений следующих полей: имя пользователя или процесса; порт; IP-адрес; дата и время последнего посещения. Обращаем внимание, что дата и время посещения выводятся только для реальных пользователей. Для системных же процессов выводится строчка «Never logged in», то есть «никогда не входил», что вполне естественно.
Программа также имеет ряд опций, позволяющих несколько изменить формат вывода, и, по сути, получить готовый фильтр.
Для примера, выведем только тех пользователей, которые посещали систему ранее двух последних дней. Для этого введём в терминале:
$ lastlog --before 2
Можно убедиться, что в список были внесены изменения. Теперь мы не увидим в нём пользователей, которые проходили аутентификацию в последние два дня - отсутствует пользователь root, который был ранее первым в списке.
Использование параметра -time позволило бы нам вывести только тех пользователей, которые проходили аутентификацию после указанного нами периода.
Приведённые примеры дают нам чёткое представление о том, что возможности одних только встроенных программных средств работы с журналами аутентификации достаточно велики и могут быть использованы Администраторами в повседневной работе. В случае же использования внешних утилит, таких как F2B, подобные возможности становятся практически неограниченными.