Autenticação PAM - Redes SME

Índice geral da série: Redes de computadores para PMEs: introdução

Olá amigos e amigos!

Com este artigo, pretendemos oferecer uma visão geral do tópico de autenticação através de PAM. Estamos acostumados a usar nossa estação de trabalho com sistema operacional Linux / UNIX diariamente e em algumas ocasiões paramos para estudar como ocorre o mecanismo de autenticação cada vez que iniciamos uma sessão. Nós sabemos da existência dos arquivos / Etc / passwde / etc / shadow que constituem a base de dados principal das Credenciais de Autenticação dos usuários locais. Esperamos que depois de ler este post você tenha, pelo menos, uma ideia clara de como o PAM funciona.

Autenticação

Autenticação - para fins práticos - é a maneira pela qual um usuário é verificado em um sistema. O processo de autenticação requer a presença de um conjunto de identidade e credenciais - nome de usuário e senha - que são comparadas com as informações armazenadas em um banco de dados. Se as credenciais apresentadas forem iguais às armazenadas e a conta do usuário estiver ativa, diz-se que o usuário está conectado. autêntico passou com sucesso ou com sucesso o autenticação.

Depois que o usuário é autenticado, essa informação é passada para o serviço de controle de acesso para determinar o que esse usuário pode fazer no sistema e quais recursos ele tem devido autorização para acessá-los.

As informações para verificar se o usuário podem ser armazenadas em bancos de dados locais no sistema ou o sistema local pode se referir a um banco de dados existente em um sistema remoto, como LDAP, Kerberos, bancos de dados NIS e assim por diante.

A maioria dos sistemas operacionais UNIX® / Linux possui as ferramentas necessárias para configurar o serviço de autenticação de cliente / servidor para os tipos mais comuns de bancos de dados de usuário. Alguns desses sistemas possuem ferramentas gráficas muito completas, como Red Hat / CentOS, SUSE / openSUSE e outras distribuições.

PAM: Módulo de Autenticação Pluggable

Os Módulos que são inseridos para autenticação Nós os usamos diariamente quando nos conectamos ao nosso Desktop com um sistema operacional baseado em Linux / UNIX e em muitas outras ocasiões quando acessamos serviços locais ou remotos que têm um módulo PAM local específico inserido para autenticação nesse serviço.

Uma ideia prática de como os módulos PAM são inseridos pode ser obtida através da sequência de estados de autenticação en uma equipe com o Debian e en outro com CentOS que desenvolvemos a seguir.

Debian

Documentação

Se instalarmos o pacote libpam-doc teremos uma documentação muito boa localizada no diretório / usr / share / doc / libpam-doc / html.

root @ linuxbox: ~ # aptitude install libpam-doc
root @ linuxbox: ~ # ls -l / usr / share / doc / libpam-doc /

Também há mais documentação sobre PAM nos diretórios:

root @ linuxbox: ~ # ls -l / usr / share / doc / | grep pam
drwxr-xr-x 2 root root 4096 5 de abril 21:11 libpam0g drwxr-xr-x 4 root root 4096 7 de abril 16:31 libpam-doc drwxr-xr-x 2 root root 4096 5 de abril 21:30 libpam-gnome- chaveiro drwxr-xr-x 3 root root 4096 5 de abril 21:11 libpam-modules drwxr-xr-x 2 root root 4096 5 de abril 21:11 libpam-modules-bin drwxr-xr-x 2 root root 4096 5 de abril 21: 11 libpam-runtime drwxr-xr-x 2 root root 4096 5 de abril 21:26 libpam-systemd drwxr-xr-x 3 root root 4096 5 de abril 21:31 python-pam

Acreditamos que antes de procurar documentação na Internet, devemos revisar aquela que já está instalada ou aquela que podemos instalar diretamente dos repositórios de programas que existem para algo e muitas vezes os copiamos para nosso disco rígido. A amostra disso é a seguinte:

