Как посмотреть активные сессии других пользователей сервера
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Отличный вопрос! Проверка активных сессий других пользователей — одна из стандартных задач системного администратора и DevOps-инженера для мониторинга активности, выявления подозрительных действий или просто понимания текущей нагрузки на сервер. Существует несколько классических способов сделать это в Linux-системах.
Основные команды и утилиты
1. w (who & what)
Самая простая и информативная команда. Она показывает: кто в системе, откуда подключился, когда вошел, время простоя, общую нагрузку на систему и какую команду выполняет в данный момент.
$ w
23:15:03 up 45 days, 8:22, 3 users, load average: 0.08, 0.03, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
alex pts/0 192.168.1.100 22:30 5.00s 0.05s 0.00s sshd: alex [priv]
svc_user :0 :0 10Jan23 ?xdm? 45:22m 0.01s /usr/lib/gdm3/gdm-x-session
ivan pts/1 10.20.30.40 23:10 1.00s 0.02s 0.00s w
- USER: Имя пользователя.
- TTY: Терминал.
pts/— это pseudo-terminal (обычно SSH-сессия),:0— графическая сессия. - FROM: IP-адрес или хост, с которого выполнено подключение.
- WHAT: Текущая выполняемая команда (очень полезно!).
2. who и who -a
Показывает список пользователей, вошедших в систему, их терминалы и время входа. Ключ -a дает расширенную информацию, аналогичную той, что выводит w.
$ who
alex pts/0 2024-03-15 22:30 (192.168.1.100)
ivan pts/1 2024-03-15 23:10 (10.20.30.40)
svc_user :0 2024-01-10 10:23 (:0)
$ who -a
system boot 2024-01-30 14:53
run-level 5 2024-01-30 14:53
svc_user + :0 2024-01-10 10:23 ? 3578 (:0)
alex + pts/0 2024-03-15 22:30 . 11245 (192.168.1.100)
LOGIN tty1 2024-01-30 14:53 1154 id=tty1
Знак + указывает на сессию, которая позволяет запись (т.е. интерактивный логин).
3. last и lastlog
Команда last показывает историю входов в систему (читает /var/log/wtmp). Полезно для аудита. lastlog выводит дату последнего входа для всех пользователей системы.
# Показать последние 5 активных входов
$ last -5
alex pts/1 10.20.30.40 Fri Mar 15 23:10 still logged in
alex pts/0 192.168.1.100 Fri Mar 15 22:30 still logged in
svc_user :0 :0 Wed Jan 10 10:23 still logged in
reboot system boot 5.15.0-94-generi Wed Jan 10 10:22 still running
# Показать последний логин всех пользователей
$ lastlog | head -5
Username Port From Latest
root **Never logged in**
alex pts/1 10.20.30.40 Fri Mar 15 23:10:22 +0300 2024
svc_user :0 Wed Jan 10 10:23:15 +0300 2024
Мониторинг процессов и сессий
4. ps и pstree с фильтрацией
Пользовательские сессии часто связаны с процессами sshd (для SSH) или login. Можно отфильтровать процессы по пользователю или имени.
# Показать все процессы, связанные с SSH демоном
$ ps -ef | grep sshd
root 11234 1 0 Jan30 ? 00:00:12 /usr/sbin/sshd -D
root 11245 11234 0 22:30 ? 00:00:00 sshd: alex [priv]
alex 11247 11245 0 22:30 ? 00:00:00 sshd: alex@pts/0
root 11310 11234 0 23:10 ? 00:00:00 sshd: ivan [priv]
ivan 11312 11310 0 23:10 ? 00:00:00 sshd: ivan@pts/1
# Показать дерево процессов (очень наглядно видна связь сессий)
$ pstree -a -p | grep -A 2 sshd
5. Просмотр с использованием loginctl (для систем с Systemd)
На современных дистрибутивах, использующих systemd, менеджер сессий logind отслеживает все пользовательские сессии.
$ loginctl list-sessions
SESSION UID USER SEAT TTY
1 1000 alex seat0 pts/0
2 1001 ivan seat0 pts/1
c1 1002 svc_user seat0
$ loginctl session-status 1
1 - alex (1000)
Since: Fri 2024-03-15 22:30:15 MSK; 45min ago
Leader: 11247 (sshd)
TTY: pts/0
Remote: yes (192.168.1.100)
Service: sshd; type tty; class user
... (много другой технической информации)
Работа с сетевыми подключениями
6. netstat или ss (Socket Statistics)
Эти команды показывают активные сетевые подключения. SSH-сессии используют порт 22.
# Показать SSH соединения
$ sudo netstat -tnpa | grep :22
tcp 0 0 10.0.0.10:22 192.168.1.100:54321 ESTABLISHED 11245/sshd: alex [p
tcp 0 0 10.0.0.10:22 10.20.30.40:12345 ESTABLISHED 11310/sshd: ivan [p
# Более современная альтернатива - команда `ss`
$ sudo ss -tpn src :22
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 10.0.0.10:22 192.168.1.100:54321 users:(("sshd",pid=11245,fd=3))
ESTAB 0 0 10.0.0.10:22 10.20.30.40:12345 users:(("sshd",pid=11310,fd=3))
7. Прямой просмотр псевдотерминалов (ptys)
Большинство интерактивных сессий (SSH, terminal emulator) работает через псевдотерминалы (/dev/pts/*). Их владельцы — это текущие активные пользователи.
$ ls -la /dev/pts/
total 0
crw--w---- 1 alex tty 136, 0 Mar 15 22:30 0 # Сессия пользователя alex
crw--w---- 1 ivan tty 136, 1 Mar 15 23:10 1 # Сессия пользователя ivan
Практический совет и предостережение
В реальной работе я чаще всего пользуюсь связкой w для быстрого взгляда и ps auxf | grep sshd или ss -tpn src :22, чтобы понять, какие конкретно процессы и сетевые соединения отвечают за сессии.
Важное предостережение: просмотр сессий других пользователей, особенно с помощью команд, требующих sudo (как ss или ps с детальным выводом), — это операция, затрагивающая безопасность и приватность. Она должна выполняться только в рамках служебных обязанностей (мониторинг, расследование инцидентов) и, желательно, в соответствии с политикой безопасности компании. Все эти команды оставляют записи в системных логах (/var/log/auth.log, /var/log/secure), поэтому ваши действия также могут быть проаудитированы.