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 -auxpara obter uma lista de todos os processos em execução, incluindo algumas informações adicionais. -
greptodas as linhas que não contêmgreppara excluir o grep da saída. -
grepda linha para todos os processos que contêmsudo. -
grepdo textopts/<number>dessas linhas. -
grepapenas o número. - Use
lspara 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.