PAM (Autenticação) O PAM (Pluggable Autenthication Modules Módulos Anexáveis de Autenticação) são bibliotecas compartilhadas usadas para autenticação de usuários pelos programas sem precisar altera-los ou recompila-los. Programas, serviços e arquivos de configuração Os próprios programas que determinam como fazer a política de autenticação e quais serviços e arquivos de configuração da política de autenticação do PAM serão usados. Por exemplo o programa login utiliza o serviços chamado também login, e seu arquivo de configuração da política de autenticação do PAM é /etc/pam.d/login, o programa passwd utiliza o serviço passwd e o arquivo de configuração /etc/pam.d/passwd e etc. Os arquivos de configuração do PAM ficam localizados no diretório /etc/pam.d/ e sua sintaxe é: tipo controle módulo parâmetros Tipo auth (autenticação) account (conta) password (senha) session (sessão) Solicita e verifica uma senha de autenticação dos usuários para acessar o sistema. Verifica a conta do usuário se expirou ou não e se pode acessar o sistema. Utilizado para configurar e criar senhas Utilizado para gerenciamento de sessões de usuários autenticados no sistema 1
Controle required (requerido) r e q u i s i t e (necessário) s u f f i c i e n t (suficiente) optional (opcional) Módulo pam_securetty pam_nologin pam_cracklib pam_pwdb Verifica o módulo para permitir ou não a autenticação, caso ocorra erro o usuário não é avisado enquanto outros módulos são verificados Verifica o módulo para que seja feita a autenticação com sucesso, caso ocorra erro o usuário é avisado com mensagem de erro. Caso ocorra erro na verificação do módulo, não interfere na autenticação do usuário. Mas caso um módulo ativado como sufficient seja verificado com sucesso e nenhum módulo ativado como required tenha ocorrido erro, então o resto dos outros módulos do mesmo tipo não são verificados e o usuário é autenticado. Determina a autenticação para um módulo desse tipo e caso ocorra erro na verificação do módulo, não interfere na autenticação do usuário. A única diferença é que um módulo ativado como optional é necessário para a autenticação com sucesso quando nenhum outro módulo desse tipo verificado falhar ou funcionar. Verifica o terminal tty de login, este módulo não tem parâmetros mas sim ou arquivo de configuração localizado em /etc/securetty onde podemos definir quais terminais o usuário root pode fazer login (o mais seguro é especificar apenas um terminal tty1). Esse módulo é verificado com sucesso para qualquer usuário que não seja root, caso seja root, será permitido apenas os terminais especificados no arquivo /etc/securetty. Não tem nenhum parâmetro e desabilita o login de qualquer usuário que não seja root, onde é necessário criar o arquivo /etc/nologin. Criando este arquivo somente o usuário root poderá acessar o sistema, e apagando-o os outros usuários poderão acessar novamente o sistema Esse módulo é usado pelo tipo password para verificar a senha do usuário antes que seja alterada e não tem nenhum parâmetro. Esse é módulo principal de autenticação usado pelo programa login para verificar o login e a senha do usuário. Este módulo tem alguns parâmetros onde são 2
Parâmetros shadow nullok md5 use_authtok exibidos logo mais abaixo Utiliza senhas shadow (sombra) Permite que seja usado senhas em branco Utiliza a criptografia md5 ao invés do padrão crypt Esse parâmetro diz para o módulo usar autenticação fornecida para os módulos anteriores Abaixo seguem alguns exemplos do arquivo de configuração do programa login em /etc/pam.d/login onde as linhas estão descomentadas (sem um # ). # /etc/pam.d/login # desabilita login de root nos terminais que não estejam especificados em /etc/securetty auth requisite pam_securetty.so # Desabilita qualquer outro usuário que não seja root acessar o sistema caso exista o arquivo /etc/nologin auth requisite pam_nologin.so # Descomente a linha abaixo e edite o arquivo /etc/security/access.conf se você precisar configurar limites de controle. # account required pam_access.so # Exibe informações dos últimos logins com sucesso session optional pam_lastlog.so 3
# Exibe mensagem de boas vindas definida no arquivo /etc/motd após o login com sucesso session optional pam_motd.so # Exibe informações de email do usuário após o login com sucesso session optional pam_mail.so standard Utilizando o PAM O arquivo /etc/security/access.conf Abaixo seguem alguns exemplos de configuração do arquivo /etc/security/access.conf que pode ser testado a partir de um terminal tty1, tty2,... tty6 usando as teclas (CTRL+ALT+F1, CTRL+ALT+F2... CTRL+ALT+F6) e que tem a seguinte sintaxe: permissão : usuários : origem Onde para a permissão é usado o sinal de adição + para dar permissão e de subtração - para tirar permissão e origem pode ser um terminal tty, um host, um domínio (que começa com um ponto. Ex:.dominio.com.br ) ou as palavras ALL (tudo) e LOCAL (local) # /etc/security/access.conf 4
# bloqueia acesso de todos os usuários do sistema exceto o root no terminal tty1 -:ALL EXCEPT root:tty1 # bloqueia acesso do usuário aluno1 no terminal tty2 -:aluno1:tty2 # libera o acesso do usuário aluno2 no terminal tty3 +:aluno2:tty3 # bloqueia acesso dos usuários aluno1 e aluno2 em todos os terminais -:aluno1 aluno2:all O arquivo /etc/nologin Como foi mostrado acima no módulo pam_nologin, criando este arquivo apenas o usuário root terá acesso ao sistema. # touch /etc/nologin Agora tente acessar em um terminal tty (tty1, tty2,...) usando as teclas (CTRL+ALT+F1, CTRL+ALT+F2...) como usuário e verá que estará bloqueado e para desbloquear apague o arquivo. 5
# rm /etc/nologin O arquivo /etc/securetty Como foi mostrado acima no módulo pam_securetty, neste arquivo definimos quais terminais que o usuário root pode ter acesso, como medida de segurança é mais seguro é definir apenas um terminal (tty1). Como são muitos terminais é mais fácil renomear o arquivo original e criar um arquivo novo com apenas um terminal tty como mostra o exemplo abaixo. # mv /etc/securetty /etc/securetty.original # vi /etc/securetty # /etc/securetty tty1 Agora tente acessar em um terminal tty (tty1, tty2,...) usando as teclas (CTRL+ALT+F1, CTRL+ALT+F2...) como usuário root e verá que estará liberado o acesso apenas no terminal tty1 e bloqueado o restante (tty2, tty3,... tty6). Autenticação de programas - Squid Através do PAM é possível autenticar usuários do sistema local no Linux pelo squid, onde passa a usar o arquivo /etc/shadow pelo PAM e não mais o arquivo /etc/squid3/passwd (definido pelo administrador) criado na configuração do squid para cadastrar usuário usando o programa htpasswd do apache. Para fazer a autenticação agora pelo PAM edite o arquivo de configuração do squid /etc/squid3/squid.conf e altere a linha : 6
auth_param basic program /usr/lib/squid3/ncsa_auth /etc/squid3/passwd_squid Para auth_param basic program /usr/lib/squid3/pam_auth Pronto, agora a autenticação será feita pelo programa login através do PAM onde serão autenticados os usuários do sistema no Linux, mas para isso devemos alterar as permissões do programa /usr/lib/squid3/pam_auth ativando o setuid de root (chmod u+s). Atenção, vale lembrar que ativando o setuid para o usuário root não é compromete a segurança do sistema, recomendamos que utilize a autenticação configurada com nsca_auth (/usr/lib/squid3/ncsa_auth) mostrada na aula do Squid. # chown root /usr/lib/squid3/pam_auth # chmod u+s /usr/lib/squid3/pam_auth Reinicie as configurações do squid e teste a autenticação de um computador da rede tentando acessar com o login de um usuário do sistema criado pelos programas adduser ou useradd. # squid3 -k reconfigure ou # /etc/init.d/squid3 restart 7