Este tutorial tiene por objeto documentar cómo configurar una máquina Linux, en concreto un Fedora 15, para que verifique el acceso de un usuario contrastando su contraseña contra un servidor de dominio de una Red de Windows y, en caso de que el acceso sea correcto, creando el directorio HOME del usuario en caso de aún no lo tenga en esa máquina.

Para ello utiliza el módulo pam_smb_auth, por ser mucho más sencillo de utilizar en redes donde existe un servicio NIS y donde los usuarios de la Red de Windows se mantienen en un servidor que también es Linux, ya que consideramos que el uso de pam_winbind es más propio de sistemas donde además se desea eliminar la depencia de NIS.

Para una mejor comprensión de PAM (Pluggable Authentication Modules) puede ser bueno que lea, aunque sea rápidamente, la información de las HOWTO de Samba, http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/pam.html.

Procedimiento

Lo primero que tenemos que hacer es instalar el paquete pam_smb_auth, pero este paquete ya no se distribuye con Fedora desde la versión 14, y en la versión 13 el paquete que se distribuía era el de Fedora 12. El paquete puede obtenerse de varias formas:

  • Utilizando un SRPM anterior de Fedora.
  • Compilando directamente el código fuente del paquete, que puede encontrarse en ftp.samba.org.

Yo he utilizado el primer método, así que me centraré en él. Actualmente el SRPM aún lo he encontrado en el mirror de Fedora de la RedIris de España, en el fichero pam_smb-1.1.7-11.fc12.src.rpm.

Se necesita compilar de nuevo, necesitaremos un PC con un Fedora que tenga instalado todo lo necesario para compilar paquetes (rpmbuild, gcc, gcc-c++, make, automake, etc.). Además, la compilación de este paquete nos exige tener instalados pam-devel y autoconf213. Una vez tengas todo instalado, cualquier podemos compilar el paquete mediante el comando:

$ rpmbuild --rebuild --target=i686 pam_smb-1.1.7-11.fc12.src.rpm

Se puede no usar la opción –target para usar la configuración por defecto de la máquina, o poner un objetivo distinto que soporte nuestro compilador (la alternativa más habitual será –target=x86_64). Este comando dejará (si termina correctamente) el binario en el fichero $HOME/rpmbuild/RPMS/i686/pam_smb-1.1.7-11.fc15.i686.rpm. En mi caso me quedé con una copia en $HOME para usarla más tarde y poder distribuirla a otros equipos, y borré la ruta $HOME/rpmbuild porque no la necesitaba para nada más. Instalamos este fichero, pero para ello adoptamos la identidad de root:

$ cd
$ sudo rpm -U --verbose pam_smb-1.1.7-11.fc15.i686.rpm

A partir de aquí, todos los comandos deben hacerse con la identidad de root.
Editamos el fichero /etc/pam_smb.conf que se ha instalado antes para que apunte a una máquina con un servidor de Dominio de Windows (valdría cualquier Windows NT, Windows Server, Linux+Samba, etc.). El fichero consta de tres líneas: el nombre del Dominio, la máquina de autenticación y la máquina auxiliar de autenticación (pueden ser la misma). Por ejemplo:

MYDOMINIO
SERVER1
SERVER2

En Linux la autenticación se hace mediante PAM, y los ficheros de configuración de PAM están en /etc/pam.d. Todas las configuraciones de PAM instaladas en Fedora incluyen el substack system-auth o password-auth, que son enlaces suaves a los ficheros system-auth-ac y password-auth-ac, que a su vez son ficheros generados por las herramientas de configuración de Fedora. Como pam_smb ya no es soportado por Fedora, sus herramientas ya no la contemplan, y tenemos que verlas como «agentes peligrosos» que pueden estropearnos la configuración sin que queramos. Vamos a proceder creando nuestro propio fichero y haciendo que estos enlaces apunten al nuestro. Si alguna vez algún «agente peligroso» deshace nuestra configuración sólo tendremos que rehacer los enlaces suaves (último paso). Creamos el fichero /etc/pam.d/file-auth-new, como copia del fichero system-auth-acy lo editamos:

$ cd /etc/pam.d
$ cp -a system-auth-ac file-auth-new
$ vi file-auth-new

El fichero debe quedar así (en negrita ponemos lo que añadimos y tachamos lo que quitamos):

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.

auth required   pam_env.so
auth sufficient pam_unix.so nullok try_first_pass
auth sufficient pam_smb_auth.so nolocal
auth requisite  pam_succeed_if.so uid >= 500 quiet
auth required   pam_deny.so

account required   pam_unix.so broken_shadow
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 500 quiet
account required   pam_permit.so

password requisite  pam_cracklib.so try_first_pass retry=3 type=
password sufficient pam_unix.so sha512 nis nullok try_first_pass use_authtok
password required   pam_deny.so

session optional                   pam_keyinit.so revoke
session required                   pam_limits.so
-session optional                  pam_systemd.so
session optional pam_mkhomedir.so umask=0077
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required                   pam_unix.so

Una vez creado, configuramos PAM para que use este fichero en vez de los que vienen por defecto en Fedora:

$ cd /etc/pam.d
$ ln -vsi file-auth-new system-auth
$ ln -vsi file-auth-new password-auth

Y esto debía ser suficiente, pero antes de terminar vamos a verificar que no hemos metido la pata o quizá no podamos volver a entrar en el sistema.

Verificación

La verificación desde el usuario root se hace en dos pasos: cambiando un usuario useroney luego cambiando a un usuario cualquiera a ver si podemos (necesitamos la contraseña de ese usuario cualquiera, así que usa tu identidad para la prueba). En el ejemplo marco en negrita el PROMPT del sistema para que os fijéis en qué usuario ejecuta cada comando:

[root ~]# su - userone
[userone ~]$ su - usertwo
Contraseña:
[usertwo ~]$ exit
[userone ~]$ exit
[root ~]# _

Si fuese la primera vez que el usuario accede al sistema, también veremos en pantalla algún mensaje informándonos de que se ha creado su directorio $HOME. Si acabada la prueba nos sobra ese directorio, y podemos borrarlo sin más con el comando rm -f /home/user.

Últimas consideraciones

  • La opción nolocal de pam_smb_auth.so se pone para que no trate de autenticar primero el usuario con el fichero /etc/passwd (es el comportamiento por defecto). Como ya tenemos encima una llamada a pam_unix.so que hace precisamente esto, el comportamiento por defecto de pam_smb_auth.so sería redundante. Además, como pam_unix.so viene de serie en Fedora es de suponer que esa tarea la haga de forma más acorde con la distribución que pam_smb_auth.so. O visto de otra forma: si quitamos la línea de pam_unix.so los usuarios locales no podrán entrar en la máquina, ni siquiera root, porque pam_smb_auth.so va ignorar lo que haya en /etc/passwd.
  • La opción broken_shadow que incorporamos en la primera línea de comprobación de la cuenta (account) es necesaria porque sino el módulo pam_unix.so vería que hay una cuenta obtenida desde el fichero nis:passwd que no puede resolver contra /etc/shadow.