Se todos usarem sudo, você pode considerar usar algo nas linhas ps -ax | grep sudo
para ver quem está usando sudo
ou env1-controller
e, ao executar who
, você pode ter uma ideia de quem está realmente executando.
Como exemplo na minha máquina da minha máquina, a saída de ps -ax | grep sudo
seria assim:
24324 pts/0 S 0:00 sudo su <user>
A primeira entrada é o PID, o segundo o TTY, a terceira vez e o último comando. Se você usa who
, você obtém uma lista de usuários atualmente logados e qual TTY eles estão usando. Poderia ser assim:
<user> pts/0 Nov 23 10:24 (<IP>)
<user> pts/2 Nov 23 10:25 (<IP>)
Então, através dessa combinação, você sabe que o sudo
está conectado a qualquer usuário que esteja usando pts/0
. Essa seria a maneira manual de verificar.
Meu palpite é que é possível combinar essa informação, mas minhas habilidades bash não são boas o suficiente para postar a resposta sobre como fazer isso.
A solução final usada pelo autor original da pergunta era / é:
I actually ended up using grep to extract the exact TTY numbers,
ps -aux | grep -v grep | grep "sudo su - whoami" | grep -E -o 'pts/[0-9]+' | grep -E -o '[0-9]+'
, and then usingls -l /dev/pts/${id}
to determine who owned the TTY.
O que isto faz é:
- Use
ps -aux
para obter uma lista de todos os processos em execução, incluindo algumas informações adicionais. -
grep
todas as linhas que não contêmgrep
para excluir o grep da saída. -
grep
da linha para todos os processos que contêmsudo
. -
grep
do textopts/<number>
dessas linhas. -
grep
apenas o número. - Use
ls
para verificar quem é o proprietário desse TTY.
Usando essas informações, você pode tentar fazer isso (se quiser usar quem):
who | grep $(ps -ax | grep -v grep | grep "sudo su - whoami" | grep -E -o 'pts/[0-9]+')
Mas isso só funcionaria enquanto houvesse um único resultado, porque a saída de $()
teria várias linhas. Como você pode ver, estou pulando o u
do ps
, pois as informações adicionadas não são necessárias para o script básico funcionar.