Ferramenta para assistir outros ttys para linux?

4

Os sistemas BSD têm uma ferramenta para assistir para espionar outros ttys:

Have you ever had a user login to your box and then ask you for help? Or have you ever been curious as to what your users are doing on your system? The watch(8) utility will let you snoop another tty, allowing you to see what your other users are doing and even interact with them. It’s a must-have utility for every network administrator.

Infelizmente watch é uma fera diferente no linux.

Até agora eu tenho:

  • ttysnoop requer a modificação de / etc / inittab que é uma dor
  • conspy não conseguiu que funcionasse até agora
  • peekfd funciona, mas apenas de um jeito (você pode ver a entrada do usuário, mas não a saída)
  • screen é legal, claro, mas o usuário precisa usar a tela ...

Não existe um bom equivalente para o Linux?

    
por lemonsqueeze 05.05.2016 / 19:53

2 respostas

1

Você pode especificar vários descritores de arquivo para peekfd .

por exemplo,

peekfd -n -8 -d -c 24184 0 1 2

irá espionar stdin, stdout e stderr de pid 24184.

A opção -c também será anexada a qualquer processo filho. Isso é necessário para ver a saída deles (por exemplo, ver a saída de ls que foi executada em um processo de shell snooped-on)

Estranhamente, acho que sempre se conecta com êxito ao filho (não importa qual processo filho eu execute no snooped-on tty - ls , uname , /bin/echo em oposição ao% co_de interno %) mas também sempre imprime uma mensagem de erro echo (e o "pid" é sempre -38).

Error attaching to pid -38 diz:

DIAGNOSTICS

The following diagnostics may be issued on stderr:

  Error attaching to pid ...

An unknown error occurred while attempted to attach to a process.. you may need to be root.

Parece um erro para mim - estou executando man peekfd como root e sempre imprime a mensagem de erro, sempre com o mesmo falso ( peekfd ) PID.

CUIDADO: a página man também diz:

BUGS

Probably lots. Don't be surprised if the process you are monitoring dies.

    
por 06.05.2016 / 05:24
1

SystemTap

3 linhas, problema resolvido, o SystemTap rege completamente:

Instale o SystemTap, crie o arquivo ptysnoop :

#!/usr/bin/stap

probe kernel.function("pty_write") {
    if (kernel_string($tty->name) == @1) {
            printf("%s", kernel_string_n($buf, $c))
    }
}

Torne-o executável. Agora, veja /dev/pts/6 apenas:

$ sudo ptysnoop pts6

Editar: outras soluções encontradas anteriormente

ttyrpld parece bastante sólido:

ttyrpld is a multi-os kernel-level tty logger (key and screenlogger for ttys) with (a)synchronous replay support. It supports most tty types, including vc, bsd and unix98-style ptys (xterm/ssh), serial, isdn, etc. Being implemented within the kernel makes it unavoidable for the default user. It runs with no overhead if the logging daemon is not active.

Você precisa de um módulo do kernel para isso.

Eu terminou comecei a escrever uma pequena ferramenta ttylogger baseada em strace que funciona bem para as minhas necessidades . Tudo que você precisa é perl e strace:

$ sudo ttylogger pid

Use isso com o pid do shell do usuário para despejar a saída de todos os comandos subseqüentes.
Veja readme para detalhes.

    
por 06.05.2016 / 07:45