En este tutorial, como bien dice el titulo, vamos a migrar los usuarios de Samba otro sistema Linux, cuya necesidad puede ser la sustitución del equipo actual por otro nuevo, con lo que nos obliga a instalar el Linux desde cero en el nuevo equipo (y por tanto volver a dar de alta los usuarios en este), o bien porque vamos ha tener mas de un servidor Samba y queremos que todos los usuarios o parte de ellos tengan acceso a los archivos de ambos equipos.
Partimos de la base que los usuarios que acceden al servidor Samba, solo precisan acceso a los archivos allí compartidos, y no se necesita que dichos usuarios tengan acceso a la shell de Linux ni a una sesión gráfica propia del mismo, pero sin embargo si es necesario migrar aparte de los usuarios de Samba, a los usuarios del Sistema que normalmente son los mismo, ya que Samba lo precisa (salvo que estemos usando Samba con LDAP, pero eso es otro tuto). Aclaro esta cuestión, ya que se van a dar de alta usuarios en el Sistema, pero no se van a generar los «homes» de usuario de cada uno, es decir la carpeta de cada usuario linux que se encuentran dentro del directorio /home.
Decir que este tuto funciona perfectamente desde la versión de Debian Etch inclusive, hasta la última estable, y por supuesto también en las versiones de Ubuntu de su misma epoca por decirlo de alguna manera.
Una vez lanzada esta parrafada vamos al grano, lo primero que tenemos que hacer es una copia de los siguientes archivos del sistema linux antiguo a exportar:
/etc/group
/etc/shadow
/etc/gshadow
/etc/samba/smb.conf (éste último es necesario si queremos compartir las misma estructura de carpetas)
Una vez realizada la copia de estos archivos, tenemos que exportar a un archivo los usuarios que tiene acceso a archivos por samba (que no tiene que ser los mismos usuarios que están en el sistema). La forma de hacerlo es a través del comando pdbedit de la forma:
# pdbedit -e smbpasswd:samba_backup.bak
Con esto, ya tenemos los usuarios de samba en el archivo samba_backup.bak.
Una vez recopilado todos estos archivos nos vamos a la maquina destino donde queremos importar estos archivos y los incluimos de forma quirúrjica.
¿Como que de forma quirúrjica?. Si, ya que los archivos que hemos copiado del sistema antiguo tienen dados de alta usuarios y digamos usuarios del sistema que existirán con toda probabilidad en el equipo nuevo, como puede ser en el caso del fichero passwd, lo siguiente:
# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
……..
Como se puede ver hay usuarios, por decirlo de alguna manera, del sistema linux como son los expuesrealizarlotos arriba, que estarán duplicados y por tanto debemos crearnos del archivo passwd que sacamos del equipo antiguo, solo los que no existen en el nuevo y mas concretamente usuarios reales que no existen en el nuevo.
Por tanto tenemos que crearnos un archivo passwd con solo las lineas que queremos importar en el passwd del equipo nuevo. Esto es muy importante ya que podemos dejar algún servicio sin funcionar en el equipo nuevo si no tenemos cuidado, pero no os asustéis, que es fácil.
Este proceso que hemos explicado con el archivo passwd hay que realizarlo con todos los demás archivos incluido el archivo samba_backup.bak que tendrá un aspecto similar a esto:
games:5:XXXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXX:[U ]:LCT-00000000:
nobody:65534:XXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXX:[U ]:LCT-00000000:
proxy:13:XXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXX:[U ]:LCT-00000000:
www-data:33:XXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXX:[U ]:LCT-00000000:
root:0:XXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXX:[U ]:LCT-00000000:
news:9:XXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXX:[U ]:LCT-00000000:
bin:2:XXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXX:[U ]:LCT-00000000:
mail:8:XXXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXX:[U ]:LCT-00000000:
messagebus:103:XXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXX:[U ]:LCT-00000000:
daemon:1:XXXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXX:[U ]:LCT-00000000:
man:6:XXXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXX:[U ]:LCT-00000000:
lp:7:XXXXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXX:[U ]:LCT-00000000:
pepito:1001:FF96A4989AA4E604749E:4A0D743E788FFF69A7CC:[U ]:LCT-496CA980:
juanito:1004:04F02F902BAAD3B4B4EE:EC3C6ED7AD54F985E93B:[U ]:LCT-483D23A6:
sys:3:XXXXXXXXXXXXXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXX:[U ]:LCT-00000000:
Como podéis ver hay usuarios del sistema que no tenemos que importar en el nuevo equipo, y solo tenemos que generar un archivo con las lineas que únicamente nos interesa, que en nuestro caso son las que están marcadas en negrita,
Otra cosa que tenemos que tener en cuenta, aparte de dejar en los archivos passwd, group, shadow, gshadow y samba_backup.bak solo los usuarios a importar, es que no coincida el uid ni el gid (id de usuario e id de grupo) de los usuarios que vamos a importar, con ninguno de los usuarios que existan ya en el nuevo sistema, ya que de ser así tendríamos un problema de permisos cruzados entre usuarios.
La forma mas fácil sería que en el nuevo sistema no existe ningún usuario dado de alta, a excepción del root, ya que cualquier usuario dado de alta en el sistema empezará por el uid y gid 1000 y así sucesivamente, pudiendo coincidir con el uid y gid de algún usuario que vamos a importar. Si esto es así, y no podemos eliminar esos usuario en el equipo nuevo, tendremos que modificar a mano los uid y gid bien de los usuarios del sistema nuevo que coincidan con los que queremos importar, o bien de los usuarios a importar, según sea mas fácil, aunque yo recomiendo cambiar el de los archivos a importar.
La forma de identificar el uid y gid es editando los archivos siguiente y tocar los numeros que se muestran en negrita (si procede) en el ejemplo de abajo:
## CAMBIO DEL UID Y GID RESPECTIVAMENTE DEL USUARIO QUE SE PRECISE
# nano passwd
juanito:x:1004:1004:,,,:/home/juanito:/bin/bash
fasutino:x:1003:1009:,,,:/home/fasutino:/bin/bash
pepito:x:1001:1001:,,,:/home/pepito:/bin/bash## CAMBIO DE GID QUE SE PRECISE
# nano group
juanito:x:1004:
faustino:x:1009:
pepito:x:1001:## CAMBIO DEL UID EN FICHERO SAMBA_BACKUP.BAK QUE SE PRECISE
# nano samba_backup.bak
pepito:1001:FF96A4989AA4E604749E:4A0D743E788FFF69A7CC:[U ]:LCT-496CA980:
juanito:1004:04F02F902BAAD3B4B4EE:EC3C6ED7AD54F985E93B:[U ]:LCT-483D23A6:
¡¡¡IMPORTANTE!!! Antes de importar nada, recomiendo realizar una copia de seguridad de los archivos del equipo nuevo, antes de proceder a realizar estos pasos.
Una vez que tenemos ya todo correcto, procedemos a importar todos los archivos añadiendo las líneas a incluir de la forma:
# cd /etc/
# cat /home/ficheros_importar/passwd >> passwd
# cat /home/ficheros_importar/group >> group
# cat /home/ficheros_importar/shadow >> shadow
# cat /home/ficheros_importar/gshadow >> gshadow
Por último exportaremos los usuarios samba al nuevo sistema de la forma:
# pdbedit -i smbpasswd:/home/ficheros_importar/samba_backup.bak
Ya tenemos el sistema migrado, solo quedaría configurar el /etc/samba/smb.conf de nuestro servidor samba nuevo, para que accedan los usuarios migrados a las carpetas que queramos, y reiniciar el servicio samba de la forma /etc/init.d/samba restart para que coja los nuevos cambios y usuarios.