Como detectar se a sessão SSH remota é raiz?

1

Eu sei que posso ver a lista de usuários logados com w ou comandos semelhantes. Eu quero saber qual dos usuários logados atualmente tem acesso root, ou seja, fez su se tornar root. A saída de w mostra apenas o primeiro nome de usuário (real), não root, se o usuário tiver feito su .

    
por Amir Ali Akbari 01.05.2014 / 09:19

3 respostas

3

De fato, w exibe apenas os shells de login. Se um usuário usar su em outro programa (shell), ele não será exibido porque não é um shell de login.

O principal problema aqui é que você está tentando correlacionar a data que não foi projetada para ser correlacionada. Você precisa obter informações de várias fontes e fazer referência cruzada.

Para obter uma lista de todas as pessoas que usaram su , você pode verificar /var/log/auth (dependendo da sua distribuição). Você verá a seguinte mensagem:

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

Você pode verificar quais pts'es ainda estão ativos verificando se os pseudo-terminais ainda estão ativos com ls /dev/pts (você teria que fazer isso rapidamente, porque os pts são reutilizados). Você também pode usar o tempo de modificação do pseudo-terminal e fazer referência cruzada com a hora no arquivo auth.log . Você pode encontrar o tempo de modificação dos pts com stat /dev/pts/ .

Evidentemente, não é perfeito, mas acho que com alguns scripts você seria capaz de obter uma lista de usuários sued.

    
por 01.05.2014 / 09:53
1

Você pode usar ps para verificar qual usuário está executando um processo su .

ps aux | grep ' [s]u'
    
por 01.05.2014 / 09:55
1

Isso deve fornecer uma lista de nomes de usuários que estão executando 'su -' como 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
    
por 01.05.2014 / 21:18

Tags