root @ linuxbox: ~ # less / usr / share / doc / libpam-gnome-keyring / README
O gnome-keyring é um programa que mantém a senha e outros segredos dos usuários. Ele é executado como um daemon na sessão, semelhante ao ssh-agent, e outros aplicativos o localizam por meio de uma variável de ambiente ou um D-Bus. O programa pode gerenciar vários chaveiros, cada um com sua própria senha mestra, e também há um chaveiro de sessão que nunca é armazenado no disco, mas esquecido quando a sessão termina. A biblioteca libgnome-keyring é usada por aplicativos para integração com o sistema de keyring do GNOME.

Que traduzido de forma muito livre quer expressar:

  • gnome-keyring é o programa encarregado de manter as senhas e outros segredos dos usuários. Em cada sessão ele é executado como um daemon, semelhante ao ssh-agent, e a outros aplicativos que estão localizados por meio de uma variável de ambiente - ambiente ou via D-Bus. O programa pode lidar com vários chaveiros, cada um com sua própria senha mestra. Há também uma sessão de chaveiro que nunca é armazenada no disco rígido e é esquecida quando a sessão termina. Os aplicativos usam a biblioteca libgnome-keyring para integração com o sistema de keyring do GNOME..

Debian com o sistema operacional básico

Começamos com um computador no qual acabamos de instalar Debian 8 "Jessie" como o sistema operacional e durante seu processo de instalação selecionamos apenas os "Utilitários básicos do sistema", sem marcar qualquer outra opção para instalar tarefas - tarefas ou pacotes predefinidos como o servidor OpenSSH. Se depois de iniciar a primeira sessão executarmos:

root @ master: ~ # pam-auth-update

obteremos os seguintes resultados: Autenticação PAM - 01

Autenticação PAM - 02

O que nos mostra que o único Módulo PAM em uso até o momento é a Autenticação UNIX. Utilitário atualização pam-auth nos permite configurar a política de autenticação central para um sistema ao usar Perfis Predefinidos fornecidos pelos Módulos PAM. Para mais informações, veja Homem Pam-Auth-update.

Como ainda não instalamos o servidor OpenSSH, não encontraremos seu módulo PAM no diretório /etc/pam.d/, que conterá os módulos PAM e perfis carregados até estes momentos:

root @ master: ~ # ls -l /etc/pam.d/
total 76 -rw-r - r-- 1 root root 235 set 30 2014 atd -rw-r - r-- 1 root root 1208 abr 6 22:06 common-account -rw-r - r-- 1 root root 1221 6 de abril 22:06 common-auth -rw-r - r-- 1 root root 1440 6 de abril 22:06 common-password -rw-r - r-- 1 root 1156 6 de abril 22:06 common-session -rw-r - r-- 1 root 1154 6 de abril 22:06 common-session-noninteractive -rw-r - r-- 1 root root 606 11 de junho de 2015 cron -rw-r - r - 1 root root 384 Nov 19 2014 chfn -rw-r - r-- 1 root root 92 Nov 19 2014 chpasswd -rw-r - r-- 1 root root 581 Nov 19 2014 chsh -rw-r-- r-- 1 root root 4756 19 de novembro de 2014 login -rw-r - r-- 1 root root 92 19 de novembro de 2014 newusers -rw-r - r-- 1 root root 520 6 de janeiro de 2016 outro -rw-r- -r-- 1 root 92 19 de novembro de 2014 passwd -rw-r - r-- 1 root root 143 29 de março de 2015 runuser -rw-r - r-- 1 root 138 29 de março de 2015 runuser-l -rw -r - r-- 1 root 2257 19 de novembro de 2014 su -rw-r - r-- 1 root 220 2 de setembro de 2016 systemd-user

Por exemplo, usando o módulo PAM /etc/pam.d/chfn o sistema configura o serviço Shadow, enquanto através /etc/pam.d/cron o daemon está configurado cron. Para saber um pouco mais podemos ler o conteúdo de cada um desses arquivos que é muito instrutivo. Como exemplo, damos abaixo o conteúdo do módulo /etc/pam.d/cron:

root @ master: ~ # less /etc/pam.d/cron
# O arquivo de configuração do PAM para o cron daemon

@include autenticação comum

# Define o atributo do processo loginuid session required pam_loginuid.so # Leia as variáveis ​​de ambiente dos arquivos padrão de pam_env, / etc / environment # e /etc/security/pam_env.conf. sessão necessária pam_env.so # Além disso, leia as informações de localidade do sistema. sessão necessária pam_env.so envfile = / etc / default / locale

