
В многопользовательской системе Linux каждый запущенный процесс всегда связан с конкретным пользователем, даже если он работает в фоне или запущен службой. Эта связь определяется через UID – числовой идентификатор учетной записи, от имени которой был выполнен процесс. Понимание того, какой пользователь инициировал запуск, позволяет точно анализировать нагрузку на систему, выявлять источники ошибок и контролировать доступ к ресурсам.
На практике задача определения пользователя процесса возникает при расследовании аномальной активности, проверке прав доступа, администрировании серверов и анализе безопасности. Например, при обнаружении неизвестного процесса по PID важно быстро установить, запущен ли он от имени обычного пользователя, системной учетной записи или root. Для этого используются стандартные утилиты и данные виртуальной файловой системы /proc.
Linux: как определить пользователя, запустившего процесс

Определение пользователя, запустившего процесс в Linux, базируется на анализе идентификаторов UID и EUID, присвоенных процессу ядром в момент запуска. Эти значения сохраняются на протяжении всего жизненного цикла процесса и используются системой для контроля доступа к файлам, сокетам и другим ресурсам. Ключевой ориентир – идентификатор процесса PID, по которому извлекается вся связанная информация.
Наиболее прямой способ – получение имени пользователя через стандартные утилиты, которые читают данные ядра и сопоставляют UID с записями из /etc/passwd. При анализе важно различать пользователя-владельца процесса и пользователя, под которым процесс выполняет системные вызовы в текущий момент. Это различие критично при работе с программами, использующими механизм setuid.
Для точного определения источника процесса применяются разные инструменты в зависимости от сценария: интерактивная диагностика, автоматизированный аудит или анализ из-под ограниченных прав. В каждом случае используются одни и те же системные данные, но с разной степенью детализации и удобства интерпретации.
| Источник данных | Что определяется | Практическое применение |
|---|---|---|
| ps -o user,pid,cmd | Имя пользователя-владельца процесса | Быстрая проверка запущенных процессов |
| /proc/[PID]/status | UID, EUID, GID процесса | Анализ прав и контекста выполнения |
| top / htop | Пользователь в реальном времени | Поиск процессов с высокой нагрузкой |
| systemctl status | Пользователь запуска сервиса | Аудит служб systemd |
При работе с системными демонами и сервисами необходимо учитывать, что многие из них запускаются от отдельных технических пользователей, не предназначенных для входа в систему. В таких случаях сопоставление UID с назначением учетной записи позволяет понять, является ли процесс штатным элементом системы или требует дополнительной проверки.
Определение владельца процесса по PID с помощью ps
Минимальный набор данных для определения владельца выглядит так:
ps -p 1234 -o user,pid,cmd
В колонке USER будет указано имя пользователя, от которого процесс был запущен. Этот параметр отражает реального владельца процесса, а не текущий эффективный UID, что важно при анализе стандартных пользовательских программ.
Если требуется получить более низкоуровневую информацию, полезно вывести числовой идентификатор:
ps -p 1234 -o uid,euid,user,cmd
Сравнение UID и EUID позволяет выявить процессы с изменённым контекстом выполнения, включая бинарные файлы с установленным битом setuid. Это критично при проверке прав доступа и разборе подозрительной активности.
Для анализа большого количества процессов одного пользователя применяется фильтрация по имени учетной записи:
ps -u username
Такой подход удобен при аудите сессий, поиске процессов, забытых после выхода пользователя, и проверке соблюдения политик запуска приложений на сервере.
Просмотр пользователя процесса через top и htop

