Visualização ao vivo de comandos do shell do Linux executados por outro usuário?


27

É possível que o usuário root no Linux tenha uma visualização em tempo real (ou quase em tempo real) dos comandos do shell sendo executados por outro usuário conectado através de um terminal ou SSH? Obviamente, eles são armazenados em .bash_history, mas isso só é salvo quando o usuário efetua logoff e também pode ser desativado.

Edit: idealmente algo que pode ser facilmente ligado e desligado.


ttyrpldparece bom. recomendado nesta pergunta. serverfault.com/questions/40011/…
hayalci

Respostas:


16

como root, você pode substituir o shell por um script de wrapper simples que registra seus comandos antes de passá-los para o shell real. Isso só funcionaria antes do login.


20
Fizemos isso para monitorar uma conta invadida em um empregador anterior. Criado "/ bin / bash" (observe o espaço) que era um wrapper em torno do comando de script. Trabalhou como um encanto :)
Commander Keen

Muito esperto! +1
EMP

9

Use o sniffy se quiser entrar na sessão do usuário ou screen -xse tiver cooperação.

Lembre-se de que a espionagem de seus usuários pode estar sujeita a regulamentos ou até mesmo ser ilegal, dependendo da legislação local.


7

Mudar o shell é muito trivial para contornar, corrigir o próprio shell é melhor, mas você precisa corrigir todos os shells. Nosso cracker favorito usa isso, como bônus, ele não se incomoda em desativar o bash_history.

ssh host /bin/sh -i  

O Snoopy é um invólucro em torno das funções exec e registra qualquer binário externo que é executado (não embutido no shell)

A sugestão de @David Schmitt, sniffy, usa um método melhor, ele usa o pseudoterminal.

O ttysnoop usa o mesmo método, mas não é mantido. (Eu provavelmente tive problemas para fazer o log de conexões ssh, não me lembro)

Você pode tentar fazer o patch do ssh para registrar uma sessão, mas esse patch é antigo .

pseudópode e rootsh podem ser usados ​​para registrar sudos legítimos. E shwatcr é outra coisa para monitorar logins.


O que exatamente ssh host /bin/sh -ideveria fazer?
9788 Mike Pennington

+1 para snoopy, não perfeito, mas fizemos o que precisávamos.
Skin6

4

Se você estiver cooperando, poderá usar a tela GNU entre dois usuários - faça com que um estabeleça a sessão de tela e faça com que o outro participe screen -x.

Se você deseja que o root "espie" outros usuários sem o conhecimento deles, a melhor e mais eficiente solução pode ser o software / hardware do keylogger.


4

O Sysdig é uma ferramenta poderosa de exploração no nível do sistema - é isso que você deseja;)

exemplo:

sysdig -i spy_users

Categoria: Segurança

spy_users Exibir atividade interativa do usuário

lista todos os comandos que os usuários iniciam interativamente (por exemplo, do bash) e todos os diretórios que os usuários visitam


2

Você pode tentar o patch bash-BOFH. Procure pelo patch.


1

Eu escrevi um método para registrar todos os comandos / bash 'bash' em um servidor de arquivo de texto ou 'syslog' sem usar um patch ou uma ferramenta executável especial.

É muito fácil de implantar, pois é um shellscript simples que precisa ser chamado uma vez na inicialização do 'bash'.

Veja o método aqui: http://blog.pointsoftware.ch/index.php/howto-bash-audit-command-logger


Bem-vindo à falha do servidor! Nós realmente preferimos que as respostas tenham conteúdo, não ponteiros para o conteúdo. Isso garante que a resposta permaneça disponível mesmo se o link ficar inoperante. Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
user9517 suporta GoFundMonica

Bem-vindo à falha do servidor! Por favor, leia o nosso FAQ em particular Maio I promover produtos ou sites que eu sou filiado a aqui? .
user9517 suporta GoFundMonica

1
function spy() { 
   ptsnum=`ps awfux | grep pt[s]\/"$1" | awk '/bas[h]/{print $2}'` ; 
   /usr/bin/strace -s 1000 -t -f -p $ptsnum 2>&1 3>&1 \
        | grep -Poi 'write\(...\"[[:print:]]{1,2}\"[.][.][.][,]..\)' ; 
}

[436] klikevil@epiphany ~ $ w<br>
 09:36:43 up 12:06,  6 users,  load average: 0.46, 0.29, 0.20<br>
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT<br>
klikevil pts/0    75.125.126.8     23:05    2:19m 10:33   0.18s cmd                                      <br>
klikevil pts/1    75.125.126.8     00:18    6:50m  0.06s  0.04s sshd: klikevil [priv]<br>
klikevil tty7     :0               09:02   17:07m  2:02   0.32s x-session-manager<br>
klikevil pts/2    :0.0             09:03    3:30   0.08s  0.08s bash<br>
klikevil pts/3    :0.0             09:03    0.00s  0.76s  0.00s w<br>
klikevil pts/4    :0.0             09:06    3:13   0.46s  0.00s /bin/sh /usr/bin/thunder<br>
[437] klikevil@epiphany ~ $ spy 2<br>
write(2, "e"..., 1)<br>
write(2, "c"..., 1)<br>
write(2, "h"..., 1)<br>
write(2, "o"..., 1)<br>
write(2, " "..., 1)<br>
write(2, "s"..., 1)<br>
write(2, "u"..., 1)<br>
write(2, "p"..., 1)<br>
write(2, " "..., 1)<br>
write(2, "d"..., 1)<br>
write(2, "o"..., 1)<br>
write(2, "g"..., 1)<br>
write(2, "\n"..., 1)<br>
^C<br>

Parece funcionar muito bem se você não se importa em classificar várias quebras de linha.


1

O Snoopy é destinado ao log de comandos leve.

Se você deseja visualizar ao vivo os comandos executados no seu sistema, pode ser isso. Aviso: o snoopy não é uma solução de auditoria adequada e pode ser facilmente contornado.

No entanto, se você deseja ver todos os caracteres digitados no terminal, precisará usar outra ferramenta.

Divulgação: Eu sou atual mantenedor do Snoopy.


-3

tente esta exportação HISTTIMEFORMAT = "% T" execute alguns comandos e "histórico" depois ...

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.