Я знаю, что вижу список зарегистрированных пользователей с помощью w
или аналогичных команд. Я хочу знать, кто из вошедших в систему пользователей в настоящее время имеет доступ с правами root, т.е. сделал su
чтобы стать пользователем root. Вывод w
просто показывает первое (реальное) имя пользователя, а не root, если пользователь выполнил su
.
3 ответа
На самом деле w
отображает только логины. Если пользователь делает su
для другой программы (оболочки), он не будет отображаться, потому что это не оболочка входа в систему.
Основная проблема заключается в том, что вы пытаетесь сопоставить дату, которая не была предназначена для корреляции. Вы должны получить информацию из нескольких источников, а затем сделать перекрестную ссылку на нее.
Чтобы получить список всех людей, которые использовали su
, вы можете проверить /var/log/auth
(в зависимости от вашего дистрибутива). Вы увидите следующее сообщение:
May 1 09:47:32 frisbee su[7000]: Successful su for root by mtak
May 1 09:47:32 frisbee su[7000]: + /dev/pts/5 mtak:root
Вы можете проверить, какие pts'ы все еще активны, проверив, активны ли псевдотерминалы с помощью ls /dev/pts
(хотя вам придется делать это быстро, потому что pts'es повторно используются). Вы также можете использовать время модификации псевдотерминала и сопоставить его со временем в файле auth.log
. Вы можете найти время модификации очков с помощью stat /dev/pts/
.
По общему признанию, это не идеально, но я думаю, что с некоторыми сценариями вы сможете получить список пользователей, которые подали в суд.
Вы можете использовать ps
чтобы проверить, какой пользователь запускает su
процесс.
ps aux | grep ' [s]u'
Это должно дать вам список имен пользователей, которые запускают 'su -' для получения прав root:
for ppid in $(for pid in $(pgrep -u root -f "^su -"); do ps lh $pid | awk '{print $4;}'; done); do ps uh $ppid | awk '{print $1;}'; done | uniq