Historicamente, para efetuar a autenticação de um usuário, as aplicações verificavam a identidade do mesmo comparando senhas criptografadas armazenadas no arquivo /etc/passwd. O programa solicitava o login do usuário e sua senha, criptografava a senha e comparava o resultado com a armazenada no arquivo. O acesso era garantido caso as senhas fossem iguais. Um erro de autenticação era retornado caso fossem diferentes.
Suponha, no entanto, que o administrador queira fazer autenticação remota, ou utilizar um novo algoritmo de criptografia. Ele seria obrigado então, por exemplo, a mudar o programa login para que ele também suportasse essa nova forma de autenticação ou algoritmo mais eficiente. Não é difícil imaginar o tamanho do problema se todos os programas que utilizam algum tipo de autenticação tivessem de ser reescritos cada vez que se mudasse algum critério de autenticação.
Visando evitar esse tipo de situação, os modernos sistemas
Linux realizam a autenticação via PAM.
Arquivos de configuração
O propósito do do projeto PAM é separar a concessão de privilégios nos aplicativos do desenvolvimento de esquemas de autenticação apropriados e seguros. Isto é realizado fornecendo-se uma biblioteca de funções utilizada pelas aplicações para solicitar a autenticação de usuários.
As bibliotecas PAM são configuradas no arquivo
/etc/pam.conf ou no diretório
/etc/pam.d/. Vale ressaltar que não é possível utilizar as duas formas de configuração do LinuxPAM. O administrador deve usar o arquivo /etc/pam.conf ou o diretório /etc/pam.d/, não os dois ao mesmo tempo.
Os arquivos de configuração utilizam módulos normalmente localizados no diretório /lib/security/ ou /lib64/security/ e se comportam como objetos carregáveis dinamicamente.
A configuração do arquivo /etc/pam.conf deve seguir o seguinte formato:
service-name module-type control-flag module-path args
Onde:
- service-name: indica o nome do serviço associado à configuração (login, ftpd, su etc)
- module-type: informa ao Linux-PAM qual o tipo de módulo utilizado, havendo um módulo para cada tipo de tarefa. Pode ser auth, account, session e password.
- control-flag: indica à biblioteca PAM como reagir em caso de sucesso ou falha. Como os módulos podem ser empilhados e executados em série, um após o outro, este parâmetro informa a importância relativa de cada módulo, garantindo que todas as restrições para uma dada autenticação sejam satisfeitas.
- module-path: indica o caminho da biblioteca PAM, o arquivo de módulo a ser utilizado.
- args: são informações úteis ao módulo PAM durante o processo de negociação com a aplicação. Consiste de uma lista de argumentos a ser enviada ao módulo quando este for invocado.
Após a versão 0.56, o Linux-PAM permite uma forma mais flexível de configuração do sistema, através de arquivos dispostos no diretório /etc/pam.d/. Neste caso, cada serviço possuir um arquivo de mesmo nome no diretório. Assim, o serviço smtp será configurado via arquivo /etc/pam.d/smtp.
Os arquivos no diretório /etc/pam.d/ são configurados de forma similar à configuração do /etc/pam.conf. Entretanto, como o nome do serviço já é o nome do arquivo, o parâmetro service-name não é utilizado. Dessa forma, cada entrada em um arquivo no /etc/pam.d/ possui a seguinte forma:
module-type control-flag module-path args
Algumas vantagens da utilização desta configuração simplificada do PAM são: facilidade de manutenção, possibilidade de fazer links simbólicos de um arquivo a outro, restrição de leitura do arquivo de configuração de uma dada aplicação e gerenciamento de instalações facilitado.