Usando PAM no Linux
Tags: linux, security, logicapps, systems
Published: 2024-07-12 21:00:23

#O que é? 
Bem, vamos primeiro falar sobre o que são os **PAM**, **Plugglable Autentication Modules** que são um conjunto de bibliotecas usadas para fazer autenticação, gerenciamento de contas, controle de recursos dos usuários no sistema, em adição ao tradicional sistema de acesso baseado em usuários/grupos, isto é, para todos os recursos que suportam ele é claro. Criados em 1997, eles estão disponíveis desde então para GNU/Linux e UNIX.

Em quase todos os casos de autenticação, o PAM está envolvido. Normalmente não fazemos interações diretamente nos arquivos de configuração do PAM, tendo outros aplicativos fazendo as alterações nele por você. A seguir mostraremos como saber se um aplicativo suporta PAM.

#Como saber se um aplicativo suporta PAM?#
Basta digitar o comando ldd programa, por exemplo.:

```
ldd /bin/login
```
Se listar a biblioteca *libpam*, o programa possui suporte a PAM compilado. Se não for listada, o programa precisará ter seu código fonte alterado para poder tratar os módulos de autenticação que compõem o PAM.
Importante lembrar que deverá recompilar o programa após as alterações para que ele possa estar utilizando os recursos do PAM. A maioria dos módulos compartilhados do PAM são encontrados no arquivo de autenticação do sistema para autenticação local e no arquivo de autenticação de senha para o cenário que o aplicativo escuta em conexões remotas, sendo estes arquivos encontrados em */etc/pam.d*.

# Políticas no PAM#
A política padrão no PAM é especificada em */etc/pam.d/other* e ela será aplicada se não tiver nenhum outro arquivo de controle em */etc/pam.d*. A política padrão é criada usando o módulo *pam_unix.so*, para criação e implantação de políticas mais restritivas é recomendado alterar em /etc/pam.d/other.

Os bloqueios são aplicados através do módulo *pam_deny.so* e os alertas de logs são enviados ao syslog pelo módulo *pam_warn*. Esses alertas são úteis em situações onde o módulo PAM que necessitem do serviço de autenticação sejam bloqueados por uma política criada, lembrando que o módulo pam_deny.so não bloqueia automaticamente.

Por isso é recomendável usar o pam_warn na configuração de políticas de autenticação mais restritivas de forma a verificar possíveis bloqueios indevidos.

# Principais Módulos do PAM
A seguir iremos listar os principais módulos do PAM.

**/etc/security**
Este módulo possui uma coleção de arquivos de configuração para módulos específicos, muito usado pelas aplicações que suportam PAM.

**/var/log/secure**
Este é o arquivo de log onde a grande maioria dos erros de autenticação e segurança são inseridos, é nele que são exibidas as políticas de restrição.

**/usr/lib64/security**
São uma coleção de bibliotecas PAM que executam várias verificações de autenticação.

**/etc/pam.d**
É neste lugar que ficam os arquivos que os aplicativos utilizam para validar a autenticação. Neles são definidos quais módulos são verificados, usando quais opções e em qual ordem. Eles podem ser adicionados no sistema ao instalar um aplicativo compatível e são editados por outros aplicativos com suporte a PAM via libpam.

Agora vamos ver um caso de uso do PAM, de forma a trazer mais segurança a um sistema Linux.

#Restrigir Acesso ao Root usando su 
Para restringir a um número limitado de usuários que façam parte de um grupo criado especificamente para esse fim o acesso ao root com o comando **su**. A restrição irá funcionar mesmo que o usuário digite a senha correta do usuário root, onde ele receberá uma mensagem de senha ou login incorretos.
Para fazer isso, siga os passos a seguir.:

✔ Crie um grupo para os usuários que terão o acesso de root.
✔ Altere o arquivo **/etc/pam.d/su**. Coloque a linha abaixo (caso não exista) no arquivo de configuração:

```
auth       required   pam_wheel.so group=nomedogrupocriado
```
O que essa linha faz é usar o módulo **pam_wheel.so**, solicitando que os usuários pertençam ao grupo criado. Salve e saia do editor.
✔ Ainda como usuário root, adicione os usuários no grupo, uma dica importante: **Adicione o seu usuário primeiro, principalmente se estiver acessando o sistema remotamente**. Isto irá impedir em caso de perda de conexão, que o seu usuário seja atingido pela política de restrição criada.
✔ Teste com outros usuários que tenham a senha de root e não estão no grupo criado para validar se as alterações foram aplicadas corretamente.

Assim mostramos um pouco do que o PAM pode fazer para melhorar o nível de segurança e autenticação em Sistemas Linux/Unix. Seus módulos permitem um ambiente muito mais robusto que os serviços por aplicativos podem fornecer para autenticação, por isso sua longevidade dentro do ecossistema Linux, estando disponível e sendo usado a mais de 20 anos.

**Referências para o Post.:**

https://www.ibm.com/docs/pt-br/netcoolomnibus/8.1?topic=authentication-pam-unix-linux
https://www.redhat.com/sysadmin/pluggable-authentication-modules-pam
https://github.com/linux-pam/linux-pam
https://www.ibm.com/docs/pt-br/spss-statistics/29.0.0?topic=authentication-configuring-pam
https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/6/html/managing_smart_cards/pluggable_authentication_modules
https://www.linuxfromscratch.org/blfs/view/11.1/postlfs/linux-pam.html
https://www.guiafoca.org/guiaonline/seguranca/ch06s02.html