Утилиты top и htop предназначены для интерактивного анализа процессов в реальном времени и позволяют сразу определить пользователя, от имени которого запущен каждый процесс. Источником данных служит ядро Linux, а отображаемое имя пользователя формируется на основе UID, сопоставленного с системными учетными записями.
- нажать f для настройки полей;
- включить поле USER или UID;
- подтвердить выбор клавишей Enter.
Для быстрого поиска процессов конкретного пользователя используется встроенная фильтрация:
- нажать u;
- ввести имя пользователя или UID;
- просмотреть список только связанных с ним процессов.
Утилита htop предоставляет более наглядный интерфейс и расширенные возможности сортировки. По умолчанию колонка USER отображается всегда, а переключение между процессами выполняется без перерисовки экрана.
- Запуск осуществляется командой htop.
- Сортировка по пользователю выполняется через F6.
- Фильтрация по имени учетной записи доступна по клавише F4.
Использование top и htop удобно при поиске процессов, создающих нагрузку, и быстром определении, какому пользователю принадлежит источник потребления ресурсов. Это особенно полезно на многопользовательских серверах и в средах с ограниченными правами доступа.
Получение UID и имени пользователя из /proc/[PID]/status
Для чтения информации достаточно открыть файл с правами, позволяющими доступ к процессу:
cat /proc/1234/status
Ключевая строка – Uid. Она содержит сразу четыре значения: реальный UID, эффективный UID, сохранённый UID и файловый UID. Первое число определяет пользователя, который запустил процесс изначально.
Пример строки:
Uid: 1000 1000 1000 1000
Полученный числовой UID необходимо сопоставить с именем пользователя. Это выполняется через системную базу учетных записей:
getent passwd 1000
Анализ /proc/[PID]/status позволяет выявлять процессы с изменённым контекстом выполнения, включая случаи, когда UID и EUID различаются. Это критично при проверке программ с повышенными привилегиями и разборе нестандартного поведения процессов.
Определение пользователя процесса с помощью команды stat
Команда stat позволяет определить пользователя процесса косвенным способом – через анализ владельца каталога /proc/[PID]. Каждый процесс в Linux представлен отдельным каталогом в файловой системе /proc, и его владелец соответствует реальному пользователю, запустившему процесс.
Для получения информации используется следующий вызов:
stat /proc/1234
Для преобразования UID в имя учетной записи применяется стандартный механизм сопоставления:
getent passwd UID
Следует учитывать, что доступ к каталогу /proc/[PID] может быть ограничен настройками безопасности, включая hidepid в /proc. В таких конфигурациях информация будет доступна только привилегированным пользователям.
Использование stat удобно для быстрого подтверждения владельца процесса и для сценариев автоматической проверки, где важна простота и предсказуемость результата.
Анализ процессов других пользователей с учётом прав доступа
Основные ограничения проявляются в следующих аспектах:
- отсутствие доступа к каталогам /proc/[PID], принадлежащим другим пользователям;
- скрытие аргументов командной строки и переменных окружения;
- невозможность просмотра расширенных полей через ps.
Для расширенного анализа применяются привилегированные режимы. Запуск команд с sudo позволяет получить данные обо всех процессах системы без исключений:
- sudo ps -eo user,pid,cmd – полный список процессов и их владельцев;
- sudo ls /proc/[PID] – проверка доступности информации о конкретном процессе.
Дополнительным фактором является параметр монтирования hidepid для файловой системы /proc. При значении hidepid=2 даже имена процессов других пользователей скрываются, и их идентификация возможна только с правами администратора.
В многопользовательских средах рекомендуется:
- проводить аудит процессов исключительно из-под учетной записи администратора;
- учитывать системных пользователей, используемых сервисами и демонами;
- сопоставлять UID процесса с назначением учетной записи перед принятием решений.
Определение пользователя для демонов и фоновых сервисов

Демоны и фоновые сервисы в Linux запускаются вне интерактивной пользовательской сессии, но каждый такой процесс всё равно имеет привязку к конкретной учетной записи. В большинстве случаев сервис стартует от имени root, после чего может понижать привилегии и продолжать работу под отдельным системным пользователем.
Для определения фактического владельца демона сначала анализируется сам процесс по PID. Команда ps -p PID -o user,uid,euid,cmd позволяет увидеть, под каким пользователем процесс был создан и какой контекст выполнения используется в текущий момент.
Если демон запущен как служба, его пользователь часто задаётся в конфигурации сервиса. Для сервисов, управляемых systemd, соответствующий параметр хранится в директиве User= файла юнита. Отсутствие этой директивы означает запуск от имени root.
Дополнительно следует учитывать системные учетные записи, такие как www-data, mysql, nobody или daemon. Они не предназначены для входа в систему, но используются для изоляции сервисов и ограничения доступа к ресурсам.
Для проверки, был ли процесс понижен в правах после запуска, важно сравнивать значения UID и EUID. Несовпадение указывает на смену контекста выполнения, что характерно для сетевых и серверных демонов.
Корректное определение пользователя фонового сервиса позволяет понять границы его доступа, выявить ошибки в конфигурации и оценить возможные риски при работе с привилегированными процессами.
Выявление пользователя, запустившего процесс через systemd

