Verifique se o usuário logado via SSH passou pelo Active Direcory

1

Estou tentando verificar se um usuário que se conecta a um servidor linux via SSH é autenticado usando o Active Directory (Centrify).

Caso ele use uma conta local (localizada em /etc/passwd ), preciso exibir um aviso solicitando que ele use sua conta do Active Directory e solicite login novamente.

Minha primeira tentativa foi usar o módulo PAM pam_script dentro de /etc/pam.d/login para executar um script que verifica se o nome de usuário atual existe em / etc / passwd sempre que um usuário efetua login, exibe um aviso se encontrado e chama o comando login novamente .

Eu adicionei a seguinte linha a /etc/pam.d/login

session    required    pam_script.so runas=root

Esta linha executa um arquivo de script localizado em /etc/security/onsessionopen , que contém:

#!/bin/sh
username=$1

if [ $(grep -c '^'$username':' /etc/passwd) = 1 ] 
then
    echo "Warning, please user your AD credentials"
    login
fi

Mas o mesmo cenário não funcionou em /etc/pam.d/sshd . Ao usar o SSH, o script é executado, mas não exibe texto nem solicita login.

Alguma ideia? Obrigado

    
por WinkoBit 13.07.2016 / 13:03

4 respostas

0

Usando id , é relativamente fácil saber se você está conectado a partir do anúncio ou local /etc/passwd . O próximo passo seria ter uma função em /etc/profile que irá emitir a mensagem de aviso.

    
por 13.07.2016 / 15:16
0

Alterar o shell das contas relevantes em /etc/passwd funcionaria bem

Coloque isso em (digamos) /usr/local/etc/mustuseadlogin e torne-o executável:

#!/bin/sh
echo
echo "Please log in with AD authentication" >&2
echo
sleep 10
exit 0

Agora edite /etc/passwd (idealmente com vipw ) e altere o último campo de todas as contas afetadas para /usr/local/etc/mustuseadlogin . Por exemplo,

roaima:x:1001:1001:I am roaima:/home/roaima:/usr/local/etc/mustuseadlogin
    
por 14.07.2016 / 19:30
0

Solução incrível para o 'login' padrão. Infelizmente, eu não acho que você tenha muita sorte em conseguir esse mesmo comportamento por 'sshd'. Isso se deve aos procedimentos fundamentais de conexão que o sshd utiliza ao estabelecer uma conexão. No momento em que chegamos até a pilha do PAM (ou bits de perfil, como na outra sugestão), o nome de usuário já está resolvido; conforme enviado pelo cliente SSH.

Aqui está um recurso que pode lançar mais luz sobre isso: link

Dada esta informação, eu sugiro que uma solução ideal seja ficar com o seu script (ou adição de / etc / profile), no entanto, para a pilha 'sshd'; em vez de clicar em 'login', espere por 10s ou what-have-you (para garantir que o aviso seja visto) e feche a sessão.

    
por 14.07.2016 / 19:02
0

O módulo pam_script usa seu status de saída para informar à pilha de chamadas o que fazer. Altere seu código para isso e funcionará:

#!/bin/bash
username="$1"

if [[ root != "$username" ]] && grep -q '^'"$username"':' /etc/passwd
then
    echo "Warning, please user your AD credentials"
    exit 1
fi
exit 0

Eu excluí root do bloco. Você pode ajustar o [[ ... ]] test para UIDs < 500, etc., para aplicar ao seu próprio cenário.

    
por 14.07.2016 / 19:41

Tags