@include conta-comum
@include sessão comum não interativa 

# Define os limites do usuário, defina os limites para as tarefas cron # por meio de /etc/security/limits.conf sessão necessária pam_limits.so

A ordem das declarações em cada um dos arquivos é importante. Em termos gerais, não recomendamos modificar nenhum deles, a menos que saibamos muito bem o que estamos fazendo.

Debian com sistema operacional básico + OpenSSH

root @ master: ~ # aptitude install task-ssh-server
Os seguintes NOVOS pacotes serão instalados: openssh-server {a} openssh-sftp-server {a} task-ssh-server

Vamos verificar se o módulo PAM foi adicionado e configurado corretamente sshd:

root @ master: ~ # ls -l /etc/pam.d/sshd 
-rw-r - r-- 1 root root 2133 22 de julho de 2016 /etc/pam.d/sshd

Se quisermos saber o conteúdo desse perfil:

root @ master: ~ # less /etc/pam.d/sshd

Em outras palavras, quando tentamos iniciar uma sessão remota de outro computador usando ssh, a autenticação no computador local é feita através do módulo PAM sshd principalmente, sem esquecer os outros aspectos de autorização e segurança envolvidos no serviço ssh como tal.

De passagem, acrescentamos que o principal arquivo de configuração deste serviço é / etc / ssh / sshd_config, e que pelo menos no Debian é instalado por padrão sem permitir login de usuário interativo raiz. Para permitir isso, devemos modificar o arquivo / etc / ssh / sshd_config e mude a linha:

PermitRootLogin sem senha

PermitRootLogin sim

e reinicie e verifique o status do serviço:

root @ master: ~ # systemctl restart ssh
root @ master: ~ # systemctl status ssh

Debian com a área de trabalho LXDE

Continuamos com a mesma equipe - mudamos seu nome ou hostname de "caixa linux»Para uso futuro - para o qual terminamos de instalar o LXDE Desktop. Vamos correr atualização pam-auth e obteremos os seguintes resultados: Autenticação PAM - 03

Autenticação PAM - 04

O sistema já habilitou todos os Perfis -Módulos- necessários para a autenticação correta durante a instalação do desktop LXDE, que são os seguintes:

  • Módulo de autenticação UNIX.
  • Módulo que registra as sessões do usuário no Grupo de Controle Hierárquico do sistema.
  • Módulo GNOME Keyring Daemon
  • Aproveitamos para recomendar que em todos os casos, quando nos for perguntado "Perfis PAM para habilitar", selecionemos a opção A menos que saibamos muito bem o que estamos fazendo. Se alterarmos a configuração do PAM que é feita automaticamente pelo próprio Sistema Operacional, podemos facilmente desabilitar o login no computador.

Nos casos acima, estamos falando sobre Autenticação Local ou Autenticação no computador local, como acontece quando iniciamos uma sessão remota por meio ssh.

Se implementarmos um método de Autenticação Remota na equipe local Para os usuários com suas credenciais armazenadas em um servidor OpenLDAP remoto ou em um Active Directory, o sistema levará em consideração a nova forma de autenticação e adicionará os módulos PAM necessários.

Arquivos principais

  • / Etc / passwd: Informações da conta do usuário
  • / etc / shadow: Informações seguras de contas de usuário
  • /etc/pam.conf: Arquivo que só deve ser usado se o diretório não existir /etc/pam.d/
  • /etc/pam.d/: Diretório onde programas e serviços instalam seus módulos PAM
  • /etc/pam.d/passwd: Configuração PAM para passwd.
  • /etc/pam.d/common-account: Parâmetros de autorização comuns a todos os serviços
  • /etc/pam.d/common-auth: Parâmetros de autenticação comuns a todos os serviços
  • /etc/pam.d/common-password: Módulos PAM comuns a todos os serviços relacionados a senhas - senhas
  • /etc/pam.d/common-session: Módulos PAM comuns a todos os serviços relacionados às sessões do usuário
  • /etc/pam.d/common-session-ninteractive: Módulos PAM comuns a todos os serviços relacionados a sessões não interativas ou que não requerem intervenção do usuário, como tarefas que são executadas no início e no final de sessões não interativas.
  • / usr / share / doc / passwd /: Diretório de documentação.

