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 |