Вопрос или проблема
Я использую Ubuntu 10.04. Есть ли способ получить ежедневный отчет о том, кто входил в систему, в какое время и даже – возможно ли получить отчет о командах, которые они использовали? Это малопользуемая система, и я думаю, что это был бы хороший способ увидеть, какая активность происходит на ней.
В этом же направлении я слышал, что невозможно отслеживать, когда выполняются задания на сервере через неинтерактивные оболочки, такие как rsync или просто удаленное выполнение отдельных команд через ssh. Это правда, или есть способ зарегистрировать и отслеживать это тоже?
Информация о том, кто и когда входил, доступна в /var/log/auth.log
(или других лог-файлах на других дистрибутивах). Существует множество программ мониторинга журналов, которые могут извлекать информацию, которую вы настраиваете как актуальную. На любой адекватной системе каждая аутентификация пользователя фиксируется.
Чтобы записывать каждое вызов команды (но не их аргументы), используйте учет процессов, предоставленный acct
пакетом на Ubuntu. Если подсистема учета работает, то lastcomm
показывает информацию о завершенных процессах.
Вы также можете использовать:
last
, чтобы увидеть, кто в последний раз входил в систему, включая пользователей SSH.who
илиw
, чтобы увидеть, кто в настоящее время вошел в систему, включая пользователей SSH.
Вы также можете попробовать ввести команду last
в консоль, которая отображает все недавние входы, включая имя пользователя, под которым они вошли (но не фиксирует, если они изменили имя пользователя после входа), IP-адрес, дату и продолжительность времени, в течение которого они были в системе.
Эту команду упомянул @jasonwryan в комментарии здесь.
Вы также можете изменить оболочку bash для ведения некоторого rsylog.
Фактически вы настраиваете rsyslog на удаленном хосте, чтобы принимать определенные подключения. Затем изменяете оболочку хоста, на котором хотите вести мониторинг – соберите свою версию с теми, у кого включено следующее:
vi config-top.h
#define SYSLOG_HISTORY
#if defined (SYSLOG_HISTORY)
# define SYSLOG_FACILITY LOG_USER
# define SYSLOG_LEVEL LOG_INFO
#endif
После компиляции с этим включенным вы можете заменить bash на эту версию ИЛИ заставить пользователей входить в эту версию, перенаправив их входы на нее.
Для получения дополнительной информации:
Эти 2
команды дают одинаковый результат, я часто использовал их, чтобы проверить, кто вошел в систему.
Примечание:
22.22.22.22
вошел 4 раза и по-прежнему находится там.
last
root pts/0 22.22.22.22 Пт Апр 23 08:36 все еще в системе
root pts/0 22.22.22.22 Пт Апр 23 08:29 - 08:36 (00:06)
root pts/0 22.22.22.22 Пт Апр 23 08:27 - 08:29 (00:02)
root pts/0 22.22.22.22 Пт Апр 23 08:25 - 08:27 (00:01)
root pts/0 22.22.22.22 Чт Апр 15 11:51 - 12:00 (00:09)
reboot system boot 5.4.0-51-generic Чт Апр 15 11:50 все еще работает
wtmp начинается Чт Апр 15 11:50:06 2021
============
grep -E "Accepted publickey" /var/log/auth.log
Апр 23 12:25:50 сервер sshd[59026]:Accepted publickey for root from 22.22.22.22 port 62685 ssh2: RSA SHA256:12
Апр 23 12:27:41 сервер sshd[59165]:Accepted publickey for root from 22.22.22.22 port 63240 ssh2: RSA SHA256:12
Апр 23 12:29:52 сервер sshd[60083]:Accepted publickey for root from 22.22.22.22 port 63860 ssh2: RSA SHA256:12
Апр 23 08:36:27 сервер sshd[63873]:Accepted publickey for root from 22.22.22.22 port 49318 ssh2: RSA SHA256:12
Как я могу отслеживать, кто SSH’ит на мой linux-устройство
эта информация доступна в /var/log/audit/audit.log
.
Таким образом, вам нужно включить аудит через systemctl enable auditd
Я не думаю, что вам нужно конкретное правило в /etc/audit/rules.d/audit.rules
, чтобы это было зафиксировано в audit.log
. По крайней мере, не в RHEL-7 и позже по моему опыту.
К сожалению, синтаксис в audit.log
не легко читается человеком. Я написал код на C, который обрабатывает audit.log и извлекает необходимую информацию по своему усмотрению и выводит на экран.
Информация, которую вы можете извлечь из audit.log, включает
- имя учетной записи, к которой кто-то пытается подключиться по ssh
- была ли ssh-соединение успешным или нет, т.е. кто-то знал правильный пароль для данной учетной записи, которую они использовали для подключения по SSH
- ip-адрес, с которого происходит ssh-соединение
- имя хоста (ноутбука с Windows 10 или более ранней версии), которое было передано в ssh-соединение; в данный момент из win11 моё “имя хоста” отображает то же самое, что и “ip-адрес”, полагаю, это связано с netbios со стороны Windows.
- и вы очевидно имеете дату, на которую происходили любые успешные или неудачные попытки ssh, так что для данной учетной записи linux вы можете подвести итог всем подключениями по ssh для данного имени пользователя и увидеть, с какого ip они пришли и когда. Но вам придется проделать эту работу, я не знаю никаких программ, которые сделают это за вас, поэтому я написал свой собственный код на C для выполнения такой задачи.
- audit.log также содержит
cipher
иMAC
ssh-соединения, например,aes256-ctr
иhmac-sha2-256
; по умолчаниюsshd_config
допускает использование многих, о которых вы можете заблуждаться или нет.
Самое простое, что можно сделать, это
service auditd stop
rm /var/log/audit/audit.log
service auditd start
# затем, даже на этом же компьютере все будет работать, немедленно подключитесь по ssh к системе.
service auditd stop
cp /var/log/audit/audit.log /var/log/audit capture_successful_ssh_audit.txt
# повторите эту процедуру для неудачной попытки ssh
# когда вы намеренно неверно введете пароль и сохраните audit.log как failed.txt
# из этих текстовых файлов у вас будет только то, что представляет собой попытка подключения по ssh,
# которую вы сможете расшифровать.
# Также выполнение tail -f на audit.log, когда происходит ssh, является
# еще одним способом получить только то, что вам нужно видеть.
Обычно, когда кто-то входит в систему как пользователь, в /var/log/messages это отображается как:
sshd[18468]: Accepted keyboard-interactive/pam for root from 134.64.66.666 port 49867 ssh2
Так что просто используйте grep для сообщений так:
grep -E "Accepted keyboard-interactive/pam for" /var/log/messages
Ответ или решение
Чтобы отслеживать, кто подключается к вашему серверу на Linux через SSH, можно воспользоваться несколькими методами и инструментами. Рассмотрим этот вопрос подробно.
1. Просмотр журналов SSH-соединений
Основным источником информации о входах пользователей является файл /var/log/auth.log
. Этот файл содержит записи о всех событиях, связанных с аутентификацией, включая успешные и неудачные попытки входа. Вы можете использовать команду grep
, чтобы извлечь нужные данные:
grep "Accepted" /var/log/auth.log
Команда выведет строки, где указывается, какие пользователи успешно вошли, время входа и IP-адреса.
2. Использование команды last
Для получения текущей информации о пользователях, которые подключались к вашей системе, вы можете использовать команду last
. Эта команда отображает список пользователей, которые наиболее недавно использовали систему:
last
Вывод этой команды включает имена пользователей, IP-адреса, время входа и продолжительность сессии.
3. Системы учёта и мониторинга
Установка пакета acct
позволяет отслеживать выполнение команд, которые выполняли пользователи, хотя без значений аргументов. Чтобы установить пакет, выполните:
sudo apt-get install acct
Чтобы включить учёт команд, запустите:
sudo accton /var/log/acct
После этого вы сможете использовать команду lastcomm
, чтобы просмотреть информацию о запущенных командах:
lastcomm
4. Использование auditd
для отслеживания событий
Для более подробного и структурированного мониторинга можно использовать auditd
. Это мощный инструмент для аудита действий на уровне системы, который может вести учёт о соединениях SSH и выполненных командах. Убедитесь, что auditd
установлен и запущен:
sudo apt-get install auditd
sudo systemctl start auditd
После этого вы сможете создавать правила для аудита входящих SSH-соединений и выполняемых команд. Пример правила:
-a action,always -F arch=b64 -S execve
Чтобы увидеть аудированные события, используйте:
ausearch -m USER_LOGIN
Это позволит отслеживать, кто именно выполнял SSH-входы.
5. Наблюдение за неинтерактивными сессиями
Что касается отслеживания неинтерактивных сессий (напр., rsync
, удалённые команды), это может быть сложнее. Однако с помощью auditd
можно настроить правила для регистрации таких событий. Используйте ту же процедуру, что и для интерактивных сессий, а также ставьте более строгие аудиторские правила для команд, которые запускаются из SSH.
Заключение
Эти методы позволяют вам получить полное представление о входах и действиях пользователей на вашем сервере. Комбинируя просмотр журналов, команды last
, системы учёта acct
и auditd
, вы сможете не только отслеживать входы пользователей, но и понимать, какие команды они выполняли. Помните, что для повышения безопасности важно регулярно проверять логи и настраивать уведомления о подозрительных действиях.