Linux PAM - Módulos de Autentificación Conectables

TÍTULO:			Linux PAM - Módulos de Autentificación Conectables
VERSIÓN:		1.0 (08-ABRIL-2002)
VERSIÓN LFS:		CUALQUIERA
AUTOR:			Yannick Tousignant <yannick@iscream.ca>
TRADUCTOR:	Proyecto LFS-ES

SINOPSIS:
	Cómo compilar, instalar y configurar Linux-PAM.


CONTENIDO
=========

  1. INTRODUCCIÓN
  2. PAQUETES FUENTE
  3. INSTALACIÓN DE CRACKLIB
  4. INSTALACIÓN DE PAM
  5. INSTALACIÓN DE SHADOW
  6. CONFIGURACIÓN DE PAM
  7. MÁS ALLÁ DE PAM


INTRODUCCIÓN
============

Este documento describe cómo compilar, instalar y configurar los Módulos
de Autentificación Conectables en un sistema Linux. PAM es un juego de
librerías compartidas que habilitan al administrador local del sistema
para escoger el modo en que los programas autentificarán a los usuarios.
En otras palabras, es posible intercambiar los métodos de autentificación 
que usa una aplicación que funcione con PAM sin necesidad de (reescribir o)
recompilar. Es mas, uno podría actualizar el sistema de autentificación
local sin tocar las aplicaciones en sí. Este es el propósito del proyecto
Linux-PAM de separar el desarrollo de programas de garantización de 
privilegios del desarrollo de esquemas de autentificación seguros y 
apropiados. Esto se logra al proveer una librería de funciones que
una aplicación pueda usar para pedir que un usuario sea autenticado.


PAQUETES FUENTE
=================

Necesitas las siguientes fuentes para comenzar la instalación:

http://www.us.kernel.org/pub/linux/libs/pam/pre/library/Linux-PAM-0.75.tar.bz2
http://www.us.kernel.org/pub/linux/libs/pam/pre/library/cracklib-files.tgz
http://ftp.pld.org.pl/software/shadow/old/shadow-20001016.tar.gz


INSTALACIÓN DE CRACKLIB
=======================

ACTUALIZACIÓN DE ÚLTIMO MINUTO: El paquete cracklib parece ser sumamente
inestable con esta versión de pam o de shadow. Siéntete libre de 
experimentarlo...

Si se introducen bastantes números+letras, terminará con un fallo
de passwd.

root:~# passwd 
New UNIX password: 
Segmentation fault

Si consigues la manera de corregirlo o algún arreglo temporal, envíame un 
correo (N. del T.: en inglés) directo a yannick@iscream.ca

NO RECOMENDAMOS INSTALAR CRACKLIB EN SISTEMAS CRUCIALES!!!

CrackLib es una librería que contiene una función hecha en C que puede ser
usada en un programa parecido a passwd. La idea es simple: intentar prevenir
a los usuarios de escoger contraseñas que puedan ser adivinadas por "Crack" 
filtrándolas, en principio.

Esta es una versión precompilada de cracklib, si alguien pudiera venir con una
receta sobre cómo compilarla... Por ahora, extraigamos y movamos los ficheros.

Si extraes este paquete, se creará una carpeta llamada "usr", no accedas a 
ella y ejecuta :

