Ir para o conteúdoIr para navegação de página: página anterior [tecla de acesso p]/próxima página [tecla de acesso n]
documentation.suse.com / Autenticação com o PAM

Autenticação com o PAM

Data de Publicação: 12/12/2024
O QUE É?

O artigo descreve o conceito, a estrutura de configuração e o uso de ferramentas para configurar o PAM.

POR QUÊ?

Para saber como configurar um módulo PAM e o seu sistema para usar as chaves U2F.

DEDICAÇÃO

A leitura do artigo leva aproximadamente 20 minutos.

REQUISITOS
  • Para configurar a autenticação usando as chaves U2F, você precisa ter o YubiKeys ou Security Keys.

1 Introdução ao PAM

Os programadores e administradores do sistema muitas vezes desejam restringir o acesso a certas partes do sistema ou limitar o uso de certas funções de um aplicativo. Sem o PAM, os aplicativos devem ser adaptados toda vez que é introduzido um novo mecanismo de autenticação, como LDAP, Samba ou Kerberos. No entanto, esse processo é demorado e sujeito a erros. Uma forma de evitar essas desvantagens é separar os aplicativos do mecanismo de autenticação e delegar a autenticação a módulos gerenciados centralmente. Sempre que um esquema de autenticação passa a ser necessário, basta adaptar ou gravar um módulo PAM adequado para ser usado pelo programa em questão.

O conceito do PAM consiste em:

  • Módulos PAM, que são um conjunto de bibliotecas compartilhadas para um mecanismo de autenticação específico.

  • Uma pilha de módulos com um ou mais módulos PAM.

  • Um serviço compatível com PAM, que precisa de autenticação usando uma pilha de módulos ou módulos PAM. Normalmente, um serviço é um nome familiar do aplicativo correspondente, como login ou su. O nome do serviço other é uma palavra reservada para regras padrão.

  • Argumentos de módulo, com os quais a execução de um único módulo PAM pode ser influenciada.

  • Um mecanismo que avalia cada resultado de uma única execução de módulo PAM. Um valor positivo executa o próximo módulo PAM. A forma como um valor negativo é tratado depende da configuração: sem influência, prosseguir até terminar imediatamente, e qualquer opção intermediária é válida.

2 Estrutura de configuração do PAM

O PAM no SLE Micro é fornecido com a chamada configuração baseada em diretório. O conjunto de arquivos de configuração é armazenado em /etc/pam.d. Cada serviço (ou programa) que depende do mecanismo PAM tem seu próprio arquivo de configuração nesse diretório. Por exemplo, o serviço para sshd pode estar em /etc/pam.d/sshd.

Nota
Nota: Configuração baseada em arquivo (/etc/pam.conf) não usada no SLE Micro

A configuração de cada serviço também pode ser armazenada em /etc/pam.conf. No entanto, por motivos de manutenção e usabilidade, esse esquema de configuração não é usado no SLE Micro.

Os arquivos em /etc/pam.d/ definem os módulos PAM usados para autenticação. Cada arquivo consiste em linhas, que definem um serviço, e cada linha consiste em, no máximo, quatro componentes:

      TYPE
      CONTROL
      MODULE_PATH
      MODULE_ARGS

Os componentes têm o seguinte significado:

TYPE

Declara o tipo de serviço. Os módulos PAM são processados como pilhas. Tipos diferentes de módulos têm finalidades distintas. Por exemplo, um módulo verifica a senha, outro verifica o local de onde o sistema é acessado e outro ainda lê as configurações específicas do usuário. O PAM tem conhecimento sobre quatro tipos diferentes de módulos:

auth

Verificar a autenticidade do usuário, normalmente ao consultar uma senha. No entanto, isso também pode ser feito com um cartão com chip ou por meio de biometria (por exemplo, impressões digitais ou escaneamento da íris).

account

Os módulos desse tipo verificam se o usuário tem uma permissão geral para usar o serviço solicitado. A título de exemplo, essa verificação deve ser realizada para assegurar que ninguém possa efetuar login com o nome de usuário de uma conta que já expirou.

password

O objetivo desse tipo de módulo é permitir a mudança de um token de autenticação. Normalmente, trata-se de uma senha.

