Como saber qual método foi usado para efetuar login (Password vs. Keyfile) do bashrc

1

Existe uma maneira de verificar qual método de autenticação o usuário que acabou de efetuar login em uma conta estava usando?

Eu gosto de imprimir um aviso após o login se alguém estiver usando uma senha em vez de um arquivo de chaves.

Claro que uma solução é verificar os logs ssh. Mas há uma maneira mais agradável de fazer isso? Como pesquisar registros pode afetar o desempenho, dependendo do tamanho do log e do método usado para coletar essas informações.

Estamos usando o SUSE e o Ubuntu.

    
por Kevin Urbainczyk 09.08.2018 / 14:14

3 respostas

3

Você pode adicionar uma diretiva à entrada authorized_keys de uma chave para adicionar um valor ao ambiente das sessões em que essa chave foi usada. Esta é a documentação do sshd :

environment="NAME=value"
Specifies that the string is to be added to the environment when logging in using this key. Environment variables set this way override other default environment values. Multiple options of this type are permitted. Environment processing is disabled by default and is controlled via the PermitUserEnvironment option.

Assim, a entrada authorized_keys pode ter esta aparência:

environment="SSHKEY=bob_key" ssh-rsa AAAAB3NzaC...iQ== bob@bobspc

Quando o .bashrc do usuário é executado, a presença ou ausência da variável SSHKEY indicaria se essa chave específica foi usada para autenticar ou não.

Isso obviamente não é uma solução de propósito geral. Você teria que anotar todas as entradas de chave em todos os arquivos authorized_keys com esta diretiva. E o usuário poderia subverter o cheque se tivesse acesso para alterar seus arquivos .bashrc , authorized_keys ou .ssh/rc .

    
por 09.08.2018 / 17:27
1

O shell não sabe (ou se importa) como você autenticou. sshd registrará as mensagens, se configuradas (via SyslogFacility e LogLevel ), em um local configurável (syslog / rsyslog), portanto, você precisará verificar esses registros, se existirem, para descobrir como o usuário autenticou .

Procure nesses registros:

... sshd[...]: Accepted keyboard-interactive/pam for $USER from ... port ... 

ou

... sshd[...]: Accepted publickey for $USER from ... port ...

para determinar se usaram senha (teclado interativo) ou autenticação de chave.

Você pode considerar resumir os logs do sshd e enviar um relatório separado (via e-mail?) para os usuários que efetuaram login por senha recentemente.

    
por 09.08.2018 / 15:09
1

Versões mais recentes do OpenSSH (eu acho que começando com 7.6) permitem a opção de configuração ExposeAuthenticationMethods . Se definido como pam-and-env , você poderá obter uma variável de ambiente SSH_USER_AUTH que inclui informações sobre o (s) método (s) de autenticação utilizado (s). Isso pode incluir vários valores, quando a autenticação multifator é utilizada. A configuração padrão (consistente com as versões anteriores do OpenSSH) é never , indicando que você precisaria recorrer à varredura de registros ou outros métodos, se você não puder alterar o sshd_config ou estiver executando uma versão anterior do OpenSSH.

    
por 09.08.2018 / 19:16