Para saber qual IP executou um certo comando no linux usando o ssh

9

Existe um servidor que é acessado por muitos usuários usando o ssh. Eu estou tentando descobrir qual usuário executou um certo comando.

Eu posso saber a lista de usuários que atualmente acessam o servidor usando who Também vou saber a lista de comando executada usando history .

Mas como saber qual usuário executou um comando como cp file1.sh file2.sh no servidor? O usuário já executou o comando e desconectou-se

    
por Manu K Mohan 07.03.2013 / 13:55

4 respostas

3

Cada novo usuário que conecta gera uma nova sessão sshd com um PID específico. Você pode usar pstree para imprimir quais comandos são herdados de qual sshd session e, em seguida, verificar esse PID em /var/log/auth.log .

Exemplo (anonimizado): Eu entrei em um servidor remoto com 3 sessões simultâneas, com o mesmo usuário remoto. Agora quero descobrir de qual IP veio o cliente que executou o comando watch date .

$ pstree -p | grep watch
        |           |-sshd(15243)---sshd(15342)---bash(15343)---watch(15450)
$ sudo grep 15243 /var/log/auth.log
Mar  7 15:37:29 XXXXXXXXXX sshd[15243]: Accepted publickey for XXXXXXXXXX from 12.34.56.78 port 48218 ssh2
Mar  7 15:37:29 XXXXXXXXXX sshd[15243]: pam_unix(sshd:session): session opened for user XXXXXXXXXX by (uid=0)
Mar  7 15:37:44 XXXXXXXXXX sudo: XXXXXXXXXX : TTY=pts/7 ; PWD=/home/XXXXXXXXXX ; USER=root ; COMMAND=/bin/grep 15243 /var/log/auth.log

pstree -p mostra que o comando watch é herdado de sshd com PID 15243. grep ing para este PID em /var/auth/auth.log mostra que foi IP 12.34.56.78 que iniciou esta sessão. Portanto, este também é o usuário que iniciou watch .

Quanto a encontrar history especificamente para esse usuário, isso não pode ser feito pelo que eu vejo quando todos os usuários remotos estão usando o mesmo usuário SSH local. Além disso, pode ser facilmente falsificado / inactivado / etc, por isso não é realmente confiável. Se ele for salvo no arquivo de histórico, você poderá procurar o comando cp e olhar para trás no arquivo, mas se ele não estiver lá, não há muito o que fazer.

    
por 07.03.2013 / 15:51
1

Você pode adicionar essas duas linhas ao / etc / profile ou ao / etc / bashrc para registrar todos os comandos executados pelo bash:

whoami="$(whoami)@$(echo $SSH_CONNECTION | awk '{print $1}')"                                                                                                  
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local3.debug "$whoami [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

Isso usará o syslog para gravar cada comando executado junto com o usuário que fez e seu endereço IP em um formato como este:

Jan  8 08:43:49 xpto local3.debug root: [email protected] [29385]: ls -al [0]

Além disso, você pode adicionar a linha abaixo à configuração do seu syslog (/etc/syslog.conf) para redirecionar as mensagens local3 para um arquivo específico.

local3.*                                                /var/log/prompt.log
    
por 08.01.2014 / 12:58
0

Supondo que você esteja usando bash, history mostrará apenas o histórico de linha de comando SEU . Por padrão, ele lê ~/.bash_history para o histórico. Observe que isso pode ser alterado (embora altamente improvável) fazendo algo como HISTFILE=/home/userFoo/.my_alt_history .

Assumindo que você é root na caixa, você pode verificar todos os diretórios do usuário e ler seus históricos para ver quem está executando esse comando.

    
por 07.03.2013 / 14:07
0

Você pode usar snoopy para isso.

Você teria que configurá-lo para registrar a variável de ambiente personalizada (SSH_CLIENT) especificando IP =% {env: SSH_CLIENT} na definição do formato de mensagem de log (./configure flag ou configurável em snoopy.ini desde a versão 2.x. ).

Divulgação: mantenedor do Snoopy aqui.

    
por 06.11.2014 / 00:44