session

Os módulos desse tipo são responsáveis pelo gerenciamento e configuração de sessões de usuários. Eles são iniciados antes e depois da autenticação para registrar as tentativas de login e configurar o ambiente específico do usuário.

CONTROL

Indica o comportamento de um módulo PAM. Cada módulo pode ter os seguintes flags de controle:

required

Um módulo com esse flag precisa ser processado com êxito para que a autenticação possa prosseguir. Após a falha de um módulo com o flag required, todos os outros módulos com o mesmo flag serão processados antes que o usuário receba uma mensagem sobre a falha da tentativa de autenticação.

requisite

Os módulos com esse flag também devem ser processados com êxito, de forma muito semelhante a um módulo com o flag required. Contudo, em caso de falha, um módulo com esse flag dá um retorno imediato ao usuário e os módulos restantes deixam de ser processados. Em caso de êxito, os outros módulos serão processados na sequência, assim como qualquer módulo com o flag required. O flag requisite pode ser usado como um filtro básico para verificar a existência de determinadas condições essenciais para a autenticação correta.

sufficient

Após o processamento bem-sucedido de um módulo com esse flag, o aplicativo que fez a solicitação receberá imediatamente uma mensagem sobre o êxito, e o processamento de outros módulos será interrompido, exceto quando houver falhas anteriores em um módulo com o flag required. A falha de um módulo com o flag sufficient não causa consequências diretas, com os módulos subsequentes sendo processados na sua respectiva ordem.

optional

A falha ou êxito de um módulo com esse flag não traz consequências diretas. Isso pode ser útil no caso de módulos cujo único propósito é exibir uma mensagem (por exemplo, informar ao usuário sobre a chegada de e-mails) sem executar nenhuma ação adicional.

include

Quando esse flag é dado, o arquivo especificado como argumento é inserido nesse lugar.

MODULE_PATH

Contém o nome de arquivo completo de um módulo PAM. Ele não precisará ser especificado explicitamente se o módulo estiver localizado no diretório padrão /lib/security (para todas as plataformas de 64 bits suportadas pelo SLE Micro, o diretório é /lib64/security).

MODULE_ARGS

Contém uma lista de opções separadas por espaço para influenciar o comportamento de um módulo PAM, como debug (habilita a depuração) ou nullok (permite o uso de senhas vazias).

Além disso, há arquivos de configuração global para módulos PAM em /etc/security, que definem o comportamento exato desses módulos (alguns exemplos são pam_env.conf e time.conf). Cada aplicativo que usa um módulo PAM chama um conjunto de funções do PAM que, em seguida, processa as informações nos arquivos de configuração e retorna o resultado para o aplicativo que fez a solicitação.

Para simplificar a criação e a manutenção dos módulos PAM, foram introduzidos arquivos de configuração padrão comuns para os módulos dos tipos auth, account, password e session. Eles são recuperados da configuração do PAM de cada aplicativo. As atualizações nos módulos de configuração global do PAM em common-* são propagadas para todos os arquivos de configuração do PAM, sem exigir que o administrador atualize cada um desses arquivos.

Os arquivos de configuração global do PAM são mantidos usando a ferramenta pam-config. Essa ferramenta adiciona automaticamente novos módulos à configuração, muda a configuração daqueles existentes ou apaga módulos (ou opções) das configurações. A intervenção manual na manutenção das configurações do PAM é minimizada ou não é mais necessária.

2.1 Um exemplo de configuração do PAM

Para demonstrar um exemplo de caso de uso real da configuração do PAM, a configuração do sshd foi usada nesta seção:

Exemplo 1: Configuração do PAM para sshd (/etc/pam.d/sshd)
#%PAM-1.0 1
auth     requisite      pam_nologin.so                              2
auth     include        common-auth                                 3
account  requisite      pam_nologin.so                              2
account  include        common-account                              3
password include        common-password                             3
session  required       pam_loginuid.so                             4
session  include        common-session                              3
session  optional       pam_lastlog.so   silent noupdate showfailed 5

1

Declara a versão desse arquivo de configuração para o PAM 1.0. Isso é apenas uma convenção, mas pode ser usado no futuro para verificar a versão.

