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.
Table: Caracteres de Respuesta para el programa de 'chat' de contraseñas|| 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. ||
Table: Caracteres de Envio para el programa de 'chat' de contraseñas.|| 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.
Opciones de Configuración de las Contraseñas
Las opciones de la Tabla 6-8 te ayudaran a trabajar con las contraseñas en Samba:
Table: Opciones de configuración de las contraseñas.||
Table: Opciones de configuración de las contraseñas.|| Opción || Parámetros || Función || Valor por defecto || Ámbito || || encrypt passwords || Lógico || Activa las contraseñas encriptadas. || no || Global || || unix password sync || Lógico || Si su valor es yes, Samba actualiza las contraseñas estándar de Unix cuando un usuario cambia su contraseña enciptada. || no || Global || || passwd chat || Carácter (comandos del "chat") || Establece la secuencia de comandos que se enviará al programa de contraseñas. || Mira la sección anterior en este capítulo || Global || || passwd chat debug || Lógico || Envía la depuración del proceso de cambio de contraseñas a los ficheros de registro con una profundidad de 100 || no || Global || || passwd program || Carácter (comandos Unix) || Establece el programa a usar para cambiar las contraseñas. || /bin/passwd %u || Global || || password level || Numérico || Establece el numero de permutaciones con letras mayúsculas que se usarán al comprobar una contraseña. || None || Global || || update encrypted || Lógico || Si su valor es yes, Samba actualizará la contraseña encriptada cuando un usuario se conecte con una contraseña de texto plano. || no || Global || || null passwords || Lógico || Si su valor es yes, Samba permitirá el acceso a usuarios con contraseñas nulas. || no || Global || || smb passwd file || Carácter (Ruta completa al fichero) || Especifica el nombre del fichero de contraseñas encriptadas. || /usr/local/samba /private /smbpasswd || Global || || hosts equiv || Carácter (Ruta completa al fichero) || Especifica el nombre del fichero que contiene los equipos y usuarios que se pueden conectar sin usar contraseña. || None || Global || || use rhosts || Carácter (Ruta completa al fichero) || Especifica el nombre de un fichero .rhosts que permite a los usuarios conectarse sin usuar contraseña. || None || Global || ||
unix password sync
Esta opción global permite a Samba actualizar el fichero de contraseñas estándar de Unix cuando un usuario cambia su contraseña encriptada. La contraseña encriptada esta almacenada en el servidor Samba en el fichero smbpasswd, que por defecto se encuentra en el directorio /usr/local/samba/private. Puedes activar esta opción de la forma siguiente:
[global]
unix password sync=yes
Con esta opción activada, Samba modifica la contraseña encriptada y, además, intenta modificar también la contraseña Unix estándar pasando el nombre de usuario y la contraseña nueva al programa de cambio de contraseñas especificado en la opción passwd program (de la que hablamos antes). Fíjate en que Samba no necesita, obligatoriamente, tener acceso a la contraseña en texto plano para este usuario, por lo que el programa de cambio de contraseñas debe ser ejecutado como root
6.1. Si no se realiza el cambio de la contraseña Unix, sea por la razón que sea, tampoco lo hará la contraseña encriptada.
encrypt passwords
Esta opción establece el uso de contraseñas encriptadas o de texto plano para la autenticación. Si la opción esta activada con yes Samba esperara que los clientes envíen contraseñas encriptadas:
encrypt passwords = yes
Por defecto, Windows NT con Service Pack 3 o superior y Windows 98 envían contraseñas encriptadas a través de la red. Si activas estas contraseñas, has de tener un fichero smbpasswd válido con los nombres de los usuarios que autenticarás con contraseñas encriptadas (Mira la sección ``El fichero smbpasswd
, en este mismo capitulo). Además, Samba debe saber la localización del fichero smbpasswd; si no está en el directorio por defecto (normalmente /usr/local/samba/private) has de dárselo usando la opción smb passwd file. Si lo deseas, puedes usar la opción update encrypted para forzar a Samba a actualizar el fichero smbpasswd con las contraseñas encriptadas cada vez que un usuario se conecte con una contraseña no encriptada. Una estrategia muy común para asegurarse de que los equipos que necesitan autenticación con contraseñas encriptadas las reciben es con la opción include. Con ella , puedes crear ficheros individuales de configuración que se leerán en función del sistema operativo (%a) o el nombre del cliente (%m). Estos ficheros de configuración específicos pueden contener una opción encrypted passwords=yes que se activará sólo cuando los clientes estén conectados al servidor.
passwd program
Se usa para especificar un programa en el servidor Samba Unix que Samba utilizará para actualizar las contraseñas estándar del sistema cuando se modifiquen las contraseñas encriptadas. Esta opción por defecto apunta al programa passwd localizado normalmente en el directorio /bin. Cuando el programa se ejecuta pide el nombre de usuario, que se le suministra a través de la variable %u. El seguimiento de las entradas y salidas de este programa se hace a través de la opción passwd chat. La sección 'Sincronización de Contraseñas', en este capitulo, trata este tema en detalle.
passwd chat
Establece una serie de envíos/respuestas similares a un programa 'chat' de Unix, que se usan para ejecutar el programa de cambio de contraseñas en el servidor Samba. La sección 'Sincronización de Contraseñas', en este capitulo, trata este tema en detalle.
passwd chat debug
Si se establece a yes, la opción global passwd chat debug registra todo lo que Samba envía y recibe durante un 'chat' de contraseñas y se envían a los registros de Samba con un nivel de detalle de 100; necesitarás especificar log level=100 para registrar esa información. La sección 'Sincronización de contraseñas' en este capitulo, describe esta opción con más detalle. Sé consciente de que, si activas esta opción, las contraseñas en texto plano serán visibles en los ficheros de registro, lo que puede ser un problema de seguridad si no se tratan apropiadamente.
password level
Con SMB, las contraseñas no encriptadas (o de texto plano) se envían en mayúsculas, igual que los nombres de usuarios de los que ya hablamos. Muchos usuarios Unix, de todas formas, eligen contraseñas con letras mayúsculas y minúsculas. Samba, por defecto, sólo intenta verificar la contraseña en minúsculas, y sin poner en mayúsculas la primera letra.
Como username level, hay una opción password level que se puede usar para intentar varias permutaciones de la contraseña con letras mayúsculas. Esta opción toma un valor entero que establece cuantas letras de la contraseña deben convertirse a mayúsculas cuando el cliente intente conectarse al recurso. Puedes establecer esta opción como sigue:
[global]
password level = 3
En este caso, Samba intentara todas las permutaciones que pueda computar de la contraseña con tres letras mayúsculas. Cuanto mayor sea el nombre, mas cálculos habrá de hacer Samba para comprobar la contraseña y más tiempo llevara el proceso de conexión a un recurso.
update encrypted
Para casos en los que esta en proceso de cambio entre contraseñas encriptadas y planas, esta opción proporciona ayuda durante la transición. Puedes activarla como sigue:
[global]
update encrypted = yes
Esta opción indica a Samba que ha de crear una versión encriptada de la contraseña Unix de cada usuario cada vez que este se conecte a un recurso. Cuando esta opción se activa debes tener la opción encrypt passwords=no para que el cliente pase contraseñas planas que Samba utilizará para actualizar estos ficheros. Una vez que el usuario se conecta al menos una vez, puedes establecer encrypt passwords=yes, permitiendo usar sólo contraseñas encriptadas. El usuario debe tener una entrada válida en el fichero smbpasswd para que esta opción funcione.
null passwords
Esta opción global le dice a Samba si permitir o no el acceso a usuarios que tienen contraseñas nulas (encriptadas o no) en sus cuentas. El valor por defecto es no, pero puedes activarlo con:
null passwords=yes
Te recomendamos encarecidamente que no utilices esta opción a menos que estés familiarizado con los riesgos de seguridad que implica, incluyendo acceso inadvertido de usuarios del sistema (como bin) en el fichero de contraseñas del sistema que tienen establecidas contraseñas nulas.
smb passwd file
Esta opción global indica la localización del fichero de contraseñas encriptadas. Por defecto, esta establecida a /usr/local/samba/private. Puedes establecerlo a otro valor como sigue:
[global]
smb passwd file = /etc/smbpasswd
Esta localización, por ejemplo, es común en las distribuciones Red Hat.
hosts equiv
Esta opción global especifica el nombre de un fichero estándar Unix hosts.equiv que permitirá a los servidores o usuarios acceder a los recursos sin dar una contraseña. Puedes establecer la ubicación de este fichero como sigue:
[global]
hosts equiv = /etc/hosts.equiv
El valor por defecto para esta opción no especifica ningún fichero. Te recomendamos que no utilices esta opción ya que supone un grave riesgo de seguridad.
use rhosts
Esta opción global de configuración establece el nombre de un fichero de usuarios estándar Unix .rhosts que permitirá a los servidores ajenos acceder a recursos sin dar una contraseña. Puedes establecer la ubicación del fichero como sigue:
[global]
use rhosts = /home/dave/ .rhosts
El valor por defecto para esta opción no especifica ningún fichero. Al igual que con la opción hosts equiv te recomendamos que no la utilices ya que supone un grave riesgo de seguridad.