Samba 3.0 a 3.5

En mi actual trabajo, tuve la tarea de migrar de un Samba 3.0 a 3.5.

Entre varios líos diversos, el que quiero hablar ahora es sobre el formato de la DB. Menuda sorpresa me llevé.

Algún administrador de Samba ya debe saber lo que voy a escribir, pero igual lo hago para contextualizar el panorama.
Para que Samba y MS operen, Samba implementa algunas funcionalidades extra.
Particularmente, el mecanismo que usa para mapear los identificadores locales en las dos plataformas, los SIDs en Windows y los UIDs/GIDs en Linux.
Esta claro, que para operar sobre el mismo recurso en una plataforma u otra, debemos identificarlos de manera única. Para esto, samba tiene varias formas (dependiendo de la configuración, etc) de hacer este “mapeo” en los identificadores de Windows y Linux. A este mapeo, Samba lo llama IDMAP.

Como mencioné, hay varias formas de hacer este mapeo. La configurada es la de Winbind/NSS con una Db local en formato TDB (Trivial Database). El servidor a actualizar, actúa como file server y no tiene cuentas locales. Por lo cual, Samba obtiene las credenciales desde el controlador de dominio.
Para esto, Samba reserva un espacio (rango) de UIDs y GIDs para realizar el mapeo con los SIDs.
Algo que me enteré en el testeo de la migración, fue que el mapeo entre SID y UID/GID no es determinístico! Depende del orden en que el controlador devuelva los datos (!) :S
Recordar que el control de acceso a los archivos/directorios se hacen en base a estos UID/GID. Por lo que, si el mapeo se pierde, por alguna razón cualquiera, me quedé sin control de acceso, o peor aún, podría pasar que se entrevere todo.. caos total.

Yendo más al grano y lo más destacable: al actualizar Samba (yum install samba3x), se rompe la DB con el mapeo! :O ¿wtf!??

Parece que cambiaron el formato de la DB, antes se usaba TDB, y ahora LDB (L de light). Un nuevo formato más “LDAP-like”, más rápido, “más mejor” con todos los chuchis, como siempre…

Bien, pero… y mi DB anterior?? parece que samba no se da cuenta que existe un DB y no la migra :S
Debe ser porque se instala como un paquete aparte? y no es parte de un ‘update’ formalmente hablando? No lo sé.

Al final, lo que tuve que hacer fue:

# net idmap dump /var/cache/samba/winbindd_idmap.tdb > /root/idmap.backup
[...]
Paso i) Eliminar samba3.0
Paso i+1) Instalar samba 3.5…
[...]
# net idmap restore /root/idmap.backup

Es decir, exportarlo e importarlo.

Tags: , ,

Leave a Reply