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.
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
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.
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
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.
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.