Recomendamos a leitura das páginas de manual de passwd y sombra através homem passwd y sombra de homem. Também é saudável ler o conteúdo dos arquivos conta comum, autenticação comum, senha comum, sessão comum y sessão comum não interativo.

Módulos PAM disponíveis

Para se ter uma ideia dos módulos PAM disponíveis a priori No repositório Debian padrão, executamos:

buzz @ linuxbox: ~ $ aptitude search libpam

A lista é longa e iremos refletir apenas os módulos que mostram o quão extensa é:

libpam-afs-session          - PAM module to set up a PAG and obtain AFS tokens                    
libpam-alreadyloggedin      - PAM module to skip password authentication for logged users
libpam-apparmor             - changehat AppArmor library as a PAM module
libpam-barada               - PAM module to provide two-factor authentication based on HOTP
libpam-blue                 - PAM module for local authenticaction with bluetooth devices
libpam-ca                   - POSIX 1003.1e capabilities (PAM module)                             
libpam-ccreds               - Pam module to cache authentication credentials                      
libpam-cgrou                - control and monitor control groups (PAM)                            
libpam-chroot               - Chroot Pluggable Authentication Module for PAM                      
libpam-ck-connector         - ConsoleKit PAM module                 
libpam-cracklib             - PAM module to enable cracklib support 
libpam-dbus                 - A PAM module which asks the logged in user for confirmation         
libpam-duo                  - PAM module for Duo Security two-factor authentication               
libpam-dynalogin            - two-factor HOTP/TOTP authentication - implementation libs           
libpam-encfs                - PAM module to automatically mount encfs filesystems on login        
libpam-fprintd              - PAM module for fingerprint authentication trough fprintd            
libpam-geo                  - PAM module checking access of source IPs with a GeoIP database      
libpam-gnome-keyring        - PAM module to unlock the GNOME keyring upon login                   
libpam-google-authenticator - Two-step verification                 
libpam-heimdal              - PAM module for Heimdal Kerberos       
libpam-krb5                 - PAM module for MIT Kerberos           
libpam-krb5-migrate-heimdal - PAM module for migrating to Kerberos  
libpam-lda                  - Pluggable Authentication Module for LDA                         
libpam-ldapd                - PAM module for using LDAP as an authentication service              
libpam-mkhomedir            -         
libpam-mklocaluser          - Configure PAM to create a local user if it do not exist already     
libpam-modules              - Pluggable Authentication Modules for PAM                            
libpam-modules-bin          - Pluggable Authentication Modules for PAM - helper binaries          
libpam-mount                - PAM module that can mount volumes for a user session                
libpam-mysql                - PAM module allowing authentication from a MySQL server              
libpam-nufw                 - The authenticating firewall [PAM module]                            
libpam-oath                 - OATH Toolkit libpam_oath PAM module   
libpam-ocaml                - OCaml bindings for the PAM library (runtime)                        
libpam-openafs-kaserver     - AFS distributed filesystem kaserver PAM module                      
libpam-otpw                 - Use OTPW for PAM authentication       
libpam-p11                  - PAM module for using PKCS#11 smart cards                            
libpam-passwdqc             - PAM module for password strength policy enforcement                 
libpam-pgsql                - PAM module to authenticate using a PostgreSQL database              
libpam-pkcs11               - Fully featured PAM module for using PKCS#11 smart cards             
libpam-pold                 - PAM module allowing authentication using a OpenPGP smartcard        
libpam-pwdfile              - PAM module allowing authentication via an /etc/passwd-like file     
libpam-pwquality            - PAM module to check password strength 
libpam-python               - Enables PAM modules to be written in Python                         
libpam-python-doc           - Documentation for the bindings provided by libpam-python            
libpam-radius-auth          - The PAM RADIUS authentication module  
libpam-runtime              - Runtime support for the PAM library   
libpam-script               - PAM module which allows executing a script                          
libpam-shield               - locks out remote attackers trying password guessing                 
libpam-shish                - PAM module for Shishi Kerberos v5     
libpam-slurm                - PAM module to authenticate using the SLURM resource manager         
libpam-smbpass              - pluggable authentication module for Samba                           
libpam-snapper              - PAM module for Linux filesystem snapshot management tool            
libpam-ssh                  - Authenticate using SSH keys           
libpam-sshauth              - authenticate using an SSH server      
libpam-sss                  - Pam module for the System Security Services Daemon                  
libpam-systemd              - system and service manager - PAM module                             
libpam-tacplus              - PAM module for using TACACS+ as an authentication service           
libpam-tmpdir               - automatic per-user temporary directories                            
libpam-usb                  - PAM module for authentication with removable USB block devices      
libpam-winbind              - Windows domain authentication integration plugin                    
libpam-yubico               - two-factor password and YubiKey OTP PAM module                      
libpam0g                    - Pluggable Authentication Modules library                            
libpam0g-dev                - Development files for PAM             
libpam4j-java               - Java binding for libpam.so            
libpam4j-java-doc           - Documentation for Java binding for libpam.so