В системах с systemd процессы часто запускаются не напрямую пользователем, а через сервисные юниты. В этом случае определение пользователя требует анализа параметров службы и фактического контекста выполнения процесса. systemd хранит эти данные централизованно и предоставляет их через собственные команды.
Базовой точкой анализа является имя сервиса. Команда systemctl status имя_сервиса показывает основной PID и связанную с ним информацию, включая пользователя, если он задан явно. Однако для точного результата необходимо изучать свойства юнита.
Ключевую роль играет директива User=. Если она указана, процесс запускается от имени заданного пользователя. Если директива отсутствует, systemd использует root по умолчанию, даже если сам сервис затем понижает привилегии.
| Команда | Назначение | Что определить |
|---|---|---|
| systemctl status service | Просмотр состояния сервиса | PID и пользователь выполнения |
| systemctl show service | User, Group, MainPID | |
| ps -p MainPID | Проверка процесса | UID и EUID процесса |
Если сервис запущен в пользовательском пространстве, используется контекст systemd —user. В таком случае сервис привязан к конкретной пользовательской сессии, а его процессы принадлежат соответствующему UID без участия root.
Анализ через systemd позволяет точно определить, кто инициировал запуск процесса, на каком этапе заданы права и соответствует ли конфигурация сервиса требованиям безопасности.
Вопрос-ответ:
Почему ps показывает пользователя root, хотя сервис должен работать от отдельной учетной записи?
Чаще всего процесс действительно запускается от имени root, а смена пользователя происходит уже после старта внутри программы. В таком случае реальный UID будет root, а эффективный UID — системный пользователь сервиса. Это можно проверить через вывод UID и EUID командой ps или просмотром строки Uid в /proc/[PID]/status.
Можно ли определить пользователя процесса без прав администратора?
Да, но только для собственных процессов и части общесистемных. Ограничения задаются правами доступа и настройками /proc. Если включён hidepid, данные о чужих процессах будут скрыты. В этом случае имя пользователя и PID других процессов доступны только через sudo.
Чем отличается USER в top от UID в /proc/[PID]/status?
USER — это имя учетной записи, полученное путём сопоставления UID с /etc/passwd. UID в /proc — числовой идентификатор, который ядро использует напрямую. При нестандартных конфигурациях или удалённых учетных записях UID может существовать без корректного имени пользователя.
Как понять, под кем запущен процесс, если он уже завершился?
Если процесс завершён, данные из /proc недоступны. В таком случае используют журналы systemd или auditd. Для сервисов помогает журнал systemd, где сохраняется пользователь запуска и контекст юнита на момент старта.
Почему один и тот же сервис отображается под разными пользователями?
Это происходит, когда основной процесс и дочерние процессы работают под разными UID. systemd может запускать сервис от root, после чего он создаёт рабочие процессы от другого пользователя. Проверка каждого PID отдельно позволяет увидеть реальное распределение прав.
Почему ps и systemctl показывают разного пользователя для одного и того же процесса?
systemctl отображает пользователя, заданного в конфигурации сервиса, то есть учетную запись, от имени которой systemd запускает основной процесс. ps показывает владельца конкретного PID в текущий момент. Если сервис стартует от root и затем понижает привилегии, systemctl продолжит указывать пользователя из юнита, а ps покажет фактический UID процесса. Для точного понимания нужно сопоставлять MainPID сервиса и значения UID и EUID этого процесса.