cp usr/include/* /usr/include
cp usr/lib/* /usr/lib
cp usr/sbin/* /usr/sbin


INSTALACIÓN DE PAM
==================

Extrae el paquete de fuentes y entra en el directorio de las fuentes y
escribe los siguientes comandos :

./configure --enable-read-both-confs \
	--with-mailspool=/var/mail &&
make &&
make install &&
cd /lib &&
ln -sf libpam.so.0.75 libpam.so &&
ln -sf libpamc.so.0.75 libpamc.so

Esto instalará las librerías de pam en /lib, los módulos de pam en /lib/security
y los archivos de configuración de pam en /etc/security.


INSTALACIÓN DE SHADOW
=====================

Ahora necesitas recompilar el entorno de contraseñas ocultas (o shadow
password suite) y enlazarlo con las librerías de pam. Sería algo como:

cp src/useradd.c src/useradd.c.backup &&
sed 's/\(.*\) (nflg || \(.*\))\(.*\)/\1\2\3/' \
   src/useradd.c.backup > src/useradd.c &&
./configure --prefix=/usr --with-libpam &&
make &&
make install &&
cd /lib &&
mv libshadow.*a /usr/lib &&
ln -sf libshadow.so.0 libshadow.so &&
cd /usr/lib &&
ln -sf ../../lib/libshadow.so &&
cd /usr/sbin &&
ln -sf vipw vigr &&
cd /usr/share/man/man8 &&
ln -sf vipw.8 vigr.8

Ahora, si haces un "ldd /bin/login", el binario debería estar enlazado
a pam.

DEJA UNA SESIÓN ABIERTA HASTA QUE TERMINES, EN ESTE MOMENTO NO 
PUEDES ENTRAR AL SISTEMA !!!


CONFIGURACIÓN DE PAM
====================

Ahora, tienes dos maneras de configurar pam. La primera es en el fichero
de configuración /etc/pam.conf. Este fichero puede tener toda tu
configuración para cada programa enlazado a las librerías de pam.

La otra manera es crear el directorio /etc/pam.d y luego configurar cada
uno de los programas en un fichero separado. Si existe algún directorio
llamado /etc/pam.d/ entonces libpam usará los archivos contenidos en
este directorio. No obstante, en la ausencia del directorio /etc/pam.d/
se usa el archivo /etc/pam.conf.

Para simplificar las cosas un poco, vamos a usar el fichero pam.conf para
configurar todo en un solo paso. Si crees que vas a extender tu sistema
en demasía, mejor usa el directorio pam.d...

Para más información, por favor refiérete a este documento :

http://www.us.kernel.org/pub/linux/libs/pam/Linux-PAM-html/pam.html

Aquí está un ejemplo de un fichero pam.conf, úsalo bien.

cat > /etc/pam.conf << "EOF"
# ---------------------------------------------------------------------------#
# /etc/pam.conf                                                              #
# ---------------------------------------------------------------------------#
# $Id: pam.txt,v 1.2 2003/03/09 12:35:30 macana Exp $
# ---------------------------------------------------------------------------#
# serv. module     ctrl       module [path]     ...[args..]                  #
# name  type       flag                                                      #
# ---------------------------------------------------------------------------#

# 'pam_deny' deny everyting and 'pam_warn' logs it.
other   auth       required   pam_deny.so
other   auth       required   pam_warn.so
other   account    required   pam_deny.so
other   password   required   pam_deny.so
other   password   required   pam_warn.so
other   session    required   pam_deny.so

login   auth       requisite  pam_securetty.so # /etc/securetty (CONSOLE)
login   auth       required   pam_unix.so
login   auth       optional   pam_group.so # group.conf (CONSOLE_GROUPS)
login   auth       requisite  pam_nologin.so # /etc/nologin (NOLOGINS_FILE)
login   auth       required   pam_env.so # pam_env.conf (ENVIRON_FILE)
login   account    required   pam_unix.so
login   account    requisite  pam_time.so # time.conf (PORTTIME_CHECKS_ENAB)
login   account    required   pam_access.so # access.conf (/etc/access.defs)
login   session    required   pam_unix.so
login   session    required   pam_limits.so # limits.conf (/etc/limits)
login   session    optional   pam_lastlog.so # (LASTLOG_ENAB)
login   session    optional   pam_mail.so standard noenv # (MAIL_CHECK_ENAB)
login   session    optional   pam_motd.so # (MOTD_FILE)
login   password   required   pam_unix.so shadow md5

passwd  password   required   pam_unix.so shadow md5

su      auth       sufficient pam_rootok.so
su      auth       required   pam_unix.so
su      account    required   pam_unix.so
su      session    required   pam_unix.so

shadow  auth       sufficient pam_rootok.so
shadow  auth       required   pam_unix.so
shadow  account    required   pam_unix.so
shadow  session    required   pam_unix.so
shadow  password   optional   pam_permit.so

EOF


Debes crear el fichero securetty antes de poder acceder al sistema :

cat > /etc/securetty << "EOF"
tty1
tty2
tty3
tty4
tty5
tty6
EOF

También debes comentar las variables que no se usan en /etc/login.defs...

MOTD_FILE
DIALUPS_CHECK_ENAB
LASTLOG_ENAB
MAIL_CHECK_ENAB
OBSCURE_CHECKS_ENAB
PORTTIME_CHECKS_ENAB
CONSOLE
MOTD_FILE
NOLOGINS_FILE
SU_WHEEL_ONLY
CRACKLIB_DICTPATH
PASS_CHANGE_TRIES
PASS_ALWAYS_WARN
MD5_CRYPT_ENAB
CONSOLE_GROUPS
ENVIRON_FILE
PASS_MIN_LEN

También puedes borrar los antiguos ficheros /etc/limits y login.access.
Toda la configuración ahora está en /etc/security/ y algunos ficheros
siguen en el directorio /etc. (ojear el pam.conf)

He tenido problemas con los comandos useradd/groupadd ahora enlazados
con pam.
Si le quito el comentario a "shadow  password   optional   pam_permit.so",
el comando funciona bien, pero aparece un mensaje de error :

root:/etc# useradd -g 100 -s /bin/bash -m test
useradd: PAM chauthtok failed

También, pam_issue.so no parece funcionar, así que le dejé este trabajo
a /etc/login.defs.

Hay cosas que no entiendo, no soy un experto en pam, así que por favor
envíame un correo a yannick@iscream.ca para completar este hint.


MÁS ALLÁ DE PAM
===============

Ahora que pam está instalado, debes recompilar tus demonios favoritos con
soporte para pam. p. ej.: --with-pam ;-)

He aquí un ejemplo para el ampliamente usado openssh :

sshd    auth       requisite  pam_securetty.so
sshd    auth       required   pam_unix.so
sshd    account    required   pam_unix.so
sshd    session    required   pam_unix.so
sshd    password   required   pam_unix.so shadow md5