Tire suas próprias conclusões.

CentOS

Se durante o processo de instalação selecionarmos a opção «Servidor com GUI«, Obteremos uma boa plataforma para implementar diversos serviços para a Rede PME. Ao contrário do Debian, CentOS / Red Hat® oferece uma série de consoles e ferramentas gráficas que facilitam a vida de um administrador de sistema ou rede.

Documentação

Instalado por padrão, o encontramos no diretório:

[root @ linuxbox ~] # ls -l /usr/share/doc/pam-1.1.8/
total de 256 -rw-r - r--. 1 root root 2045 18 de junho de 2013 Copyright drwxr-xr-x. Raiz 2 4096 9 de abril 06:28 html
-rw-r - r--. 1 root root 175382 5 de novembro 19:13 Linux-PAM_SAG.txt -rw-r - r--. 1 root root 67948 18 de junho de 2013 rfc86.0.txt drwxr-xr-x. Raiz 2 4096 9 de abril 06:28 txt
[root @ linuxbox ~] # ls /usr/share/doc/pam-1.1.8/txts/
README.pam_access README.pam_exec README.pam_lastlog README.pam_namespace README.pam_selinux README.pam_timestamp README.pam_console README.pam_faildelay README.pam_limits README.pam_namespace README.pam_selinux README.pam_timestamp README.pam_console README.pam_faildelay README.pam_limits README.pam_namespace README.pam_selinux README.pam_timestamp README.pam_console README.pam_faildelay README.pam_limits README.pam_namespace README.pam_selinux README.pam_timestamp README.pam_console README.pam_faildelay README. pam_shells README.pam_umask README.pam_chroot README.pam_filter README.pam_localuser README.pam_postgresok README.pam_stress README.pam_unix README.pam_debug README.pam_ftp README.pam_loginuid README.pam_pwhistory README.pam_succeed_if README.pam_userdb README.pam_deny README.pam_group README.pam_mail README .pam_rhosts README.pam_tally README.pam_warn README.pam_echo README README.pam_issue README.pam_mkhomedir README.pam_rootok README.pam_tally2 README.pam_wheel README.pam_ADME_auto_auto README.pam_ADME_auto_auto_README.pam_auto_tallyXNUMX.

Sim, também chamamos a equipe CentOS de "linuxbox" como no Debian, que nos servirá para artigos futuros em Redes SMB.

CentOS com GNOME3 GUI

Quando selecionamos a opção «Servidor com GUI«, O GNOME3 Desktop e outros utilitários e programas básicos são instalados para desenvolver um servidor. No nível do console, para saber o estado da autenticação que executamos:

[root @ linuxbox ~] # authconfig-tui

Autenticação PAM - 05

Verificamos que estão habilitados apenas os módulos PAM necessários para a configuração do servidor atual, mesmo um módulo para leitura de impressões digitais, sistema de autenticação que encontramos em alguns modelos de Laptops.

CentOS com GNOME3 GUI unido a um Microsoft Active Directory

Autenticação PAM - 06

Como podemos ver, os módulos necessários foram adicionados e ativados -winbind- para autenticação em um Active Directory, enquanto desabilitamos propositalmente o módulo para ler impressões digitais, porque não é necessário.

