Para saber qual IP executou um determinado comando no linux usando ssh


10

Há um servidor que é acessado por muitos usuários usando o ssh. Estou tentando descobrir qual usuário executou um determinado comando.

Eu posso conhecer a lista de usuários atualmente acessando o servidor usando. who Também conhecerei a lista de comandos executados usando history.

Mas como saber qual usuário executou um comando como cp file1.sh file2.shno servidor? O usuário já executou o comando e efetuou logout

Respostas:


4

Cada novo usuário que se conectar gera uma nova sshdsessão com um PID específico. Você pode usar pstreepara imprimir quais comandos são herdados de qual sshdsessão e depois fazer a verificação cruzada desse PID /var/log/auth.log.

Exemplo (anonimizado): Entrei em um servidor remoto com 3 sessões simultâneas, com o mesmo usuário remoto. Agora eu quero descobrir de qual IP o cliente veio 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 -pmostra que o watchcomando é herdado do sshdPID 15243. greping para esse PID /var/auth/auth.logmostra que foi o IP 12.34.56.78 que iniciou esta sessão. Portanto, este também é o usuário que iniciou watch.

Quanto a encontrar historyespecificamente esse usuário, isso não pode ser feito pelo que posso ver quando todos os usuários remotos estão usando o mesmo usuário SSH local. Além disso, ele pode ser facilmente falsificado / inativado / etc., Portanto, não é realmente confiável. Se ele estiver salvo no arquivo de histórico, você poderá procurar o cpcomando e retroceder no arquivo, mas se não estiver lá, não há muito o que fazer.


Ele diz este erro grep: /var/log/auth.log: No such file or directory:-(
Manu K Mohan

@ManuKMohan: Você não declarou em qual sistema está. Sob RHEL / Fedora / Scientific Linux / etc., O arquivo relevante é /var/log/secure.
Daniel Andersson

Anderson Estou usando o Ubuntu
Manu K Mohan

@ManuKMohan: Se /var/log/auth.log.1, etc., existir, tente-os para ver se eles contêm as informações. Depois, reinicie rsyslog( sudo service rsyslog restart) e veja se ele começa a preencher auth.log, o que já deveria estar fazendo. O SSHD efetua logon /var/log/auth.logpor padrão no Ubuntu , portanto, a menos que você tenha alterado explicitamente os destinos de log via /etc/ssh/ssd_configou /etc/syslog.conf(você pode verificar em qual arquivo o authnível é registrado aqui), ele deve estar lá. Caso contrário: algo está acontecendo :-).
Daniel Andersson

1

Você pode adicionar essas duas linhas ao / etc / profile ou / 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 registrar todos os comandos executados junto com o usuário que fez e o endereço IP em um formato como este:

Jan  8 08:43:49 xpto local3.debug root: root@192.168.x.y [29385]: ls -al [0]

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

local3.*                                                /var/log/prompt.log

Agora é syslog-ngcomo melhoria e o arquivo de configuração é /etc/syslog-ng/syslog-ng.conf .
Timo

1

Você pode usar snoopy para isso.

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

Divulgação: mantenedor do Snoopy aqui.


0

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

Supondo que você seja root na caixa, você pode verificar todos os diretórios do usuário e ler o histórico deles para ver quem está executando esse comando.


Ah, e se eles estiverem sendo nefastos, eles poderiam facilmente apagar esse comando de sua história. Se eles estão ativamente na caixa de executar o comando, você pode vê-lo comps -aux | grep "cp file1.sh file2.sh"

Todos os usuários estão acessando remotamente o mesmo nome de usuário do servidor usando ssh. Quero saber qual IP acessou esse usuário e executou o comando.
Manu K Mohan

Não é uma boa política ter muitos usuários compartilhando um nome de usuário e senha.
Pjc50
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.