Las contraseñas son un asunto problemático con Samba. Tanto es así, que la mayoría de las veces son el principal problema que los usuarios se encuentran cuando instalan Samba, y generan la mayoría de las cuestiones enviadas a los grupos de soporte de Samba. En capítulos anteriores, evitamos la necesidad del uso de contraseñas a través de la opción guest ok en cada uno de nuestros ficheros de configuración, lo que nos permitía realizar conexiones sin tener que autentificar contraseñas. No obstante, ahora hemos de profundizar mas en Samba para saber que esta pasando en la red.
Las contraseñas enviadas desde clientes individuales pueden ser encriptadas o no encriptadas. Las contraseñas encriptadas son, desde luego, más seguras. Una contraseña no encriptada puede ser leída fácilmente con un programa de lectura de paquetes ('sniffer'), como el modificado tcpdump que hemos usado en el Capitulo 3, Configurando los clientes Windows. Que las contraseñas sean encriptadas depende del sistema operativo que el cliente este usando para conectar con Samba. La Tabla 6-5 muestra que sistemas operativos Windows encriptan sus contraseñas antes de enviarlas al Controlador Primario de Dominio para su autenticación. Si tu cliente no es Windows, comprueba la documentación del sistema para saber si las contraseñas SMB son encriptadas.
Table: Sistemas Operativos Windows con Contraseñas Encriptadas.
| Sistema Operativo |
Encriptado o No-Encriptado |
| Windows 95 |
No-Encriptado |
| Windows 95 con la Actualización SMB |
Encriptado |
| Windows 98 |
Encriptado |
| Windows NT 3.x |
No-Encriptado |
| Windows NT 4 anterior al SP3 |
No-Encriptado |
| Windows NT 4 despues del SP3 |
Encriptado |
Actualmente se usan dos sistemas de encriptación: Uno para los clientes Windows 95 y 98 que sigue utilizando el estilo de Microsoft LAN Manager, y otro distinto para Windows NT clientes y servidores. Windows 95 y 98 utilizan un viejo sistema de encriptación derivado del programa de red LAN Manager, mientras que los sistemas Windows NT tanto clientes como servidores utilizan un sistema nuevo.
Si las contraseñas encriptadas están soportadas, Samba las almacena en un fichero llamado smbpasswd. Por defecto, este fichero esta situado en el directorio private de la distribución Samba (/usr/local/samba/private). Al mismo tiempo, los clientes almacenan una versión encriptada de la contraseña del usuario en su propio sistema. La contraseña sin encriptar (en texto plano) nunca se almacena en ningún sistema. Cada uno de ellos almacena la contraseña encriptada según un algoritmo conocido cuando esta se establece o cambia.
Cuando un cliente solicita una conexión a un servidor SMB que soporte contraseñas encriptadas (como Samba o Windows NT) los dos ordenadores llevan a cabo las siguientes negociaciones:
- El cliente intenta negociar un protocolo con el servidor.
- El servidor responde con un protocolo e indica que soporta contraseñas encriptadas. En este momento, devuelve una cadena de 8 bytes generada aleatoriamente.
- El cliente utiliza esta cadena como una llave para encriptar la ya encriptada contraseña usando un algoritmo predefinido por el protocolo negociado. Entonces envía el resultado al servidor.
- El servidor realiza el mismo proceso con la contraseña almacenada en su propia base de datos. Si los resultados coinciden, las contraseñas son equivalentes y el usuario es autenticado.
Ten en cuenta que, aunque las contraseñas originales no están involucradas en el proceso de autenticación, has de ser muy cuidadoso conque las contraseñas encriptadas almacenadas en el fichero smbpasswd estén a salvo de usuarios no autorizados. Si estas contraseñas están desprotegidas, un usuario no autorizado puede penetrar en el sistema reproduciendo los pasos del algoritmo del que hablamos antes. Las contraseñas encriptadas son tan delicadas como las contraseñas de texto plano -esto se conoce como equivalencia-texto plano en el mundo de la criptografía-. Desde luego, debes asegurarte que los clientes también protejan sus contraseñas.
Puedes configurar Samba para aceptar contraseñas encriptadas añadiendo lo siguiente en la sección [global] del fichero smb.conf. Ten en cuenta que especificamos completa la ruta del fichero de contraseñas de Samba:
[global]
security = user
encrypt passwords = yes
smb passwd file = /usr/local/samba/private/smbpasswd
Samba, de todas formas, no aceptara ningún usuario hasta que el fichero smbpasswd haya sido inicializado.
Deshabilitando contraseñas encriptadas en el cliente
Aunque la autenticación Unix ha estado en uso durante décadas, incluyendo el uso de telnet y rlogin para tener acceso a través de Internet, contienen riesgos de seguridad bien conocidos. Las contraseñas en texto plano son enviadas a través de Internet y pueden ser leídas desde los paquetes TCP por cualquier fisgón que probablemente no tenga buenas intenciones. Aun así, si crees que tu red es segura y quieres usar el estándar Unix de autenticación /etc/passwd para todos los clientes, puedes hacerlo, pero deberás desactivar las contraseñas encriptadas en aquellos sistemas que las usan por defecto.
Para conseguirlo, debes modificar el registro de Windows instalando dos ficheros en cada sistema. Dependiendo del que sea los ficheros son, respectivamente, NT4_PlainPassword.reg o Win95_PlainPassword.reg. Puedes realizar esta instalación copiando el fichero.reg adecuado desde el directorio /docs de la distribución de Samba a un disquete DOS, y ejecutandolo desde el comando Ejecutar en el menu Inicio de Windows. Además, el fichero.reg de Windows 95 también funciona para Windows 98. Una vez que reinicies el ordenador cliente, este no encriptará sus contraseñas antes de enviarlas al servidor. Esto significa que la contraseña con equivalencia-texto plano puede ser vista en los paquetes TCP que se están enviando a lo largo de la red. De nuevo, te recomendamos que no utilices esto a no ser que estés totalmente seguro de que tu red es segura.
Si las contraseñas no están encriptadas, puedes indicarlo en tu fichero de configuración de Samba:
[global]
security = user
encrypt passwords = no
El fichero smbpasswd
Samba almacena sus contraseñas encriptadas en un fichero llamado smbpasswd, que por defecto reside en /usr/local/samba/private. El fichero smbpasswd ha de ser guardado tan celosamente con el fichero passwd; debe ser colocado en un directorio donde solo el usuario root tenga derechos de lectura/escritura. Todos los demás usuarios no deberán ser capaces de leer el directorio. Además el fichero ha de tener todos los accesos cerrados a todo el mundo excepto a root.
Antes de que puedas usar contraseñas encriptadas, necesitas crear una entrada para cada usuario Unix en el fichero smbpasswd. La estructura de este fichero es similar a la del fichero passwd, pero tiene diferentes campos. La figura 6-3 ilustra el diseño del fichero smbpasswd; La entrada que se muestra es, de hecho, una sola línea del fichero.
Figure: Estructura una entrada en el fichero smbpasswd (actualmente es una sola linea).
|
Vamos a ver un poco cada uno de los campos:
- Username (Nombre
- de usuario). Este es el nombre de usuario de la cuenta. Se toma directamente del fichero de contraseñas del sistema.
- UID.
- Es el ID Unix del usuario. Como el nombre de usuario, se toma directamente del fichero de contraseñas del sistema y debe coincidir con el usuario que representa en este.
- Información sobre la contraseña LAN Manager.
- Es una secuencia hexadecimal de 32 bits que representa la contraseña que utilizaran los clientes Windows 95 y Windows 98. Se obtiene del resultado de encriptar la secuencia KGS!@#$% con un algoritmo DES de 56 bits usando la contraseña del usuario (reducida a 14 bytes y convertida a mayúsculas) repetida dos veces como clave. Si no hay contraseña para el usuario, los primeros 11 caracteres consistirán en la secuencia NO PASSWORD seguida por tantas X como sea necesario. Todo el mundo puede acceder a un recurso que no tenga establecida una contraseña. Por otro lado, si la contraseña ha sido desactivada, consistirá en 32 caracteres X. Samba no dará acceso a ningún usuario a menos que se establezca la opción null passwords.
- Información sobre la contraseña NT.
- Es una secuencia hexadecimal de 32 bits que representa la contraseña que utilizarán los clientes NT. Se obtiene del resultado de cifrar la contraseña del usuario (representada como una secuencia Unicode 'little-endian' de 16 bits) con una secuencia de cifrado MD4. La contraseña no se convierte primero a mayúsculas.
- Datos de la cuenta.
- Este campo consiste en 11 caracteres entre 2 corchetes ([]). Cualquiera de los siguientes caracteres puede aparecer en cualquier orden, el resto serán espacios:
- U
- Esta cuenta es una cuenta de usuario estándar de Unix.
- D
- Esta cuenta está desactivada y Samba no permitirá ningún acceso.
- N
- Esta cuenta no tiene contraseña asociada
- W
- Esta es una cuenta de confianza que puede ser utilizada para configurar Samba como Controlador Primario de Dominio (PDC) cuando se permita a equipos Windows NT unirse a su dominio.
- Hora del ultimo cambio.
- Este código consiste en los caracteres LCT seguido por la representación hexadecimal del numero de segundos transcurridos desde el inicio de los tiempos (medianoche del 1 de Enero de 1970 en tiempo Unix) hasta que se modificó el fichero por ultima vez.
Añadiendo entradas a smbpasswd
Hay varias maneras en que puedes añadir una entrada al fichero smbpasswd:
- Puedes usar programa smbpasswd con la opción -a para añadir automáticamente cualquier usuario que ya posea un cuenta estándar Unix en el sistema. Este programa esta en el directorio /usr/local/samba/bin.
- Puedes usar el programa addtosmbpass que esta en el directorio /usr/local/samba/bin. Es un script AWK que recorre un fichero de contraseñas del sistema y extrae el nombre de usuario y UID de cada entrada que quieras añadir al fichero de contraseñas SMB. Entonces añade campos con valores por defecto para el resto de las entradas de usuarios, que pueden ser actualizados mas tarde usando el programa smbpasswd. Para poder ejecutar este programa, probablemente deberás editar la primera línea para que apunte correctamente al awk de tu sistema.
- En el caso de que ninguna de estas dos opciones sea la correcta para ti, puedes crear una entrada por defecto a mano en el fichero smbpasswd. Esta entrada debe estar en una sola línea y cada campo debe ir separado por dos puntos (:):
dave:500:XXXXXXXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXX:[U ]:LCT-00000000:
Como vemos esta formado por el nombre de usuario y el UID tal como se especifica en el fichero de contraseñas del sistema, seguido por dos conjuntos de, exactamente 32 caracteres X, seguido por los datos de la cuenta y el momento del ultimo cambio. Una vez que añadas esta entrada, debes usar el programa smbpasswd para cambiar la contraseña del usuario.
Cambiando la Contraseña Encriptada
Si necesitas cambiar las contraseñas encriptadas del fichero smbpasswd, puedes usar el programa smbpasswd. Ten en cuenta que comparten nombre, por lo que asegúrate de no confundir el fichero de contraseñas con el programa de cambio de contraseñas.
El programa smbpasswd es en su mayor parte, idéntico al programa passwd que se usa para cambiar las contraseñas de las cuentas Unix. Simplemente pide que entres tu antigua clave (a menos que seas el usuario root) y duplica la petición para la nueva. En la pantalla no se muestra ningún carácter.
# smbpasswd dave
Old SMB password:
New SMB password:
Retype new SMB password:
Password changed for user dave
Puedes mirar el fichero smbpasswd una vez que este comando termine su ejecución para comprobar que las hashes de las contraseñas de NT y Lan Manager se han grabado en sus respectivas posiciones. Una vez que los usuarios tienen contraseñas encriptadas en la base de datos, podrán conectar a los recursos compartidos usando contraseñas encriptadas.