O módulo Yubico PAM fornece uma maneira fácil de integrar o YubiKey à sua infraestrutura de autenticação de usuário existente. PAM é usado por GNU/Linux, Solaris e Mac OS X para autenticação de usuário e por outros aplicativos especializados, como NCSA MyProxy.
O módulo está funcionando para sistemas multiusuário. O principal modo de operação é fazer validação online usando um serviço de validação YubiKey (como o YubiCloud, ou um serviço privado configurado usando o parâmetro 'urllist').
Na versão 2.6, a validação offline também foi possível através do uso do HMAC-SHA1 Challenge-Response encontrado no YubiKey 2.2 e posterior. Isto introduziu uma dependência do libykpers-1 do pacote ykpersonalize. Passe --without-cr
para configure
para evitar esta dependência.
A comunidade de desenvolvimento é coordenada pela página do projeto GitHub.
O projeto está licenciado sob uma licença BSD. Veja o arquivo COPYING para o texto exato. Para qualquer intervalo de anos de copyright especificado como AAAA-ZZZZ neste pacote, observe que o intervalo especifica todos os anos nesse intervalo fechado.
Pule para a próxima seção se estiver usando uma versão oficial do pacote.
Você pode verificar as fontes usando Git com o seguinte comando:
$ git clone https://github.com/Yubico/yubico-pam.git
Isso criará o diretório yubico-pam
.
Autoconf, automake, libtool, asciidoc, xsltproc e docbook-xsl devem ser instalados para criar uma árvore de código-fonte compilável.
Gere o sistema de compilação usando:
$ cd yubico-pam $ autoreconf --install
Você precisará ter libykclient (ykclient.h, libykclient.so) e libpam-dev (security/pam_appl.h, libpam.so) instalados. Por sua vez, requer cURL, que você precisa ter instalado, e liyubikey.
A autenticação offline Challenge-Response requer libykpers-1 do projeto yubikey-personalization:
Os autotestes requerem perl com o módulo Net::LDAP::Server instalado.
O sistema de compilação usa o Autoconf, para configurar a execução do sistema de compilação:
./configure
Use --without-ldap para desativar o suporte ldap.
Em seguida, construa o código, execute o autoteste e instale os binários:
fazer verificação de instalação
Já existe um pacote no Fedora/EPEL do yubico-pam que pode ser instalado usando yum:
$ sudo yum instalar pam_yubico
Existe um Ubuntu PPA (Personal Package Archive) para yubico-pam que pode ser instalado usando os seguintes comandos em plataformas Ubuntu razoavelmente modernas:
$ sudo add-apt-repository ppa:yubico/stable $ sudo apt-get atualização $ sudo apt-get install libpam-yubico
Veja o arquivo /usr/share/doc/libpam-yubico/README.Debian
após a instalação.
yubico-pam e os pacotes de suporte do Yubico possuem portas FreeBSD correspondentes. Para instalar:
$ cd /usr/portas/segurança/pam_yubico $ faça a instalação limpa
Notas de configuração avançada estão disponíveis aqui.
Instale-o na configuração do PAM adicionando uma linha a um arquivo apropriado em /etc/pam.d/
:
autenticação suficiente pam_yubico.so id=[Seu ID de cliente da API] depurar
e mova pam_yubico.so para /lib/security/ (ou onde quer que os módulos PAM residam em seu sistema):
mv /usr/local/lib/security/pam_yubico.so /lib/security/
Para obter mais informações, consulte a documentação do projeto.
Os parâmetros do módulo PAM suportados são:
arquivo de autenticação | Para indicar o local do arquivo que contém os mapeamentos de IDs de token YubiKey para nomes de usuário. |
eu ia | Seu ID de cliente API no servidor de validação Yubico. Se você quiser usar o serviço YubiCloud padrão, clique aqui. |
chave | Para indicar sua chave de cliente no formato base64. A chave do cliente também é conhecida como chave API e fornece integridade na comunicação entre o cliente (você) e o servidor de validação. Se você deseja obter um para usar com o serviço YubiCloud padrão, clique aqui. |
depurar | para ativar a saída de depuração. |
arquivo_debug | nome do arquivo no qual gravar a depuração, o arquivo deve existir e ser um arquivo normal. stdout é o padrão. |
sempre ok | para permitir que todas as tentativas de autenticação sejam bem-sucedidas (também conhecido como modo de apresentação). |
try_first_pass | Antes de solicitar a senha do usuário, o módulo primeiro tenta a senha do módulo empilhado anterior, caso isso também satisfaça este módulo. |
use_first_pass | O argumento use_first_pass força o módulo a usar uma senha de módulos empilhados anteriores e nunca solicitará o usuário - se nenhuma senha estiver disponível ou a senha não for apropriada, o acesso será negado ao usuário. |
sempre_prompt | Se definido, não tente fazer uma pesquisa para determinar se o usuário tem um YubiKey configurado, mas em vez disso solicite um, não importa o que aconteça. Isso é útil no caso em que ldap_bind_as_user está habilitado, mas este módulo está sendo usado para ler a senha do usuário (em um cenário de autenticação YubiKey+OTP). |
nullok | Se definido, não falhará quando não houver tokens declarados para o usuário nos arquivos de mapeamento de autorização ou no LDAP. Isso pode ser usado para tornar a autenticação YubiKey opcional, a menos que o usuário tenha tokens associados. |
ldap_starttls | Se definido, emita um comando STARTTLS para a conexão LDAP antes de tentar vincular-se a ela. Esta é uma configuração comum para servidores que escutam apenas na porta 389, mas ainda exigem TLS. |
ldap_bind_as_user | Se definido, use o login do usuário para vincular ao LDAP. Isso usará a senha fornecida pelo usuário via PAM. Se estiver definido, ldapdn e uid_attr também deverão ser definidos. Habilitar isto fará com que 'ldap_bind_user' e 'ldap_bind_password' sejam ignorados |
lista de URLs | Lista de modelos de URL a serem usados. Isso é definido chamando ykclient_set_url_bases. A lista deve estar no formato: |
url | Esta opção não deve ser usada; em vez disso, use a opção urllist. Especifique o modelo de URL a ser usado, isso é definido chamando yubikey_client_set_url_template, cujo padrão é: |
capath | especifique o caminho onde os certificados X509 são armazenados. Isto é necessário se 'https' ou 'ldaps' forem usados em 'url' e 'ldap_uri' respectivamente. |
cainfo | Opção para permitir o uso de um pacote CA em vez de um caminho. |
procurador | especifique um proxy para conectar-se ao servidor de validação. Os esquemas válidos são http://, https://, meias4://, meias4a://, meias5:// ou meias5h://. Socks5h pede ao proxy para resolver o DNS. Se nenhum esquema ou porta for especificado, a porta proxy HTTP 1080 será usada. |
verbose_otp | Este argumento é usado para mostrar a OTP (senha de uso único) quando ela é inserida, ou seja, para ativar o eco do terminal dos caracteres inseridos. É aconselhável não usar isso se estiver usando autenticação de dois fatores, pois isso exibirá sua senha na tela. Isso requer que o serviço use o módulo PAM para exibir campos personalizados. Esta opção não pode ser usada com OpenSSH. |
ldap_uri | especifique o URI do servidor LDAP (por exemplo, ldap://localhost). |
servidor ldap | especifique o host do servidor LDAP (a porta LDAP padrão é usada). Obsoleto. Use "ldap_uri" em vez disso. |
ldapdn | especifique o dn onde os usuários estão armazenados (ex.: ou=usuários,dc=domínio,dc=com). |
arquivo ldap_clientcert | O caminho para um arquivo de certificado do cliente a ser usado ao se comunicar com o servidor LDAP. Observe que isso requer que 'ldap_clientkeyfile' também seja definido. |
ldap_clientkeyfile | O caminho para uma chave a ser usada com o certificado do cliente ao se comunicar com o servidor LDAP. Observe que isso requer que 'ldap_clientcertfile' também seja definido. |
ldap_bind_user | O usuário para tentar uma ligação LDAP. |
ldap_bind_password | A senha a ser usada na ligação LDAP. |
filtro_ldap | Um filtro LDAP a ser usado para tentar localizar o objeto correto no LDAP. Nesta string |
arquivo ldap_cacert | Arquivo de certificado CA para a conexão LDAP. |
usuário_attr | especifique o atributo LDAP usado para armazenar nomes de usuários (por exemplo:cn). |
yubi_attr | especifique o atributo LDAP usado para armazenar o ID YubiKey. |
yubi_attr_prefix | especifique o prefixo do valor do atributo LDAP, no caso de um atributo genérico, utilizado para armazenar diversos tipos de IDs. |
token_id_length | Comprimento do ID que prefixa o OTP (é 12 se estiver usando o YubiCloud). |
modo | Modo de operação. Use "cliente" para validação online com um serviço de validação YubiKey, como o YubiCloud, ou use "resposta ao desafio" para validação offline usando YubiKeys com configurações HMAC-SHA-1 Challenge-Response. Consulte a página de manual ykpamcfg(1) para obter mais detalhes sobre como configurar a validação offline do Challenge-Response. |
caminho_chalresp | Diretório usado para armazenar os arquivos de desafio no caso de uma configuração em todo o sistema (em contraste com os arquivos de desafio armazenados no diretório inicial de um usuário). Este local deve ser legível e gravável apenas pelo root. Consulte |
servidor_mysql | Nome do host/endereço do servidor mysql a ser usado para mapeamento. |
mysql_port | Porta de rede do servidor mysql. |
mysql_user | Usuário para acessar o banco de dados mysql. |
senha_mysql | Senha do usuário mysql. |
banco de dados_mysql | O banco de dados mysql a ser usado. |
Se você estiver usando "debug", poderá achar útil criar um arquivo de log gravável mundialmente:
touch /var/run/pam-debug.log
chmod go+w /var/run/pam-debug.log
Observação | Lembre-se de que o acesso físico aos sistemas muitas vezes permite contornar os controles de segurança. Se um invasor tiver acesso físico ao seu sistema (como um laptop deixado em um quarto de hotel) e puder inicializar no modo de usuário único, ele poderá desativar o yubico-pam na configuração do sistema. |
Um mapeamento deve ser feito entre o ID do token YubiKey e o ID do usuário ao qual ele está anexado. Existem duas maneiras de fazer isso, centralmente em um arquivo ou individualmente, onde os usuários podem criar o mapeamento em seus diretórios pessoais. Se o arquivo de mapeamento de autorização central estiver sendo usado, os mapeamentos de diretório inicial do usuário não serão usados e o oposto se aplica. Se os mapeamentos de diretório inicial do usuário estiverem sendo usados, o arquivo de mapeamentos de autorização central não será usado.
Crie um /etc/yubikey_mappings
, o arquivo deve conter um nome de usuário e o ID do token YubiKey separados por dois pontos (mesmo formato do arquivo passwd) para cada usuário que você deseja permitir a entrada no sistema usando um YubiKey.
Os mapeamentos devem ficar assim, um por linha:
: : :…. : : :….
Agora adicione authfile=/etc/yubikey_mappings
à sua linha de configuração do PAM, para que fique assim:
autenticação suficiente pam_yubico.so id=[Seu ID de cliente da API] authfile=/etc/yubikey_mappings
Cada usuário cria um arquivo ~/.yubico/authorized_yubikeys
dentro de seu diretório inicial e coloca o mapeamento nesse arquivo, o arquivo deve ter apenas uma linha:
: :
Este é praticamente o mesmo conceito do arquivo SSHauthorized_keys.
Você pode obter o ID do token YubiKey de várias maneiras. Uma delas é remover os últimos 32 caracteres de qualquer OTP (One Time Password) gerado com seu YubiKey. Outra é usar a calculadora modhex.
Insira seu YubiKey OTP e converta-o, seu ID de token YubiKey tem 12 caracteres e está listado como:
Codificado Modhex: XXXXXXX
Não tem certeza do que essa última parte significou? Veja como obter uma cópia do seu OTP.
Abra um terminal
Pressione o botão do YubiKey. Ele gerará um OTP no shell:
$ cccccccgklgcvnkcvnnegrnhgrjkhlkfhdkclfncvlgj
bash: cccccccgklgcvnkcvnnegrnhgrjkhlkfhdkclfncvlgj: command not found
Isso pode ser colado na página Modhex_Calculator.
Isso requer que você tenha o módulo pam habilitado com 'debug' ativado. Quando solicitado o YubiKey, pressione o botão. O módulo pam imprimirá informações de depuração, incluindo o OTP e o ID do seu token no shell - copie o ID em seu arquivo de configuração e você estará pronto e pronto.
YubiKey para `seuusuário': [pam_yubico.c:pam_sm_authenticate(867)] conv retornou 44 bytes [pam_yubico.c:pam_sm_authenticate(885)] Ignorando os primeiros 0 bytes. O comprimento é 44, token_id definido como 12 e token OTP sempre 32. [pam_yubico.c:pam_sm_authenticate(892)] OTP: ccccccclabcabkhbdncicglfltnukadfoifadfhhhhfe ID: cccccclabcab
Usuários com SELinux em modo de imposição (o padrão no Fedora 17+) podem enfrentar problemas de login com serviços, incluindo aqueles validados via polkit-agent-helper-1, sshd e login.
Isso está documentado no Red Hat bugzilla, incluindo uma solução alternativa para ssh (arquivos equivalentes podem ser criados para outros serviços). Os sistemas no modo 'permissivo' gerarão avisos AVC, mas a autenticação será bem-sucedida.
Para determinar se o SELinux está aplicando ou não, execute o comando sestatus
.
Se você quiser usar o YubiKey para autenticar você em logins do console Linux, adicione o seguinte ao topo de /etc/pam.d/login
:
autenticação suficiente pam_yubico.so id=[Seu ID de cliente da API] depurar
Consulte os exemplos de extensões de esquema do Active Directory de Michael Ludvig para armazenamento/associação de atributos de ID público YubiKey com uma conta de usuário específica: https://github.com/mludvig/yubikey-ldap/tree/master/microsoft-schema
crie o arquivo '/etc/pam.d/openvpn':
autenticação necessária pam_yubico.so ldap_uri=ldap://contoso.com debug id=[Seu ID de API] yubi_attr=YubiKeyID ldapdn=DC=contoso,DC=com ldap_filter=(&(sAMAccountName=%u)(objectClass=user)(memberOf=CN=somegroup,DC=contoso,DC=com)) [ldap_bind_user=CN=binduser,OU=Contas de serviço,DC=contoso,DC=com] ldap_bind_password=bind_password try_first_pass conta necessária pam_yubico.so
crie o arquivo 'openvpn.conf'
plugin openvpn-plugin-auth-pam.so openvpn