Mostrando entradas con la etiqueta htpasswd. Mostrar todas las entradas
Mostrando entradas con la etiqueta htpasswd. Mostrar todas las entradas

17 abr 2011

Doble Validación de usuarios en Squid-Cache con PAM

Escenarios atípicos soluciones correctas

Optimizando los recursos y servidores de una entidad que contaba con dos servidores proxy-cache Squid, para redes y usuarios diferentes, propusimos usar un solo servidor como proxy y que validara de dos formas diferentes.

Escenario

1er servidor proxy estaba validando contra un servidor LDAP externo

2do servidor proxy estaba validando con una librería de Squid llamada ncsa_auth contra un fichero password, alojado en /etc/squid/

Cuestionamiento

¿Por qué no unificar todos los usuarios al LDAP o todos los usuarios al fichero password?

Re: Existen servicios en la red de esta entidad que validan contra el LDAP, como es el caso de un servidor FTP, Correo Electrónico, Jabber, Antivirus, etc. y los usuarios que están en el fichero password, son usuarios externos y que muchos de ellos son temporales y no deberían de estar relacionados a los otros servicios que están en la intranet.

No se preguntó más y comenzamos la tarea de preguntarle a San Google y este respondió muy poco y lo que respondió, lo dio bastante escueto y poco documentado, ya que nos presentamos a un escenario atípico, así que propuse crear un escenario virtual y darle solución cuanto antes para posteriormente llevarlo a la práctica.

Solución

Debemos de tener instalada como requisito indispensable, la librería libapache-htpasswd-perl (Administrar archivo de contraseñas Unix crypt-style), ya que esta librería es la que tiene la aplicación htpasswd y si no tenemos previamente instalado el apache2 o no vamos a usarlo, no la tendríamos en el sistema.

Creamos el fichero password en la ruta que decidamos y adicionamos nuestro primer usuario, llamado user1

htpasswd -c /etc/squid/password user1
New password: (introducimos la contraseña)
Re-type new password: (volvemos a introducir la contraseña)

Debemos instalar libpam-ldapd y configurarla luego de instalada, ya que esta es la que nos va permitir usar la librería de PAM con LDAP, para que PAM se pueda conectar con servidor externo de LDAP.
Nota: Por que usar libpam-ldapd y no usar libpam-ldap, la librería primera delega las consultas LDAP a un servicio no privilegiado centralizado (nslcd) que permite establecer una separación entre el proceso que utiliza la información LDAP y el demonio que hace las consultas LDAP. Esto simplifica la gestión de las conexiones LDAP seguras, credenciales de autenticación LDAP, ofrece un mecanismo más sencillo para realizar el tratamiento de conexiones fallidos y la depuración y evita cargar LDAP y las librerías asociadas en la mayoría de las aplicaciones. No siendo así con la segunda librería.

aptitude install libpam-ldapd

Nos preguntara los siguientes puntos
Identificador del servidor LDAP: ldap://ldap.intranet.org
Nombre distinguido (dn): dc=intranet,dc=org
Versión de LDAP: 3
Hace falta un usuario para acceder a la base de datos ldap: Si
Desea hacer que la configuración solo pueda leer o escribir el propietario: SI
Dar privilegios especiales de ldap para root: No
Cuenta ldap para root: cn=admin,dc=intranet,dc=org
Contraseña ldap para root: (introducimos la contraseña del admin en LDAP)
Local crypt to use when changing passwords: md5

Ya está instalada, configurada nuestra libreria y lista para ser usada por PAM.
Crear el fichero que por el cual Squid le preguntara a PAM como validar sus usuarios
Este fichero siempre debe de ir con el nombre del servicio, según dice el manual de PAM
touch /etc/pam.d/squid
Editar este fichero con algo similar a:

#%PAM-1.0

auth sufficient /lib/security/pam_ldap.so config=/etc/pam_ldap.conf
account sufficient /lib/security/pam_ldap.so config=/etc/pam_ldap.conf

auth optional /lib/security/pam_userdb.so db=/etc/squid/password
session optional /lib/security/pam_userdb.so db=/etc/squid/password
account optional /lib/security/pam_userdb.so db=/etc/squid/password


Aún no hemos terminado, queda por configurar el squid para que valide con PAM, agregándole esta línea.

auth_param basic program /usr/lib/squid/pam_auth
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours

Según el manual de pam_auth
Debemos cambiarles los permisos siguientes, si no está librería es inutilizable
chown root pam_auth
chmod u+s pam_auth

Después de esto reiniciamos el Squid
invoke-rc.d squid restart

Y nuestra a validación doble en squid. Ya está funcional
Nota: el servicio PAM no hace falta reiniciarlo, solo se reinicia el servicio que usa PAM, en este caso es el Squid