Tener una versión encriptada y una normal de la misma contraseña puede ser un problema cuando necesitas modificar las dos. Por suerte, Samba te ofrece una capacidad limitada para mantener las contraseñas sincronizadas. Samba tiene un par de opciones de configuración que pueden ser utilizadas para actualizar automáticamente una contraseña Unix normal cuando se actualiza la encriptada. Esta posibilidad puede activarse especificando la opción de configuración global unix password sync:
[global] encrypt passwords = yes smb passwd file = /usr/local/samba/private/smbpasswd unix password sync = yes
Con esta opción activada, Samba intentará cambiar la contraseña del sistema (como root) cuando la contraseña encriptada se cambie con smbpasswd. De todas formas, hay otras dos opciones que han de estar correctamente activadas para que esto funcione. La más fácil de las dos es passwd program. Esta opción solo establece el comando Unix usado para cambiar la contraseña de usuario estándar en el sistema. Por defecto su valor es /bin/passwd %u. En alguno sistemas Unix, esto es suficiente y no necesitas modificar nada, En otros, como Red Hat Linux, utiliza /usr/bin/passwd en su lugar. Además, puedes querer cambiar esto a otro programa o script en algún momento en el futuro. Por ejemplo, suponemos que quieres usar un script llamado changepass para cambiar la contraseña de un usuario. Recuerda que puedes usar la variable %u para representar el nombre de usuario actual. El ejemplo seria:
[global] encrypt passwords = yes smb passwd file = /usr/local/samba/private/smbpasswd unix password sync = yes passwd program = changepass %u
Este programa ha de ser llamado como el usuario root cuando esta activada la opción unix password sync. Esto se debe a que Samba no tiene, necesariamente, la antigua contraseña de texto plano del usuario.
La opción mas complicada de configurar es passwd chat. Esta funciona como un script de chat Unix. Establece una serie de cadenas para enviar así como las respuestas que se esperan desde el programa especificado en la opción passwd program. Por ejemplo, el passwd chat es el siguiente por defecto. Los delimitadores son los espacios entre los grupos de caracteres:
passwd chat = *old*password* %o\n *new*password* %n\n *new*password* %n\n *changed*
El primer grupo representa la respuesta esperada desde el programa de cambio de contraseñas. Fíjate en que puede contener comodines (*), que ayudan a generalizar los programas de 'chat' para ser capaces de manejar una amplia variedad de salidas similares. Aquí *old *password * indica que Samba espera cualquier línea desde el programa de contraseñas que contenga las letras old seguidas por las letras password, sin que importe lo que venga a cada lado o en medio de ellas. Hecho esto, Samba esperará indefinidamente una coincidencia. Si no recibe la respuesta esperada, la contraseña fallará.
El segundo grupo indica lo que Samba enviara como respuesta una vez que coincidan los datos del primer grupo. En este caso se ve %o\n. Esta respuesta tiene dos partes: la variable %o representa la contraseña anterior, mientras que /n es un carácter de nueva-linea. Por tanto, realmente es como si escribiéramos la contraseña antigua en la entrada estándar del programa de cambio de contraseñas y 'pulsáramos' Enter.
Después de esto hay otro grupo de respuesta, seguido por los datos que se enviaran de vuelta al programa de cambio de contraseñas. (De hecho, este proceso de envío/respuesta continua indefinidamente en cualquier 'script' de 'chat' estándar de Unix). Este script continua hasta que se encuentra el patrón final.
Puedes ayudar a que coincidan las cadenas de respuesta enviadas desde el programa de contraseñas con los caracteres que se muestran en la Tabla 6-6. Además, puedes usar los que se muestran en la Tabla 6-7 para ayudarte a formular tu respuesta.
Carácter | Definición |
---|---|
* | Cero o más apariciones de cualquier caracter |
`` `` | Te permite incluir cadenas que contengan espacios. Los asteriscos se siguen considerando comodines aun dentro de las comillas, y puedes representar una respuesta nula con unas comillas vacias. |
Carácter | Definición |
---|---|
%o | Antigua contraseña del usuario |
%n | Nueva contraseña del usuario |
\n | Caracter de Nueva-Linea |
\r | Caracter de Retorno de Carro |
\t | Caracter de Tabulacion |
\a | Un espacio |
Por ejemplo, puedes querer cambiar tu 'chat' de cambio de contraseñas al siguiente. Este maneja distintas situaciones donde no te será necesario introducir tu antigua contraseña. Además, manejará la nueva cadena all tokens updated successfully que envía Red Hat Linux:
passwd chat = *new password* %n\n *new password* %n\n *success*
De nuevo, el 'chat' por defecto será suficiente para la mayoría de los sistemas Unix. Si no es tu caso, puedes usar la opción global passwd chat debug para crear un nuevo 'chat' para el programa de cambio de contraseñas. Esta opción registra todo durante el proceso de 'chat' y su valor es lógico, como se muestra:
[global] encrypted passwords = yes smb passwd file = /usr/local/samba/private/smbpasswd unix password sync = yes passwd chat debug = yes log level = 100
Una vez que actives la prestación de depuración del 'chat', todas las entradas y salidas hechas o recibidas por Samba a través del 'chat' se enviaran a los registros de Samba con un numero máximo de 100, porque este es el valor que hemos introducido en la opción log level. Como esto puede generar multitud de errores de registro, puede ser más eficaz usar tu propio script, a través de la opción passwd program, en lugar de que /bin/passwd registre todo lo que pasa durante el intercambio. De todas formas, asegúrate de proteger tus ficheros de registro con unos permisos estrictos y borrarlos una vez que tengas la información que necesitas, ya que en ellos aparece la contraseña en texto plano.
El sistema operativo en el que corra Samba puede tener unos requisitos muy estrictos para las contraseñas validas, con el fin de hacerlas blindadas frente a ataques. Los usuarios han de ser conscientes de estas restricciones cuando cambien sus contraseñas.
Antes hemos dicho que la sincronización de contraseñas es limitada. Esto es así porque no hay una sincronización inversa del fichero encriptado smbpasswd cuando un usuario cambia una contraseña estándar Unix. Hay varias soluciones para esto, incluyendo NIS e implementaciones gratuitas del standard de módulos de autenticación (PAM), pero realmente y por ahora ninguno de ellos soluciona el problema. En un futuro, cuando Windows 2000 se extienda, veremos una solución con el Protocolo Ligero de Acceso al Directorio (LDAP) que promete hacer de la sincronización de contraseñas un asunto del pasado.