Вопрос или проблема
У меня есть пользователь root, который использует Java-приложение для входа на сервера, которые я администрирую. Когда этот SSH-клиент входит в систему, он не записывает запись в wtmp (или utmp, насколько я могу судить). Он, похоже, не оставляет истории команд (используется bash). Однако он оставляет записи в /var/log/secure
, и соединения отображаются в команде ‘netstat
‘, однако ничего не отображается в ‘w
‘, ‘last
‘ или ‘who
‘. Пользователь доверенный, но это становится проблемой при диагностике проблем и отслеживании истории команд. Это также является проблемой безопасности (если этот пользователь может это сделать, то и другие тоже).
Существуют ли способы (конфигурация sshd?), чтобы заставить все входящие SSH-соединения записывать запись в wtmp и также историю команд как обычно?
Не уверен насчет конфигурации сервера, но с клиентской стороны это можно решить, используя ssh -t
.
Обратите внимание, что первая команда ssh
не показывает недавнюю запись, но ssh -t
показывает:
strongbad@LAPPIER :~$ ssh [email protected] 'echo " now: $(date)"; last --dns --hostlast --limit 10'
now: Пн 28 Окт 16:32:17 GMT 2024
pi pts/2 Пн Окт 28 16:27 - 16:27 (00:00) BLOCK.homestarrunner.com
pi pts/1 Пн Окт 28 15:53 все еще в системе LAPPIER.homestarrunner.com
pi pts/0 Пн Окт 28 15:19 все еще в системе BLOCK.homestarrunner.com
pi pts/0 Пн Окт 28 12:50 - 15:07 (02:16) LAPPIER.homestarrunner.com
pi pts/1 Пн Окт 28 02:50 - 07:08 (04:17) COMP00E9.homestarrunner.com
pi pts/0 Пн Окт 28 01:30 - 03:44 (02:14) COMP00E9.homestarrunner.com
pi pts/0 Сб Окт 26 17:32 - 20:45 (03:13) LAPPY486.homestarrunner.com
pi pts/1 Сб Окт 26 06:41 - 08:55 (02:14) COMPY386.homestarrunner.com
pi pts/0 Сб Окт 26 06:21 - 09:33 (03:12) COMPY386.homestarrunner.com
pi pts/0 Пт Окт 25 19:17 - 22:32 (03:15) TANDY400.homestarrunner.com
wtmp начинается Чт Янв 1 01:00:03 1970
strongbad@LAPPIER:~$ ssh -t [email protected] 'echo " now: $(date)"; last --dns --hostlast --limit 10'
now: Пн 28 Окт 16:32:28 GMT 2024
pi pts/2 Пн Окт 28 16:32 все еще в системе LAPPIER.homestarrunner.com
pi pts/2 Пн Окт 28 16:27 - 16:27 (00:00) BLOCK.homestarrunner.com
pi pts/1 Пн Окт 28 15:53 все еще в системе LAPPIER.homestarrunner.com
pi pts/0 Пн Окт 28 15:19 все еще в системе BLOCK.homestarrunner.com
pi pts/0 Пн Окт 28 12:50 - 15:07 (02:16) LAPPIER.homestarrunner.com
pi pts/1 Пн Окт 28 02:50 - 07:08 (04:17) COMP00E9.homestarrunner.com
pi pts/0 Пн Окт 28 01:30 - 03:44 (02:14) COMP00E9.homestarrunner.com
pi pts/0 Сб Окт 26 17:32 - 20:45 (03:13) LAPPY486.homestarrunner.com
pi pts/1 Сб Окт 26 06:41 - 08:55 (02:14) COMPY386.homestarrunner.com
pi pts/0 Сб Окт 26 06:21 - 09:33 (03:12) COMPY386.homestarrunner.com
wtmp начинается Чт Янв 1 01:00:03 1970
Подключение к 86.75.30.9 закрыто.
Ответ или решение
Когда вы сталкиваетесь с проблемой, когда SSH-соединения не записываются в системные файлы журнала wtmp или utmp и не оставляют историю команд в bash, это может создавать сложности как для администрирования, так и для обеспечения безопасности. Давайте разберем эту проблему и найдем пути ее решения.
Природа проблемы
Как вы уже отметили, при использовании вашего Java-приложения для входа через SSH не создается запись в wtmp или utmp, хотя в других логах (например, в /var/log/secure
) все же появляются записи о соединениях. Это может быть связано с несколькими аспектами:
-
Отсутствие интерактивной сессии: SSH-сессии создают записи в wtmp только тогда, когда они считаются интерактивными. Если ваше приложение не инициирует сессию в интерактивном режиме, то записи не будут созданы.
-
Использование команды без вида терминала: При передаче команд через SSH без параметра
-t
SSH не создает псевдо-терминал, что может привести к игнорированию записей о входе. -
Конфигурация SSH: В конфигурациях sshd иногда могут быть заданы параметры, влияющие на ведение лога.
Решения
1. Использование ключа -t
в SSH
Ваше упоминание о варианте использования ssh -t
указывает на правильное направление. Этот ключ позволяет SSH создать псевдо-терминал, что обеспечит запись о входе в систему. Однако это решение может быть временным, так как постоянное добавление -t
в каждую команду неудобно.
2. Изменение конфигурации SSH
Если использование ключа -t
не является приемлемым решением, вы можете рассмотреть возможность изменения конфигурации SSH. Вот несколько настроек, которые могут повлиять на запись в wtmp и utmp:
-
Откройте файл конфигурации SSHD, например,
/etc/ssh/sshd_config
. -
Убедитесь, что параметр
UsePAM
установлен вyes
. Это может помочь с обработкой регистрации пользователей.UsePAM yes
-
Перезапустите службу SSH после внесения изменений:
sudo systemctl restart sshd
3. Автоматизация использования -t
Вы можете учитывать возможность создания оболочки, где для всех подключений всегда будет список команд на то, чтобы автоматически добавлять параметр -t
. Например, создайте alias в .bashrc
:
alias ssh='ssh -t'
4. Мониторинг безопасности
Так как у вас есть проблемы с безопасностью, учтите, что если ваш пользователь имеет возможность выходить из системы без записи в системные журналы, это может создать уязвимость. Кроме введения способов регистрации с помощью -t
, рассмотрите возможность внедрения системы мониторинга команд или аудит действий пользователей. Вам также могут помочь такие инструменты, как auditd
, которые могут предоставить дополнительные возможности для отслеживания.
Заключение
Ваша проблема заключается в том, что SSH-сессии, инициированные без псевдо-терминала, не ведут запись в utmp и wtmp. Использование ключа -t
является простым решением, но стоит учитывать возможность автоматизации и конфигурации SSH для повышения надежности. Будьте бдительны относительно безопасности и используйте дополнительные инструменты мониторинга, чтобы защитить свои серверы от несанкционированного доступа.