pam_exec
Acho que você pode fazer o que quiser usando o módulo PAM pam_exec
. Os itens do PAM são passados para um script definido para ser executado como variáveis de ambiente. Aqui está um exemplo de script de notificação que mostra as variáveis sendo passadas:
Configuração
#!/bin/sh
[ "$PAM_TYPE" = "open_session" ] || exit 0
# echo "User: $PAM_USER"
# echo "Ruser: $PAM_RUSER"
# echo "Rhost: $PAM_RHOST"
# echo "Service: $PAM_SERVICE"
# echo "TTY: $PAM_TTY"
result=$(sqlite3 /path/to/file.db \
"select ssh-allow from sometable where user = \"$PAM_USER\"")
if [ "$results" == "y" ]; then
...login...
else
...no login...
fi
Você cria uma regra do PAM correspondente como esta:
session optional pam_exec.so /usr/local/bin/checkssh-login
É possível criar um script que use essa abordagem para fazer uma pesquisa no arquivo de banco de dados sqlite
usando o nome do usuário transmitido como $PAM_USER
. Se esse usuário tiver permissão para entrar no SSH, o script poderá simplesmente ser acessado, caso contrário, poderá impedir que o usuário continue com sua tentativa de login.