Rastrear logins feitos através de shells não interativos

3

Trata-se de esta questão .

Eu queria fazer o login toda vez que alguém fazia login via ansible.

Eu coloquei meu script no arquivo ~/.bash_profile . Aqui está o roteiro,

#!/bin/bash

now=$(date +"%T")
echo "$USER logged in at: $now" >> /home/alphauser/ssh-entries.log

Eu coloquei isso no final de ~/.bash_profile ,

bash ~/ssh-login-entry.sh

No entanto, ansible usa o shell não interativo, então meu script não foi executado quando eu entrei via ansible pois ~/.bash_profile é executado somente quando um novo shell interativo é iniciado.

Depois colei isso no final do arquivo .bashrc , mas ainda assim não funcionou.

Como posso registrar entradas quando alguém faz login através de um shell não interativo? Quero dizer, onde devo colocar este script para que ele seja executado toda vez que alguém efetua login via ansible?

Espero que a pergunta esteja clara.

    
por luv.preet 18.07.2017 / 13:32

2 respostas

1

Quando o bash é iniciado como um shell não interativo, ele não lê nenhum arquivo de inicialização. Em vez disso, ele procura a variável de ambiente $BASH_ENV e, se isso apontar para um arquivo, lê o que quer que ele indique. Isso é explicado na seção INVOCATION de man bash :

When bash is started non-interactively, to run a shell script, for example, it looks for the variable BASH_ENV in the environment, expands its value if it appears there, and uses the expanded value as the name of a file to read and execute. Bash behaves as if the following com‐ mand were executed:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi    

but the value of the PATH variable is not used to search for the file‐
name.

Portanto, se você definir BASH_ENV para apontar para um arquivo que contenha seu comando, ele deverá funcionar:

  1. Edite /etc/environment para definir BASH_ENV para todos os usuários. Abra o arquivo no seu editor favorito e adicione esta linha:

    export BASH_ENV="/path/to/your/file"
    
  2. Crie /path/to/your/file com o seguinte conteúdo:

    printf '%s logged in at: %s\n' "$USER" "$(date +'%T')" >> /home/alphauser/ssh-entries.log
    

Agora tente fazer login novamente via ansible.

Importante : não tenho experiência com ansible, por isso não sei ao certo como você faz login usando-o. Isso pressupõe que você primeiro inicie um shell de logon normal e, em seguida, execute o comando ansible. Se não, provavelmente irá falhar. Se isso não funcionar, edite sua pergunta e forneça mais informações sobre como você faz login através do ansible.

    
por terdon 19.07.2017 / 13:44
0

Todos os logins, interativos e não interativos, locais e remotos são registrados em /var/log/auth.log . Sugiro que você use isso em vez de mexer com arquivos de inicialização de perfil que a conta de usuário auditada possa modificar.

    
por David Foerster 19.07.2017 / 14:21