Если все используют sudo, вы можете рассмотреть возможность использования чего-то в этом направлении, ps -ax | grep sudo
чтобы увидеть, кто в данный момент использует sudo
или, env1-controller
и, запустив, who
вы можете получить представление о том, кто на самом деле его запускает.
В качестве примера на моей машине с моей машины вывод ps -ax | grep sudo
будет выглядеть так:
24324 pts/0 S 0:00 sudo su <user>
Первая запись - это PID, вторая - TTY, третий раз и последняя команда. Если вы используете, who
вы получите список вошедших в систему пользователей, и какой TTY они используют. Это может выглядеть так:
<user> pts/0 Nov 23 10:24 (<IP>) <user> pts/2 Nov 23 10:25 (<IP>)
Таким образом, благодаря этой комбинации вы знаете, что sudo
это соединение с тем, что использует пользователь pts/0
. Это будет ручной способ проверки.
Я предполагаю, что можно объединить эту информацию, но мои навыки bash не достаточно хороши, чтобы просто опубликовать ответ о том, как это сделать.
Окончательное решение, использованное первоначальным автором вопроса, было:
Я фактически использовал grep для извлечения точных чисел TTY
ps -aux | grep -v grep | grep "sudo su - whoami" | grep -E -o 'pts/[0-9]+' | grep -E -o '[0-9]+'
, а затем использовал,ls -l /dev/pts/$
чтобы определить, кому принадлежал TTY.
Что это делает:
- Используйте
ps -aux
для получения списка всех запущенных процессов, включая некоторую дополнительную информацию. grep
все строки, которые не содержатgrep
, чтобы исключить grep из вывода.grep
строка для всех процессов, которые содержатsudo
.grep
текстpts/<number>
из этих строк.grep
просто номер.- Используйте,
ls
чтобы проверить, кто является владельцем этого TTY.
Используя эту информацию, вы можете попытаться сделать это (если хотите использовать who):
who | grep $(ps -ax | grep -v grep | grep "sudo su - whoami" | grep -E -o 'pts/[0-9]+')
Но это будет работать только до тех пор, пока есть один результат, потому что выходные данные $()
будут иметь несколько строк. Как вы можете видеть, я пропускаю u
из, ps
поскольку добавленная информация не нужна для работы основного скрипта.