2

Verifica se /etc/nologin existe. Em caso afirmativo, nenhum outro usuário root poderá efetuar login.

3

Refere-se aos arquivos de configuração de quatro tipos de módulo: common-auth, common-account, common-password e common-session. Esses quatro arquivos abrigam a configuração padrão de cada tipo de módulo.

4

Define o atributo de processo do UID de login para o processo que foi autenticado.

5

Exibe informações sobre o último login de um usuário.

Ao incluir os arquivos de configuração em vez de adicionar cada módulo separadamente à respectiva configuração do PAM, você obtém automaticamente uma configuração do PAM atualizada quando um administrador muda os padrões.

O primeiro arquivo de inclusões (common-auth) chama os módulos do tipo auth: pam_env.so, pam_gnome_keyring.so e pam_unix.so. Consulte o Exemplo 2, “Configuração padrão da seção auth (common-auth)”. Lembre-se de que os módulos podem ser diferentes de acordo com a sua instalação.

Exemplo 2: Configuração padrão da seção auth (common-auth)
auth  required  pam_env.so                   1
auth  optional  pam_gnome_keyring.so         2
auth  required  pam_unix.so  try_first_pass 3

1

O pam_env.so carrega o /etc/security/pam_env.conf para definir as variáveis de ambiente conforme especificado nesse arquivo. Ele pode ser usado para definir o valor correto da variável DISPLAY, pois o módulo pam_env reconhece o local de onde o login está sendo efetuado.

2

O pam_gnome_keyring.so compara o login e a senha do usuário com o chaveiro do GNOME.

3

O pam_unix verifica compara o login e a senha do usuário com /etc/passwd e /etc/shadow.

A pilha inteira de módulos auth é processada antes que o sshd receba qualquer retorno se o login foi bem-sucedido. Todos os módulos da pilha que têm o flag de controle required devem ser processados com êxito antes que o sshd receba uma mensagem sobre o resultado positivo. Se um dos módulos não for bem-sucedido, a pilha de módulos inteira ainda será processada, e somente depois disso é que o sshd será notificado sobre o resultado negativo.

Quando todos os módulos do tipo auth tiverem sido processados com êxito, outra declaração de inclusão será processada, neste caso, aquela no Exemplo 3, “Configuração padrão da seção account (common-account)”. O common-account contém apenas um módulo: pam_unix. Se pam_unix retornar o resultado de que o usuário existe, o sshd receberá uma mensagem de êxito, e a próxima pilha de módulos (password) será processada, conforme mostrado em .

Exemplo 3: Configuração padrão da seção account (common-account)
account  required  pam_unix.so  try_first_pass

Mais uma vez, a configuração do PAM de sshd envolve apenas uma declaração de inclusão referente à configuração padrão para os módulos password localizados em common-password. Esses módulos devem ser concluídos com êxito (flags de controle requisitee required) sempre que o aplicativo solicita a mudança de um token de autenticação.

A mudança de uma senha ou de outro token de autenticação requer uma verificação de segurança. Isso é feito com o módulo pam_cracklib. O módulo pam_unix usado posteriormente transfere as senhas antigas e novas do pam_cracklib, portanto, o usuário não precisa se autenticar novamente após mudar a senha. Esse procedimento também torna impossível contornar as verificações realizadas pelo pam_cracklib. Sempre que o tipo account ou auth for configurado para reclamar sobre senhas expiradas, os módulos password também deverão ser usados.

Na etapa final, os módulos do tipo session (incluídos no arquivo common-session) são chamados para definir a sessão de acordo com as configurações do usuário em questão. O módulo pam_limits carrega o arquivo /etc/security/limits.conf, que pode definir limites para o uso de determinados recursos do sistema. O módulo pam_unix é processado novamente. O módulo pam_umask pode ser usado para definir a máscara de criação do modo de arquivo. Como esse módulo tem o flag optional, uma falha dele não afeta a conclusão bem-sucedida de toda a pilha de módulos da sessão. Os módulos session são chamados uma segunda vez quando o usuário efetua logout.

3 Configuração de módulos PAM