Em um artigo futuro, cobriremos em detalhes como unir um cliente CentOS 7 a um Microsoft Active Directory. Nós apenas antecipamos que usar a ferramenta autoconfig-gtk A instalação dos pacotes necessários, a configuração da criação automática de diretórios de usuários do domínio que se autenticam localmente e o próprio processo de adesão do cliente ao Domínio de um Active Directory é tremendamente automatizado. Talvez depois da união, só seja necessário reiniciar o computador.

Arquivos principais

Os arquivos relacionados à autenticação CentOS estão localizados no diretório /etc/pam.d/:

[root @ linuxbox ~] # ls /etc/pam.d/
atd liveinst smartcard-auth-ac authconfig login smtp authconfig-gtk outro smtp.postfix authconfig-tui passwd sshd config-util senha-auth su crond senha-auth-ac sudo xícaras pluto sudo-i chfn polkit-1 su-l chsh postlogin system-auth fingerprint-auth postlogin-ac system-auth-ac impressão digital-auth-ac ppp system-config-authentication gdm-autologin remoto systemd-user gdm-fingerprint runuser vlock gdm-launch-environment runuser-l vmtoolsd gdm-senha samba xserver gdm-pin setup gdm-smartcard smartcard-auth

Módulos PAM disponíveis

Nós temos os repositórios base, centosplus, Epel, y novidades. Neles encontramos -entre outros- os seguintes módulos usando os comandos yum search pa-yum pesquisa pam_e Yum Search libpam:

nss-pam-ldapd.i686: Um módulo nsswitch que usa servidores de diretório nss-pam-ldapd.x86_64: Um módulo nsswitch que usa servidores de diretório ovirt-guest-agent-pam-module.x86_64: módulo PAM para o oVirt Guest Agent pam -kwallet.x86_64: Módulo PAM para KWallet pam_afs_session.x86_64: AFS PAG e tokens AFS no login pam_krb5.i686: Um Módulo de Autenticação Pluggable para Kerberos 5 pam_krb5.x86_64: Um Módulo de Autenticação Pluggable para Kerberos 5 pamma_86 módulo pam_64 via MAPI contra um servidor Zarafa pam_oath.x86_64: Um módulo PAM para autenticação de login plugável para OATH pam_pkcs11.i686: PKCS # 11 / NSS PAM módulo de login pam_pkcs11.x86_64: PKCS # 11 / Módulo de login NSS PAM pam_radius.x86_64: Módulo de login PAM para Autenticação RADIUS pam_script.x86_64: Módulo PAM para executar scripts pam_snapper.i686: Módulo PAM para chamar snapper pam_snapper.x86_64: Módulo PAM para chamar snapper pam_ssh.x86_64: Módulo PAM para uso com chaves SSH e agente ssh pam_ssh_agent_686 86: Módulo PAM para autenticação com ssh-agent pam_ssh_agent_auth.x64_86: Módulo PAM para autenticação com ssh-agent pam_url.x64_86: Módulo PAM para autenticação com servidores HTTP pam_wrapper.x64_86: Uma ferramenta para testar aplicativos PAM e módulos PAM pam_yubico.x64_86: Um módulo de autenticação conectável para yubikeys libpamtest-doc.x64_86: A documentação da API libpamtest python-libpamtest.x64_86: Um wrapper python para libpamtest libpamtest.x64_86: Uma ferramenta para testar aplicativos PAM e módulos PAM libpamtest-devel.x64_XNUMX: Uma ferramenta para testar Aplicativos PAM e módulos PAM

Resumo

É importante ter um mínimo de conhecimento sobre o PAM se quisermos entender de uma forma geral como a autenticação é realizada toda vez que logamos em nosso computador Linux / UNIX. Também é importante saber que somente com a Autenticação Local podemos fornecer serviços a outros computadores em uma pequena rede de SME como Proxy, Mail, FTP, etc., todos concentrados em um único servidor. Todos os serviços anteriores - e muitos mais, como vimos anteriormente - têm seu módulo PAM.

Fontes consultadas

Versão em PDF

Baixe a versão em PDF aqui.

Até o próximo artigo!

Autor: Federico A. Valdés Toujague
federicotoujague@gmail.com
https://blog.desdelinux.net/author/fico