Estou usando o Ubuntu.
Só estou imaginando se é possível ter o libpam-google-authenticator (que permite fazer login usando um código gerado pelo seu telefone) E autenticação de certificado configurada para trabalhar em conjunto, e se for possível, como eu iria configurando. Assim - para fazer login na minha conta, você precisa ter minha senha, meu telefone (e sua senha) E meu certificado / chave privada e sua senha.
Comecei a trabalhar de forma independente, mas nunca consegui fazê-los trabalhar juntos. Tenho certeza de que, de alguma forma, é possível.
Obrigado.
Respostas:
É possível fazer isso encadeando os módulos PAM. Mas antes de entrar em detalhes:
A configuração incorreta do PAM pode impedi-lo de fazer login no sistema
Felizmente, você sempre pode inicializar no modo de usuário único e corrigir o problema, mas lembre-se de que o PAM não é algo com o qual você queira mexer mais do que o necessário.
De qualquer forma, a idéia por trás disso é que é possível utilizar empilhamento módulos PAM para se certificar de que
pam-google-authenticator
,pam_unix
(isto verifica a senha) e o módulo certificado todos têm de ter sucesso para permitir-lhe acesso. Por padrão, o PAM está configurado para permitir que qualquer módulo de autenticação o autentique, ignorando os outros.No arquivo /etc/pam.d/common-auth, você verá na parte superior uma linha semelhante à seguinte:
Isso informa ao PAM que, se
pam_unix.so
tiver êxito, pulará as próximas duas regras (que normalmente são outro módulo de autenticaçãopam_deny.so
) e continuará para os módulos opcionais. No entanto, se o módulo falhar, será ignorado e o controle passará para o próximo módulo da cadeia. Isso continua em cada módulo de autenticação até o controle pular para o bloco opcional ou o PAM acessar pam_deny.so e falhar ali.Isso pode ser aproveitado para garantir que
pam-google-authenticator
,pam_unix.so
e o módulo PAM do seu certificado tenha que ter sucesso para permitir o acesso. Não sei o nome do módulo autenticador do Google ou do módulo de certificado que você está usando, mas você poderá encontrá-los no seu arquivo de autenticação comum. Então, colocando algo assim no topo:Substituindo
<n>
pelo número de módulos entre o módulo pam_permit.so aqui e o próximopam_permit.so
módulo - em outras palavras, isso deve ser definido como o código [sucesso = n padrão = ignorar] do módulo de autenticação mais alto + 1. Essa sintaxe é um pouco descolada , mas basicamente ignora os módulos de autenticação depois que os módulos acima foram bem-sucedidos.Obviamente, você pode estar se perguntando como limitar essa autenticação em três etapas apenas à sua conta de usuário. Isso pode ser feito com um
pam_succeed_if.so
módulo e deve ser inserido acima do bloco de autenticação em três etapas descrito acima:Onde
<username>
é substituído pelo seu nome de usuário. Essa linha simplesmente diz que se pam_succeed_if.so for bem-sucedido (também conhecido como seu nome de usuário corresponde ao nome de usuário nessa linha), o PAM deve prosseguir com os próximos módulos, que são os módulos de autenticação em três etapas. Caso contrário, o PAM deve pular para os módulos reais, que estão a 4 módulos deste.Para corresponder a várias coisas, por exemplo, associação a um grupo e um determinado nome de usuário, várias linhas devem ser usadas, por exemplo:
Antes de fazer isso, eu fazia o backup do arquivo de autenticação comum e também me familiarizava com o modo de usuário único e como restaurar o arquivo antigo em caso de emergência. Essa configuração não foi testada por mim, mas deve funcionar.
Para testar isso pela primeira vez, abra um shell raiz ou dois e deixe-os em paz. Eles atuam como substitutos no caso de algo dar errado, pois você pode substituir facilmente a autenticação comum pelo backup. Em seguida, faça essas alterações. Em seguida, tente usar
su
para fazer login na sua conta de usuário - você precisará passar pelo processo de autenticação em três etapas.A documentação completa do
pam_succeed_if.so
módulo pode ser encontrada em http://linux.die.net/man/8/pam_succeed_iffonte
ChallengeResponseAuthentication
eUsePAM
como 'yes'; em seguida, defina as linhas detalhadas na minha resposta acima em /etc/pam.d/sshd ou /etc/pam.d/common -auth, dependendo se você deseja executar isso para todos os logins ou apenas SSH. Lembre-se de remover a linha de preenchimento 'pam_certificate_auth.so' e modificar a linha [success = <n> como resultado.Li este post e achei legal - aqui está como consegui a autenticação de três fatores para funcionar. Eu escrevi um post sobre isso aqui .
Basicamente, configurei o Google Authenticator e a senha no PAM, depois configurei a autenticação de chave pública no OpenSSH (isso ignora os outros dois) e, finalmente, exigi que o OpenSSH também se autenticasse através do PAM (a última linha)
Em / etc / ssh / sshd_conf
fonte
Somente Pubkey + GoogleAuth você precisa adicionar ao topo do seu /etc/pam.d/sshd
Eu suponho que você tenha OpenSSH> = 6.2 e sshd_config editado
Para uma segurança mais paranóica, adicione algumas configurações extras: D
fonte