Alguns módulos PAM são configuráveis. Os arquivos de configuração estão localizados em /etc/security. Esta seção descreve resumidamente os arquivos de configuração relevantes ao exemplo do sshd: pam_env.conf e limits.conf.

3.1 pam_env.conf

O pam_env.conf pode ser usado para definir um ambiente padronizado para os usuários, que será definido sempre que o módulo pam_env for chamado. Com ele, predefina variáveis de ambiente usando a seguinte sintaxe:

VARIABLE  [DEFAULT=VALUE]  [OVERRIDE=VALUE]
VARIABLE

Nome da variável de ambiente a ser definida.

[DEFAULT=<value>]

VALUE padrão que o administrador deseja definir.

[OVERRIDE=<value>]

Os valores que podem ser consultados e definidos por pam_env, anulando o valor padrão.

Um exemplo típico de como o módulo pam_env pode ser usado é na adaptação da variável DISPLAY, que é mudada sempre que um login remoto é efetuado. Você pode ver isso no Exemplo 4, “pam_env.conf”.

Exemplo 4: pam_env.conf
REMOTEHOST  DEFAULT=localhost          OVERRIDE=@{PAM_RHOST}
DISPLAY     DEFAULT=${REMOTEHOST}:0.0  OVERRIDE=${DISPLAY}

A primeira linha define o valor da variável REMOTEHOST como localhost, que é usado sempre que pam_env não consegue determinar nenhum outro valor. A variável DISPLAY, por sua vez, contém o valor de REMOTEHOST. Encontre mais informações nos comentários em /etc/security/pam_env.conf.

3.2 limits.conf

Os limites do sistema podem ser definidos por usuário ou grupo em limits.conf, que é lido pelo módulo pam_limits. O arquivo permite definir limites fixos, que não podem ser excedidos, e limites flexíveis, que podem ser excedidos temporariamente. Para obter mais informações sobre a sintaxe e as opções, consulte os comentários em /etc/security/limits.conf.

4 Configurando o PAM com pam-config

A ferramenta pam-config ajuda você a configurar os arquivos de configuração global do PAM (/etc/pam.d/common-*) e várias configurações de aplicativo selecionadas. Para obter uma lista dos módulos suportados, use o comando pam-config --list-modules. Use o comando pam-config para manter os arquivos de configuração do PAM. Adicione novos módulos às configurações do PAM, apague outros módulos ou modifique as opções desses módulos. Ao mudar os arquivos de configuração global do PAM, nenhum ajuste manual da configuração do PAM para aplicativos individuais é necessário.

Um caso de uso simples para pam-config envolve o seguinte:

  1. Gerar automaticamente uma nova configuração do PAM no estilo unix. Deixe o pam-config criar a configuração mais simples possível, que você poderá estender posteriormente. O comando pam-config --create cria uma configuração de autenticação Unix simples. Os arquivos de configuração preexistentes não mantidos pelo pam-config são sobregravados, mas as cópias de backup são mantidas como *.pam-config-backup.

  2. Adicionar um novo método de autenticação. A adição de um novo método de autenticação (por exemplo, LDAP) à pilha de módulos PAM se resume a um comando pam-config --add --ldap simples. O LDAP é adicionado sempre que apropriado a todos os arquivos de configuração common-*-pc do PAM.

  3. Adicionar depuração para fins de teste. Para garantir que o novo procedimento de autenticação funcione conforme planejado, ative a depuração para todas as operações relacionadas ao PAM. O pam-config --add --ldap-debug ativa a depuração para operações do PAM relacionadas ao LDAP.

  4. Consultar sua configuração. Antes de finalmente aplicar a nova configuração do PAM, verifique se ela contém todas as opções que você deseja adicionar. O comando pam-config --query --MODULE lista o tipo e as opções para o módulo PAM consultado.

  5. Remover as opções de depuração. Por fim, remova a opção de depuração de sua configuração quando você estiver totalmente satisfeito com o desempenho dela. O comando pam-config --delete --ldap-debug desativa a depuração para autenticação LDAP. Caso você tenha opções de depuração adicionadas para outros módulos, use comandos semelhantes para desativá-las.

