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.