Autenticação com o PAM
- 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
ousu
. O nome do serviçoother
é 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
.
/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 flagrequired
. O flagrequisite
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 flagsufficient
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) ounullok
(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:
/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
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. | |
Verifica se | |
Refere-se aos arquivos de configuração de quatro tipos de módulo: | |
Define o atributo de processo do UID de login para o processo que foi autenticado. | |
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.
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
O | |
O | |
O |
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 .
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 requisite
e 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”.
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:
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 comandopam-config --create
cria uma configuração de autenticação Unix simples. Os arquivos de configuração preexistentes não mantidos pelopam-config
são sobregravados, mas as cópias de backup são mantidas como*.pam-config-backup
.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çãocommon-*-pc
do PAM.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.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.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.
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:
Efetue login na sua máquina.
Insira a chave U2F.
Crie um diretório para a configuração da chave U2F:
>
sudo
mkdir -p ~/.config/YubicoExecute o comando
pamu2fcfg
que gera as linhas de configuração:>
sudo
pamu2fcfg > ~/.config/Yubico/u2f_keysQuando 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:
Execute:
>
sudo
pamu2fcfg -n >> ~/.config/Yubico/u2f_keysQuando 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:
Crie um diretório em
/etc
:>
sudo
mkdir /etc/YubicoMova o arquivo criado:
>
sudo
mv ~/.config/Yubico/u2f_keys /etc/Yubico/u2f_keys
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.
Abra o arquivo
/etc/pam.d/login
.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
Se você colocou o arquivo
u2f_keys
em um local diferente de$HOME/.config/Yubico/u2f_keys
, precisa usar a opçãoauthfile
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
.
7 Informações legais #
Copyright © 2006-2024 SUSE LLC e colaboradores. Todos os direitos reservados.
Permissão concedida para copiar, distribuir e/ou modificar este documento sob os termos da Licença GNU de Documentação Livre, Versão 1.2 ou (por sua opção) versão 1.3; com a Seção Invariante sendo estas informações de copyright e a licença. Uma cópia da versão 1.2 da licença está incluída na seção intitulada “GNU Free Documentation License” (Licença GNU de Documentação Livre).
Para ver as marcas registradas da SUSE, visite https://www.suse.com/company/legal/. Todas as marcas comerciais de terceiros pertencem a seus respectivos proprietários. Os símbolos de marca registrada (®, ™ etc.) indicam marcas registradas da SUSE e de suas afiliadas. Os asteriscos (*) indicam marcas registradas de terceiros.
Todas as informações deste manual foram compiladas com a maior atenção possível aos detalhes. Entretanto, isso não garante uma precisão absoluta. A SUSE LLC, suas afiliadas, os autores ou tradutores não serão responsáveis por possíveis erros nem pelas consequências resultantes de tais erros.