Existe uma maneira de saber quais outros usuários mudaram para este usuário?

4

Temos um sistema em que usamos diferentes contas do sistema para controlar diferentes ambientes. Meu fluxo padrão é assim:

$ ssh server.example.com
robin@server$ sudo su - env1-controller
env1-controller@server$ deploy

No entanto, pode haver várias pessoas fazendo a mesma coisa, mudando para o usuário env1-controller . E há potencial para nós pisarmos nos pés uns dos outros, tentando modificar os ambientes ao mesmo tempo.

Existe alguma maneira de verificar se alguém mais está usando o env1-controller user?

    
por Robin Winslow 23.11.2016 / 09:54

1 resposta

2

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 using ls -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êm grep para excluir o grep da saída.
  • grep da linha para todos os processos que contêm sudo .
  • grep do texto pts/<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.

    
por 23.11.2016 / 11:23