PAM
De SergiTurWiki
| Curs: | SambasobreLDAP, LinuxAdministracioAvancada, SeguretatXarxesInformàtiques |
| Fitxers: | Ldap2.pdf,AutenticacioiAutoritzacionsLinux.pdf |
| Repositori SVN: | https://anonymous@svn.projectes.lafarga.cat/svn/iceupc/SambaSobreLDAP |
| Usuari: | anonymous |
| Paraula de pas: | sense paraula de pas |
| Autors: | Sergi Tur Badenas, Lluís Pérez Vidal |
PAM (Pluggable Authentication Modules) és un mecanisme flexible per l'autenticació d'usuaris. Permet utilitzar sistemes d'autenticació diferents al sistema tradicional d'autenticació (fitxer /etc/passwords) sense necessitat de canviar el disseny de les aplicacions. PAM permet desenvolupar programes amb independència de l'esquema d'autenticació utilitzant mòduls d'autenticació en temps d'execució i no haver de tornar a compilar per canviar l'esquema d'autenticació.
PAM és un invent de SUN (especificació amb diferents implementacions). Linux-PAM és la implementació de PAM a Linux.
Contingut |
Esquemes d'autenticació
Consulteu:
LPI_107.1._Gestió_d'usuaris_i_comptes_de_grup_i_els_fitxers_de_sistema_relacionats#Esquemes_d.27autenticaci.C3.B3
NSSwitch vs PAM
NOTA: Observeu que només amb la base de dades d'usuaris, grups i paraules de pas, a les qual podem accedir amb NSSwitch no hi ha prou per a treballar amb usuaris. A més cal definir com es fan processos com l'autenticació/login, com es gestionen les sessions d'usuari, com es gestionen les comptes d'usuari, etc. Tot això és el que fa PAM però sense lligar-se a cap tecnologia concreta
Instal·lació
El més possible és que PAM ja estigui instal·lat ja que el suporten gairebé totes les distribucions. Si no tenim PAM segurament estem utilitzant una distribució Linux molt antiga.
Configuració
La configuració de PAM es duu a terme amb els fitxers de la carpeta /etc/pam.d.
NOTA: Alguns sistemes poden tenir la configuració de PAM tota al fitxer /etc/pam.conf.
Cada fitxer d'aquesta carpeta representa un servei/aplicació que fa ús de PAM.Per exemple el fitxer:
/etc/pam.d/login
Configura l'ús de PAM per l'aplicació login.
Sintaxi
NOTA: Els comentaris en els fitxers de configuració de PAM es fan amb el caràcter #.
Cada fitxer té les normes que s'apliquen per un servei (aplicació) “PAM-aware” i conté una llista ordenada de normes on cada línia o norma té la següent sintaxi:
type control module-path module-arguments
Com podem veure disposem de 4 tokens amb les seves respectives opcions:
- type: El token type indica quin tipus d'autenticació s'utilitzarà per aquest mòdul. Els mòduls del mateix tipus es poden apilar per tal de requerir que l'usuari hagi de complir amb requisits múltiples per autenticar-se.
- account: Determina si l'usuari pot accedir a aquest servei, si els password ha expirat, si és una hora i una data permesa d'accés, etc.
- auth: Determina com podem saber si l'usuari és qui diu qui és (Típicament amb password però hi ha altres opcions). També assigna grups.
- password: Proveix el mecanisme per canviar l'autenticació de l'usuari (password).
- session: Determina les coses que s'han de fer abans i/o després que l'usuari s'hagi autenticat.
- control: Determina que s'ha de fer si l'autenticació falla. Hi ha quatre opcions possibles:
- requisite: Si el mòdul falla, es denega l'accés a l'usuari immediatament.
- required: Igual que l'anterior també denega l'autenticació però es continua l'execució de la resta de mòduls abans de tornar el control a l'aplicació.
- sufficient: El resultat del mòdul és ignorat si falla. Ara bé, si és un èxit només serà un èxit de tota la pila si no hi cap mòdul required ha fallat.
- optional: S'ignora el resultat del mòdul. Només és necessari, per tal que l'autenticació sigui un èxit, quan no hi ha altres mòduls associats al mateix servei i tipus.
- module-path: El path indica quin mòdul utilitzar i opcionalment pot indicar la localització del mòdul. Si no s'indica la localització és que el mòdul es troba a la carpeta per defecte de mòduls de PAM (normalment /usr/lib/security o /lib/security).
- module-arguments: Són arguments que passem al mòdul. Cada mòdul pot tenir els seus propis arguments.
Hi ha una segona sintaxi més complicada per al token control amb parells de valors:
[value1=action1 value2=action2 ...]
On valueN correspon a l'error de retorn per la funció invocada pel mòdul. Els valors possibles són:
- success
- open_err
- symbol_err
- service_err
- system_err
- buf_err
- perm_denied
- auth_err
- cred_insufficient
- authinfo_unavail
- user_unknown
- maxtries
- new_authtok_reqd
- acct_expired
- session_err
- cred_unavail
- cred_expired
- cred_err
- no_module_data
- conv_err
- authtok_err
- authtok_recover_err
- authtok_lock_busy
- authtok_disable_aging
- try_again
- ignore
- abort
- authtok_expired
- module_unknown
- bad_item
- default
La llista completa es pot trobar a /usr/include/security/_pam_types.h.
L'acció N pot ser:
- enter sense signe: salta al mòdul n de la pila.
o
- ignore: si tenim una pila de mòduls, el resultat d'aquest mòdul no contribuirà al resultat final de la pila.
- bad: indica que el codi de retorn s'ha d'interpretar com que l'autenticació no és correcta. Si és el primer mòdul de la pila en fallar, el resultat final de la pila és el d'aquest mòdul.
- die: igual que bad però atura immediatament PAM i retorna el control a l'aplicació.
- ok: indica que el resultat d'aquest mòdul pot contribuir al resultat final de la pila. Si l'estat anterior era SUCCESS el valor de retonr d'aquest mòdul pot sobreescriure el valor de retorn de la pila però si l'estat anterior era d'error no.
- done: igual que ok però acaba immediatament PAM.
- reset: borra l'estat en memòria de la pila i continua amb el següent mòdul de la pila.
Aquesta segona forma de sintaxi permet controlar de forma més granular PAM (però també està més propera al perfil de programador que no pas al perfil d'administrador). Les equivalències amb la sintaxi anterior són:
- required: [success=ok new_authtok_reqd=ok ignore=ignore default=bad]
- requisite: [success=ok new_authtok_reqd=ok ignore=ignore default=die]
- sufficient: [success=done new_authtok_reqd=done default=ignore]
- optional: [success=ok new_authtok_reqd=ok default=ignore]
Si la configuració de PAM està tota al fitxer /etc/pam.conf la configuració canvia una mica. En comptes de tenir un fitxer /etc/pam.d/login:
auth required pam_unix.so nulok
Tindreu un fitxer /etc/pam.conf amb:
login auth required pam_unix.so nulok
Qualsevol error de sintaxi implica un error en l'autenticació (per seguretat). L'error corresponent es mostra al sistema de logs syslog.
Apilar mòduls
Les normes dels fitxers de configuració poden ser apilades per tal d'utilitzar més d'un mòdul a l'autenticar. L'orde de la pila és important segons els tipus de directiva de control que utilitzem (l'ordre dels mòduls required no és important en canvi, amb els indicadors de control sufficient i requisite l'ordre si és important. Per exemple el següent fitxer de configuració de rlogin utilitza cinc mòduls auth:
auth required pam_nologin.so auth required pam_securetty.so auth required pam_env.so auth sufficient pam_rhosts_auth.so auth required pam_stack.so service=system-auth
Abans que és pugui fer un rlogin és verifica que no existeixi el fitxer /etc/nologin no existeixi (pam_nologin.so), que no s'estigui entrant com a root (pam_securetty.so) i es pugui carregar qualsevol variable d'entorn (pam_env.so). Finalment és mira d'autenticar amb l'autenticació de rhosts (pam_rhosts_auth.so) que si falla es pot ignorar (sufficient) i provar amb l'autenticació del sistema (pam_stack.so service=system-auth).
PAM per defecte. Modul other
El servei other és el servei per defecte i el que utilitzaran tots els serveis que no estiguin específicament configurats a PAM. Si executem
$ cat /etc/pam.d/other ............ @include common-auth @include common-account @include common-password @include common-session
Veurem que delega el comportament als fitxers common-auth, common-account, common-password, i common-session.
$ cat /etc/pam.d/common-aut ......................... auth required pam_unix.so nullok_secure
$ cat /etc/pam.d/common-auth cat /etc/pam.d/common-auth
$ cat /etc/pam.d/common-password ........ password required pam_unix.so nullok obscure min=4 max=8 md5
Fitxer /etc/pam.conf
Algunes distribucions tenen la configuració de PAM en aquest fitxer però en la majoria de casos es reparteix la configuració en diferents fitxers de la carpeta /etc/pam.d.
Carpeta /etc/pam.d
En aquesta carpeta es guarden els fitxers de configuració de PAM.
Carpeta /etc/security
Fitxer access.conf
Fitxer group.conf
Fitxer limits.conf
Fitxer pam_env.conf
Fitxer time.conf
Exemples
Crear la home de l'usuari durant el primer login
$ sudo joe /etc/pam.d/common-session
I afegiu:
session required pam_mkhomedir.so skel=/etc/skel umask=0022
Mòduls PAM
El següent esquema ens mostra la flexibilitat de PAM:
Vegeu també:
Mòduls per defecte. libpam-modules
Els mòduls que ja venen suportats per defecte són proveïts pel paquet libpam-modules:
$ dpkg -l | grep pam ii libpam-modules 0.79-4 Pluggable Authentication Modules for PAM ii libpam-runtime 0.79-4 Runtime support for the PAM library ii libpam0g 0.79-4 Pluggable Authentication Modules library
I es localitzen o instal·len a la carpeta /lib/security:
$ dpkg -L libpam-modules | grep lib/security /lib/security/pam_access.so /lib/security/pam_debug.so /lib/security/pam_deny.so /lib/security/pam_env.so /lib/security/pam_filter.so /lib/security/pam_ftp.so /lib/security/pam_group.so /lib/security/pam_issue.so /lib/security/pam_lastlog.so /lib/security/pam_limits.so /lib/security/pam_listfile.so /lib/security/pam_localuser.so /lib/security/pam_mail.so /lib/security/pam_mkhomedir.so /lib/security/pam_motd.so /lib/security/pam_nologin.so /lib/security/pam_permit.so /lib/security/pam_rhosts_auth.so /lib/security/pam_rootok.so /lib/security/pam_securetty.so /lib/security/pam_selinux.so /lib/security/pam_shells.so /lib/security/pam_stress.so /lib/security/pam_succeed_if.so /lib/security/pam_tally.so /lib/security/pam_time.so /lib/security/pam_unix.so /lib/security/pam_userdb.so /lib/security/pam_warn.so /lib/security/pam_wheel.so /lib/security/pam_xauth.so /lib/security/pam_unix_acct.so /lib/security/pam_unix_auth.so /lib/security/pam_unix_passwd.so /lib/security/pam_unix_session.so
Podeu consultar com funcionen alguns del mòduls més habituals a http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/sag-module-reference.html. Un altre recurs interesant amb exemples és http://www.linuxtopia.org/online_books/espaniol/centos_linux_guides/centos_linux_reference_guide/s1-pam-sample-simple.html
Cracklib
Consulteu:
Cracklib#Configuraci.C3.B3_de_PAM
mod-auth-pam. Apache
TODO
As our example, we'll install and configure mod_auth_pam, an Apache module that allows you to authenticate users of your webserver using PAM. For the purpose of this example, I'll assume you have apache installed. If it's not installed already you should be able find installation packages from your distributor.
Our goal will be to configure a restricted area of our webserver, a family/ directory, to authenticate users via PAM. This directory contains private family information, and should only be accessible to members of the user group family.
First, you'll want to download mod_auth_pam from http://blank.pages.de/pam/mod_auth_pam/. The following commands will compile mod_auth_pam (you must be logged in as root): ~# tar xzf mod_auth_pam.tar.gz
~# cd mod_auth_pam−1.0a
~/mod_auth_pam−1.0a# make
~/mod_auth_pam−1.0a# make install
If you have any trouble installing the mod_auth_pam module, make sure you've installed your distribution's apache−dev package. After you've installed mod_auth_pam, you'll need to restart apache. Apache can usually by restarted by typing the following command (again, you must be root): ~# /etc/init.d/apache restart
The PAM configuration for Apache is stored in /etc/pam.d/httpd. The default configuration (which was installed when you installed mod_auth_pam) is secure, but it uses a module (pam_pwdb.so) which may not be available on many systems. (Besides, configuring it from scratch will be fun!) So delete the /etc/pam.d/httpd file, and start with a fresh one. 5.4.1. Deciding how to configure PAM If we're going to configure how PAM deals with Apache's authentication requests, we need to figure out exactly what we need PAM to check for. First, we want PAM to make sure the user's password matches their password in the standard unix password database. This sounds like the 'auth' type and the pam_unix.so module. We'll want the module's control type to be set to 'required', so authentication will fail without a correct password. Here's what the first line of our /etc/pam.d/httpd looks like:
auth required pam_unix.so
Secondly, we must make sure that the users account is valid (i.e. their password has not expired or any such nastiness). This is the 'account' type and is also provided by the pam_unix.so module. Again, we'll set this module's control type to 'required'. After adding this line, our /etc/pam.d/httpd configuration looks like this:
auth required pam_unix.so
account required pam_unix.so
It's not terribly sophisticated, but it does the job. It ought to be a good start for learning how to configure PAM services. 5.5. Configuring Apache Now that PAM is configured to authenticate apache's requests, we'll configure apache to properly utilize PAM authentication to restrict access to the family/ directory. To do so, add the following lines to your httpd.conf (usually stored in /etc/apache/ or /etc/httpd):
<Directory /var/www/family>
AuthPAM_Enabled on
AllowOverride None
AuthName "Family Secrets"
AuthType "basic"
require group family
</Directory>
You may need to replace /var/www/ with the default location of web documents, which is often /home/httpd/. Wherever that is, you'll need to create the family directory. Before we test our setup, I'll take a moment to explain the Apache configuration you just entered. The <Directory> directive is used to encapsulate configuration data for this directory. Inside this directive, we've enabled PAM authentication ("AuthPAM_enabled on"), turned off any overriding of this configuration ("AllowOverride none"), named this authentication zone "Family Secrets" ("AuthName "Family Secrets""), set the http authentication (not the PAM authentication) type to the default ("AuthType "basic""), and required the user group family ("require group family"). 5.6. Testing our setup Now that we've got everything setup up properly, it's time to revel in our success. Fire up your favorite web browser and head over to http://your−domain/family/ (replacing your−domain with, well, your domain). You are now an uber−authenticator!
Altres Mòduls
Si feu una cerca als repositoris, veureu la llarga llista de mòduls possibles que es poden instal·lar:
$ sudo apt-cache search libpam libpam libpam-ccreds - Pam module to cache authentication credentials libpam-chroot - Chroot Pluggable Authentication Module for PAM libpam-cracklib - PAM module to enable cracklib support libpam-devperm - PAM module to change device ownership on login libpam-doc - Documentation of PAM libpam-dotfile - A PAM module which allows users to have more than one password libpam-encfs - PAM module to automatically mount encfs filesystems on login libpam-foreground - create lockfiles describing which users own which console libpam-heimdal - PAM module for Heimdal Kerberos 5 libpam-http - a PAM module to authenticate via http/https libpam-krb5 - PAM module for MIT Kerberos libpam-ldap - Pluggable Authentication Module allowing LDAP interfaces libpam-modules - Pluggable Authentication Modules for PAM libpam-mount - PAM module that can mount volumes for a user session libpam-musclecard - PAM module for MuscleCard Framework libpam-mysql - PAM module allowing authentication from a MySQL server libpam-ncp - PAM module allowing authentication from a NetWare server libpam-openafs-kaserver - AFS distributed filesystem kaserver PAM module libpam-openafs-session - PAM Module to get AFS tokens and set up PAG libpam-opie - Use OTPs for PAM authentication libpam-p11 - PAM module for using PKCS#11 smart cards libpam-passwdqc - replacement for the pam_cracklib module libpam-pgsql - PAM module to authenticate using a PostgreSQL database libpam-poldi - PAM module allowing authentication using a OpenPGP smartcard libpam-pwdfile - PAM module allowing authentication via an /etc/passwd-like file libpam-pwgen - a password generator libpam-radius-auth - The PAM RADIUS authentication module libpam-runtime - Runtime support for the PAM library libpam-shishi - PAM module for Shishi Kerberos v5 libpam-ssh - enable SSO behavior for ssh and pam libpam-tmpdir - automatic per-user temporary directories libpam-umask - adjust users' default umask using PAM libpam-unix2 - Blowfish-capable PAM module
Com podeu veure normalment els paquets s'anomenen libpam-xxx.
Hi han mòduls per a tots tipus d'autenticacions:
- PAM Cryptocard Module
- Pam Smart Card Module
- Pam module for SMB
- SMB (Server Message Block
- PAM per LDAP: http://www.padl.com/OSS/pam_ldap.html
Vegeu també
Enllaços externs
- The Linux-PAM System Administrators' Guide
- The Module Writers' Guide
- Application Developers' Guide
- http://www.linuxtopia.org/online_books/espaniol/centos_linux_guides/centos_linux_reference_guide/s1-pam-config-files.html
- http://db.assam-glug.org/documentations/Howto/User-Authentication-HOWTO/x101.html
- http://freshmeat.net/search/?q=pam§ion=projects&x=0&y=0
- http://www.openwall.com/pam
- http://www.newsforge.com/article.pl?sid=04/09/20/1547246
- http://www.kernel.org/pub/linux/libs/pam/modules.html
- http://www.sun.com/software/solaris/pam/

