Посмотреть активные сессии linux
Команда who – настоящая палочка-выручалочка, благодаря которой так легко раздобыть всю необходимую информацию о пользователях, когда-либо работающих за конкретным компьютером. Так как операционная система Linux является многопользовательской, она отслеживает сеансы всех юзеров сети (кто работал за ПК, время старта и окончания его сеанса и прочее). Большинство пользователей операционной системы Linux отзываются об этом инструменте положительно. Он прекрасно показывает себя на практике.
Синтаксис
- -a - читает файл /etc/utmp, включает все основные опции;
- -b - показывает дату и время загрузки операционной системы;
- -d - показывает зомби-процессы.
- -u - выводит активных пользователей.
- -s - выводит имя, терминальную сессию и время, данный параметр используется по умолчанию;
- -T - информация о терминальной сессии;
- -q - количество пользователей в системе в данный момент;
- -r - показывает уровень процесса init.
Обычно для выполнения команды who берется информация файла: "/etc/utmp".
Альтернативные файлы: "/etc/wtmp" и "/etc/inittab".
Примеры
Если не использовать опции и аргументы, на экране появятся данные по умолчанию, включающие в себя информацию об учетных записях (тех, кто подключен к системе). Чтобы ознакомиться с данными о пользователе, который изъявил желание обратиться к терминалу прямо сейчас («спросить» у системы о самом себе), необходимо использовать команду «who am i».
Для получения обширной информации о подключенных пользователей достаточно ввести команду в виде:
Каких-либо дополнительных указаний в этом случае не потребуется. Если использовать исключительно «who», данных будет сравнительно меньше. Детализировать этот запрос или нет – решать только вам. Смотрите по ситуации.
Время загрузки системы можно посмотреть по команде:
Впишите её в терминале и ознакомьтесь с результатами запроса.
Чтобы посмотреть «runinit» (текущий уровень запуска), впишите в команду соответствующую опцию. Это будет выглядеть так:
Опция -s не имеет особого смысла, поскольку она провоцирует вывод таких стандартных значений, как «Имя пользователя», «терминальная линия», «время начала/окончания сеанса». Эта информация доступна и без добавления каких-либо опций. Едем дальше.
С помощью аргумента -T можно узнать состояние терминальной сессии. На практике это выглядит следующим образом:
При неисправности линии появится вопросительный знак.
При необходимости узнать, сколько пользователей подключено к системе, вводится:
Чтобы посмотреть, кто из пользователей активен в данный момент времени, введите команду:
При добавлении опции -d отображаются зомби-процессы:
Важное примечание: при использовании опции -d нельзя увидеть поле EXIT в окне терминала. Оно появляется лишь при добавлении опции -а.
Заключение
Основная задача утилиты who заключается в получении информации о пользователях, подключенных к системе. Вторичная задача – сбор данных о терминальных сессиях, благодаря которым и происходит их подключение.
Благодаря выше предоставленным примерам команд вы тоже можете ощутить простоту отслеживания данных о user системы. Всего несколько нажатий клавиш – и ответы на вопросы найдены.
Данная информация обычно нужна системным администраторам для просмотра истории входа в систему на многопользовательском сервере.
Помимо этого, бывает полезно узнать о неудачных попытках входа. Это могут быть боты, но могут быть и попытки взлома вашего сервера.
Где хранятся логи входа в систему
Информация о том, кто входил (залогинивался) или пытался войти в систему, хранится в лог файлах. Для этого используется три лог-файла:
/var/log/btmp — неудачные попытки входа.
/var/run/utmp — кто в данный момент залогинен (текущие сессии).
/var/log/wtmp — список всех сессий входа в систему.
Эти файлы, в отличии от большинства других лог-файлов Linux, имеют бинарный формат. Если вы попробуете просмотреть их командой cat , то на экран будет выведена «каша». Для их просмотра используется команда last .
Просмотр истории входа в систему
Для просмотра логов входа в систему используется команда last . По умолчанию команда last выводит информацию из файла /var/log/wtmp , в котором хранятся записи обо всех сессиях входа.
Выполним команду last :
Как вы можете видеть, выводится таблица с информацией. В ней содержатся имена пользователей, IP-адрес, с которого осуществлялся вход, дата и время входа и продолжительность сессии. Запись вида pts/0 означает, что для входа использовалось SSH соединение (или другое удаленное соединение, например, telnet).
Также выводится информация о включении/выключении системы.
Последняя строка в файле /var/log/wtmp показывает, когда был создан файл.
Просмотр истории входа для определенного пользователя
Чтобы показать информацию о сессиях определенного пользователя, то для команды last необходимо указать имя этого пользователя:
Ограничить количество строк
Иногда лог, который выводит команда last , может быть очень большой. Чтобы ограничить количество выводимых строк, используется опция -n ЧислоСтрок или просто -ЧислоСтрок .
Выведем только десять свежих записей:
Просмотр неудачных попыток входа в систему
Как было сказано выше, записи о неудачных попытках входа в систему хранятся в лог-файле /var/log/btmp .
Команда last по умолчанию выводит информацию из файла /var/log/wtmp . Чтобы вывести информацию из другого файла, используется опция -f ИмяФайла
Выведем записи о неудачных попытках входа (из файла /var/log/btmp ):
Или же можно воспользоваться командой lastb . Команда lastb работает точно также, как и команда last , но выводит информацию из файла /var/log/btmp
Заключение
Мы рассмотрели использование команды last для просмотра информации об истории входа в систему.
Дополнительную информацию по использованию команды last можно получить, выполнив в терминале:
Я просто SSH'd в корень, а затем SSH'd снова в корень на той же машине. Таким образом, у меня есть два открытых окна SSH'd в root на моей удаленной машине.
Из оболочки, как я могу увидеть список этих двух сессий?
who или w ; who -a для дополнительной информации.
Эти команды просто показывают все сеансы входа в систему на терминальном устройстве. Сеанс SSH будет на псевдо-терминале slave ( pts ), как показано в TTY столбце, но не все соединения pts являются сеансами SSH. Например, программы, которые создают псевдо-терминальное устройство, такое как xterm или, screen будут отображаться как pts . См. Разница между pts и tty для лучшего описания различных значений, найденных в TTY столбце. Кроме того, этот подход не покажет никому, кто вошел в сеанс SFTP, поскольку сеансы SFTP не являются сеансами входа в оболочку.
Я не знаю ни одного способа явно показать все сессии SSH. Вы можете вывести эту информацию, читая регистрационную информацию из utmp / wtmp через инструмент , как last , w или , who как я только что описал, или с помощью сетевых инструментов , таких как @sebelk , описанного в их ответе , чтобы найти открытые соединения TCP на порт 22 (или где ваш SSH демон (ы) слушает / слушает).
Третий подход, который вы можете использовать, - это анализ выходных данных журнала от демона SSH. В зависимости от дистрибутива вашей ОС, дистрибутива SSH, конфигурации и т. Д. Выходные данные журнала могут находиться в разных местах. На коробке RHEL 6 я нашел логи /var/log/sshd.log . На коробке RHEL 7, а также на коробке Arch Linux мне нужно было использовать journalctl -u sshd для просмотра журналов. Некоторые системы могут выводить журналы SSH в системный журнал. Ваши журналы могут быть в этих местах или в другом месте. Вот пример того, что вы можете увидеть:
Журналы показывают, когда сеансы открываются и закрываются, кому принадлежит сеанс, откуда пользователь подключается и многое другое. Тем не менее, вам придется много анализировать, если вы хотите получить это из простого, понятного человеку журнала событий в список активных в данный момент сеансов, и он все еще, вероятно, не будет точным, когда вы закончили синтаксический анализ, так как журналы на самом деле не содержат достаточно информации, чтобы определить, какие сеансы все еще активны - вы, по сути, просто догадываетесь. Единственное преимущество, которое вы получаете, используя эти журналы, состоит в том, что информация поступает непосредственно из SSHD, а не из вторичного источника, как другие методы.
Я рекомендую просто использовать w . В большинстве случаев это даст вам необходимую информацию.
В случае если сервер на Linux был взломан, возникает необходимость собрать информацию, например, получить время и IP адреса последних SSH сессий. Это может помочь не только установить источник опасности, но и, например, ответить на вопрос: был ли подобран пароль (или скомпрометирован сертификат) SSH либо злоумышленник воспользовался уязвимостью программного обеспечения.
К счастью, в дистрибутивах Linux хранятся журналы входа в систему, как по сети, так и для пользователей, который непосредственно сидят перед компьютером.
IP адрес предыдущего подключения по SSH
При каждом подключении по SSH выводится строка с IP, с которого было сделано предыдущее подключение, также показывается дата и время этого подключения:
История IP адресов SSH подключений
Кроме последней сессии, в системе хранится информация обо всех успешных входах за последние месяцы. Эта информация содержится в файле utmp / wtmp. На самом деле, файл utmp могут использовать различные программы (не только SSH), которые хотят сохранить информацию о входе пользователя.
Во многих дистрибутивах имеется файл /var/log/wtmp, куда программы записывают входы в систему. Проверить последние записи можно командой:
Все записи, в которых встречаются IP адреса — были сделаны по SSH подключению.
Записи без IP адресов — это входы пользователей, находящихся непосредственно перед компьютером.
Дополнительно вы можете проверить другие файлы журналов: /var/log/secure (на дистрибутивах на основе RH) или /var/log/auth.log (на дистрибутивах на основе Debian). В этих файлах служба sshd обычно хранит следы сделанных подключений, даже если они не стали результатом успешных входов (как это делают utmp/wtmp, которые сохраняют только информацию об успешных входах).
Служба sshd на IIRC Solaris (которая необязательно является sshd службой OpenSSH) хранит эту информацию в /var/adm/messages.
При этом необходимо помнить, что если атакующий получил доступ с правами суперпользователя, то есть скомпрометирован аккаунт root или другого пользователя с повышенными привилегиями, то все записи в файлах /var/log/wtmp или /var/adm/messages могут быть изменены атакующим. Для защиты от этого необходимо регулярно выгружать журналы в безопасное хранилище.
Как узнать, кто в настоящий момент подключён по SSH
Чтобы увидеть пользователей, вошедших в систему, используйте любую из следующих команд:
Следующие команды также покажут активные SSH сессии — у каждой из них различается набор выводимой информации, поэтому вы можете выбрать ту из них, которая вам больше всего подходит:
Читайте также: