Сессия пользователя отображается в командах w и who, но TTY не найден.

Вопрос или проблема

На одном из моих серверов с Gentoo linux я заметил активную сессию пользователя, которая, кажется, зависла. Когда я запускаю команду w, вывод показывает следующее:

w
22:21:01 работает 80 дней,  1:15,  3 пользователя,  средняя загрузка: 0.21, 0.31, 0.38
ПОЛЬЗОВАТЕЛЬ     TTY        ВХОД@   ОТКАЗ   JCPU   PCPU ЧТО
root     pts/0     21:09    3.00s  0.03s  0.01s sshd: root [priv]         
root     pts/1     22:19    3.00s  0.04s  0.01s sudo su -
joe      pts/3     Wed09    0.00s  0.00s  0.06s sudo su - application_user

Пользователь joe по-видимому, зашел в систему на pts/3 в среду в 09:00. Однако, когда я запускаю ps -ft pts/3, я получаю следующее:

ps -ft pts/3
ошибка: TTY не найден

Я проверил процессы пользователя с помощью ps -u joe, текущие процессы, связанные с этим пользователем, отсутствуют.

ps -e -o pid,tty,user,cmd --sort=tty, и под pts/3 процессы не запущены, я вижу только мои pts/0 и pts/1 в списке.

Перечисленные открытые файлы с использованием lsof -u joe, также без результатов.

Вот /dev/pts

ls -l /dev/pts
всего 0
crw--w---- 1 root   tty  136, 0 Июн 30 22:41 0
crw--w---- 1 root   tty  136, 1 Июн 30 22:41 1
c--------- 1 root   root   5, 2 Апр 11 21:06 ptmx

Ни один из этих шагов не показывает процессов или сессий, связанных с joe или pts/3.

В ходе дальнейшего расследования (на основе команды w) я установил, что joe переключился на application_user (учетная запись приложения, используемая для запуска службы), а затем с этой учетной записи он подключился через ssh к другому серверу. В какой-то момент joe отключился (я предполагаю, что его VPN остановился, поскольку существует временное ограничение для каждого соединения), но процессы, которые он запустил, не завершились полностью.

Список всех процессов “sudo su – application_user”

ps -ef | grep "sudo su - application_user"  (это команда, указанная как последняя команда пользователем joe в выводе w)

root     26881     1  0 Июн26 ?        00:00:00 sudo su - application_user
root     26989 26881  0 Июн26 ?        00:00:00 sudo su - application_user
root     26990 26989  0 Июн26 ?        00:00:00 su - application_user

ps -ef | grep 26990
root     26990 26989  0 Июн26 ?        00:00:00 su - application_user
application_user  26992 26990  0 Июн26 ?        00:00:00 -bash

ps -ef | grep 26992
application_user  26992 26990  0 Июн26 ?        00:00:00 -bash
application_user  30391 26992  0 Июн26 ?        00:00:00 ssh foo@remote_server_02

Если я убью эти процессы (ssh, bash…), пользователь joe будет выведен из системы.

Мой вопрос: Существует ли лучший (и более предсказуемый) способ определить, какие процессы запущены пользователем joe? Моя процедура выше основана на поиске последней команды, запущенной пользователем joe, но между joe и первым “sudo su – application_user”, который запущен root под идентификатором родительского процесса 1, нет прямой связи (ни по имени пользователя, ни по pts/3).

И второй вопрос: почему это происходит, почему команда w и who показывает, что joe вошел в систему, если нет процессов или pts, которые им используются?

.

Ответ или решение

Вопрос о сессии пользователя, показываемой командами w и who, но при этом отсутствующей в TTY, требует глубокого анализа устройства процессов и управления сеансами в Linux. Рассмотрим вашу ситуацию более подробно.

Ситуационная справка

На вашем сервере Gentoo вы наблюдаете сессию пользователя joe, которая, согласно выводу команды w, активна на pts/3 с момента среды в 09:00. При этом попытка использования команды ps -ft pts/3 приводит к ошибке: "TTY could not be found", что указывает на несуществующую или закрытую терминальную сессию.

Практически все проверки, которые вы провели, не выявили активных процессов, связанных с пользователем joe на pts/3, что вызывает несколько вопросов.

Причины проблемы

  1. Зависшие сессии: Судя по вашему описанию, причиной проблемы может быть зависшая сессия, возникшая в результате нестабильного соединения, возможно, из-за временной потери VPN-сигнала. Когда соединение прерывается, но процессы продолжают существовать, система может показывать пользователя как активного, даже если он фактически не подключен.

  2. Проблема с TTY: Точки монтирования для виртуальных терминалов (как pts/) управляются через devpts. Если терминальный пул, из которого происходит pts, был освобожден (или потерян), но процессы все еще существуют, система может сообщать, что TTY отсутствует, хотя процессы пользователей лежат в памяти.

Рекомендации по определению активных процессов

Для более детального анализа активных процессов пользователя joe я рекомендую использовать несколько способов:

  1. Проверка по родителям процессов: Используйте команду pstree для наглядного представления древовидной структуры процессов. Это позволит увидеть все дочерние процессы, относящиеся к sudo su - application_user, что упрощает дальнейшие действия.

    pstree -pu | grep joe
  2. Применение lsof к процессам: Использование lsof в сочетании с идентификатором процесса (PID) может помочь понять, какие файловые дескрипторы открыты и какие соединения активны.

    lsof -p <PID>
  3. Использование инструмента pgrep: Инструмент pgrep может помочь фильтровать процессы по именам или другим критериям, включая родительский процесс (PPID).

    pgrep -af "sudo su - application_user"

Почему w и who показывают пользователя как активного?

Команды w и who опираются на информацию о текущих сеансах, которая может храниться даже после завершения процессов, особенно в случае некорректного отсоединения. Эти команды проверяют записи в системных таблицах, которые могут указывать, что сессия все еще активна, если система не обновила данные после отключения по причинам, связанным с состоянием ресурса pts.

Заключение

Ваша проблема с отображением пользователя joe в системных утилитах, несмотря на отсутствие активных процессов, может быть результатом зависшей сессии или некорректного завершения сеанса. Для лучшего отслеживания процессов в будущем стоит рассмотреть возможности улучшенной мониторинга и управления сессиями, а также применение дополнительных инструментов для анализа.

Устранение таких проблем требует внимательного анализа и проверки, поэтому всегда стоит быть на чеку и отслеживать активные соединения и процессы, чтобы избежать подобных конфликтов.

Оцените материал
Добавить комментарий

Капча загружается...