Í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:

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:
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
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
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
- Manuais de comando - páginas man.
- Autenticação: Página da Wikipedia em espanhol
- Módulos de autenticação plugáveis
- RED_HAT_ENTERPRISE_LINUX-6-DEPLAPENAMENTO_GUIDE-PEN-US
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