Para obter mais informações sobre o comando pam-config e as opções disponíveis, consulte a página de manual pam-config(8).

5 Configurando manualmente o PAM

Se você preferir criar ou manter manualmente os arquivos de configuração do PAM, desabilite pam-config para esses arquivos.

Quando você cria os arquivos de configuração do PAM do zero usando o comando pam-config --create, ele cria links simbólicos dos arquivos common-* para os arquivos common-*-pc. pam-config modifica apenas os arquivos de configuração common-*-pc. A remoção desses links simbólicos desabilita efetivamente o pam-config, porque o pam-config opera apenas com base em arquivos common-*-pc, e esses arquivos não entram em vigor sem os links simbólicos.

Atenção
Atenção: Incluir pam_systemd.so na configuração

Se você estiver criando sua própria configuração do PAM, inclua o pam_systemd.so configurado como session optional. Se o pam_systemd.so não for incluído, poderá haver problemas com os limites de tarefas do systemd. Para obter detalhes, consulte a página de manual de pam_systemd.so.

6 Configurando o SLE Micro para exigir chaves U2F para login local

Para reforçar a segurança durante o login local no SLE Micro, você pode configurar a autenticação de dois fatores usando a estrutura pam-u2f e o recurso U2F no YubiKeys e Security Keys.

Para configurar o U2F no sistema SLE Micro, você precisa associar sua chave à sua conta no SLE Micro. Depois disso, configure seu sistema para usar a chave. O procedimento está descrito nas seções a seguir.

6.1 Associando a chave U2F à sua conta

Para associar a chave U2F à sua conta, faça o seguinte:

  1. Efetue login na sua máquina.

  2. Insira a chave U2F.

  3. Crie um diretório para a configuração da chave U2F:

    > sudo mkdir -p ~/.config/Yubico
  4. Execute o comando pamu2fcfg que gera as linhas de configuração:

    > sudo pamu2fcfg > ~/.config/Yubico/u2f_keys
  5. Quando o dispositivo começar a piscar, toque no contato de metal para confirmar a associação.

Recomendamos o uso de um dispositivo U2F de backup, que você pode configurar executando os seguintes comandos:

  1. Execute:

    > sudo pamu2fcfg -n >> ~/.config/Yubico/u2f_keys
  2. Quando o dispositivo começar a piscar, toque no contato de metal para confirmar a associação.

Você pode mover o arquivo de saída do local padrão para um diretório que exija a permissão de sudo para modificar o arquivo para reforçar a segurança. Por exemplo, mova-o para o diretório /etc. Para isso, siga as etapas:

  1. Crie um diretório em /etc:

    > sudo mkdir /etc/Yubico
  2. Mova o arquivo criado:

    > sudo mv ~/.config/Yubico/u2f_keys /etc/Yubico/u2f_keys
Nota
Nota: Colocando u2f_keys em um local não padrão

Se você mover o arquivo de saída para um diretório diferente do padrão ($HOME/.config/Yubico/u2f_keys), será necessário adicionar o caminho ao arquivo /etc/pam.d/login conforme descrito na Seção 6.2, “Atualizando a configuração do PAM”.

6.2 Atualizando a configuração do PAM

Após criar a configuração de chaves U2F, você precisará ajustar a configuração do PAM no sistema.

  1. Abra o arquivo /etc/pam.d/login.

  2. Adicione a linha auth required pam_u2f.so ao arquivo da seguinte maneira:

    #%PAM-1.0
    auth      include    common-auth
    auth      required   pam_u2f.so
    account   include    common-account
    password  include    common-password
    session   optional   pam_keyinit.so revoke
    session   include    common-session
    #session  optional   pam_xauth.so
  3. Se você colocou o arquivo u2f_keys em um local diferente de $HOME/.config/Yubico/u2f_keys, precisa usar a opção authfile no arquivo /etc/pam.d/login do PAM da seguinte maneira:

    #%PAM-1.0 
    auth     requisite pam_nologin.so 
    auth     include   common-auth
    auth  required pam_u2f.so authfile=<PATH_TO_u2f_keys>
    ...

    em que <PATH_TO_u2f_keys> é o caminho absoluto para o arquivo u2f_keys.