Tabla de Contenidos

Migrando Samba3 a Samba4

Preparación

Es importante tener en cuenta que la migracion en lo posible se debe hacer en otro servidor y las pruebas se deben hacer en otra red, ya que una vez que las maquinas se conecten al Samba4, nunca volveran a conectarse a Samba 3. La migración del dominio es UNIDIRECCIONAL!!!

Preparacion de servidor de pruebas (Minimizacion del downtime)

Migracion de Samba3 al server de pruebas

Migracion de OpenLDAP

Exportar arbol LDAP desde servidor de produccion:

# slapcat > ldap.backup.ldif

Copie el archivo generado al nuevo servidor de pruebas

Pare el servicio de LDAP

Importe el LDIF

# slapadd -l ldap.backup.ldif

 SI tiene problemas con arrancar el servicio, verifique los permisos de /var/lib/ldap.

chown -R ldap:ldap /var/lib/ldap/


Copie el slapd.conf del servidor de produccion al de pruebas.

Inicie el servicio LDAP
 

Como evitar problemas comunes

slapd.conf sizelimit

SI tiene muchos elementos en el arbol LDAP es necesario configurar la siguiente linea:
 

sizelimit unlimited


Reinicie el servicio LDAP

 

Nombres comunes de usuarios y grupos


SI tiene usuarios que tengan el mismo nombre de un grupo, renombrelos, porque sino el provisionamiento va a fallar. Use los siguientes comandos para buscar similitud:
 

pdbedit -Lv
net groupmap list

 

Grupos no incluidos en samba (solo en LDAP)

En algunas ocasiones se han creado grupos, pero estos solo son visibles desde LDAP (Unix) y no tienen ningun significado para el PDC, en este caso, porte los grupos a Samba siguiendo los sigueintes pasos:

Verifique los grupos actualmente incluidos en el PDC:

net groupmap list

Si no encuentra todos los grupos deseados agreguelos de la siguiente forma:

→ Liste todos los grupos reconocidos y exportelos a un archivo temporal:

getent group > /tmp/group

→ Edite el archivo /tmp/group y borre todas las lineas de los grupos que ya estan incluidos o que no desea importar a SMB

vim /tmp/group

→ Instale (si no tiene) smbldap-tools

→ Verifique que el smbldap.conf tenga el SID de dominio correcto antes de incluir los grupos.
→ Ubique el script de migracion smbldap-migrate-unix-groups y coloque permisos de ejecución:

chmod +x smbldap-migrate-unix-groups


→ Corra el script y alimentelo con el archivo que edito anterioirmente:

./smbldap-migrate-unix-groups -a -G /tmp/group

→ Verifique que los grupos quedaron agregados con 

net groupmap list
 

Quitar SID duplicados

Para comprobar si existen duplicados use el script duplicateSIDCheck.py.

Para quitar los duplicados y solucionar conflictos, utilice el script duplicateSIDFix.py


============== duplicateSIDCheck.py. ==================

#!/usr/bin/python
# A quick and dirty python script that checks for duplicate SID's using slapcat.
import os

data = os.popen(“slapcat 2>&1 | grep sambaSID”, 'r')
line = []

def anydup(thelist):
        dups = list(set([x for x in thelist if thelist.count(x) > 1]))
        for i in dups:
                print “Duplicate id: ”, i

for each_line in data:
        line.append(each_line.strip())

anydup(line)

Obtenga el maxrid que se le solicitara en el script de la siguiente forma:

net maxrid


============== duplicateSIDFix.py. ==================

#!/usr/bin/python
# A quick and dirty python script that checks for duplicate SID's using slapcat.
import os
import sys
import time
from time import strftime


data = os.popen(“slapcat 2>&1 | grep sambaSID”, 'r')
line = []
 
def anydup(thelist):

    print “*”*70
    print “.”*20+“ Duplicate and actions report ”+“.”*20
    print “*”*70

    print “+”*70
    print “.”*20+“ Backup LDAP database ”+“.”*20
    print “+”*70

    backupName = “ldapPlatonBackup”+strftime(“%Y%m%d-%H_%M”)+“.ldif”
    
    print “Saving backup in…”+backupName

    backup = os.popen('slapcat -v -b “dc=codema,dc=com,dc=co” -l '+backupName, 'r')
    print “Generate backup…”
    
    for i in range(100):
        time.sleep(0.01)
        sys.stdout.write(“\\r%d" % i)\\         sys.stdout.flush()\\     print "\Backup finished."\\ \\     # Read max rid\\     print "+"*70\\     print "."*20+" Define MAX RID "+"."*20\\     print "+"*70\\     maxrid = int(raw_input("Please enter max RID: ")) + 1\\     print "MAX RID used: ", maxrid\\ \\         dups = list(set([x for x in thelist if thelist.count(x) > 1]))\\         for i in dups:\\         counterPerson = 0\\         print "\"\\         print "+"*70\\         print "="*70\\                 print "Duplicate id: ", i\\         print "="*70\\         dataDetail = os.popen('ldapsearch -xLLL -h localhost -b "dc=codema,dc=com,dc=co" "(sambaSID='+i[10:]+')" | grep dn:', "r")\\         for each_line in dataDetail:\\             # Extract uid\\             uid = each_line.split(',', 1 )\\             name = uid[0].split('=', 1 )\\ \\             if name[1].endswith('$'):\\                 type = "M"\\                 # Remove machine\\                 print "Remove machine: "+name[1]\\                 cmd = "pdbedit -x -m "+name[1][:-1]\\                                 os.popen(cmd, 'r')\\                 print cmd\\             else:\\                 type = "P"\\                 counterPerson += 1\\                 if counterPerson > 1:\\                     print "Update SID user: "+name[1]\\                     cmd = "pdbedit -U "+str(maxrid)+" -u "+name[1]\\                                     os.popen(cmd, 'r')\\                     print cmd\\                     maxrid += 1\\ \\             print i, name[1], type\\         \\     print "="*70\\         print " END "\\     print "="*70\\ \\ for each_line in data:\\         line.append(each_line.strip())\\ \\ anydup(line)\\ \\ ==================================================\\ \\   ===== Instalacion de Samba4 RHEL 5 ===== Instalacion Prerequisitos:\\ \\ yum install perl gcc libacl-devel libblkid-devel gnutls-devel    readline-devel python-devel gdb pkgconfig krb5-workstation    zlib-devel setroubleshoot-server libaio-devel    setroubleshoot-plugins policycoreutils-python    libsemanage-python setools-libs-python setools-libs    popt-devel libpcap-devel sqlite-devel libidn-devel    libxml2-devel libacl-devel libsepol-devel libattr-devel    keyutils-libs-devel cyrus-sasl-devel cups-devel bind-utils    libxslt docbook-style-xsl\\ \\ yum install autoconf automake gcc gdb krb5-devel krb5-workstation openldap-devel make pam-devel python-devel docbook-style-xsl libacl-devel libattr-devel libxslt\\ \\ La ultima version a instalar para este momento de samba4 es la 4.1.6, que necesita Python 2.5+, por tanto, instalaremos python2.7\\ \\   ===== Instalacion de python2.7 ===== \\ wget https:www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz\\ tar -xzvf Python-2.7.9.tgz\\ cd Python-2.7.9\\ \\ ./configure --enable-shared\\ make\\ make install\\ \\ Cuando se compila con la opcion --enable-shared (Necesaria para  Samba4), da un error con la carga de una libreria, para lo cual es necesario:\\ \\ Crear el archivo /etc/ld.so.conf.d/python.conf y en el colocar:\\ \\ /usr/local/lib\\ \\ Luego ejecutar:\\ \\ ldconfig ===== Instalacion Samba4   ===== wget https:www.samba.org/samba/ftp/stable/samba-4.1.16.tar.gz\\ tar -xzvf samba-4.1.16.tar.gz\\ cd samba-4.1.16\\ ./configure\\ make\\ make install\\ \\ Todo queda instalado en /usr/local/samba.\\   ==== Agregar path ==== echo 'pathmunge /usr/local/samba/bin' > /etc/profile.d/samba.sh\\ echo 'pathmunge /usr/local/samba/sbin' >> /etc/profile.d/samba.sh\\ \\ chmod +x /etc/profile.d/samba.sh\\ \\ Recargue el profile con:\\ \\ . /etc/profile\\ \\ Verifique version de samba:\\ \\ samba --version\\   ===== Classic Upgrade NT4 -> AD DC ===== Bajar servicios de Samba NT4\\ \\ /etc/init.d/smb stop\\ \\ Mover las DB de samba para evitar ejecucion accidental\\ \\ mv /var/lib/samba /var/lib/samba.PDC\\ \\ Renombrar el archivo de configuracion de samba3\\ \\ mv /etc/samba/ /etc/samba.PDC\\ \\ Deshabilitar inicio automatico de samba\\ \\ ntsysv\\ \\ Centralizar DB de samba para facilitar la migracion:\\ \\ mkdir /var/lib/samba.PDC/dbdir/\\ cp -p /etc/samba.PDC/secrets.tdb /var/lib/samba.PDC/dbdir/\\ cp -p /etc/samba.PDC/schannel_store.tdb /var/lib/samba.PDC/dbdir/\\ cp -p /etc/samba.PDC/passdb.tdb /var/lib/samba.PDC/dbdir/\\ cp -p /var/lib/samba.PDC/gencache_notrans.tdb /var/lib/samba.PDC/dbdir/\\ cp -p /var/lib/samba.PDC/account_policy.tdb /var/lib/samba.PDC/dbdir/\\   ===== Migración   ===== samba-tool domain classicupgrade --option="interfaces=lo eth0" --dbdir=/var/lib/samba.PDC/dbdir/ --use-xattrs=yes --realm=codema.com.co --dns-backend=SAMBA_INTERNAL /etc/samba.PDC/smb.conf 2>&1 | tee /tmp/output_samba4_4.txt Si todo sale bien, ya tendra el dominio migrado. Revise el log de migración ubicado en /tmp, ubique la contraseña del administrador.\\ \\ Pare el servicio de LDAP.\\ \\ Desactive el arranque automatico de los servicios LDAP y Samba3\\   ===== Probando samba4 ===== Verifique el estado general del dominio: [root@platon ~]# smbclient -L localhost -U%\\ Domain=[CODEMA-VISTA] OS=[Unix] Server=[Samba 4.1.16]\\ \\     Sharename       Type      Comment\\     ---------       ----      -------\\     netlogon        Disk      \\     sysvol          Disk      \\     IPC$            IPC       IPC Service (Samba 4.1.16)\\ Domain=[CODEMA-VISTA] OS=[Unix] Server=[Samba 4.1.16]\\ \\     Server               Comment\\     ---------            -------\\ \\     Workgroup            Master\\     ---------            -------\\ \\ \\ Login con administrador:\\ \\ [root@platon ~]# smbclient //%%localhost/netlogon -UAdministrator -c 'ls'
Enter Administrator's password:
Domain=[CODEMA-VISTA] OS=[Unix] Server=[Samba 4.1.16]
  .                                   D        0  Thu Feb 19 18:26:33 2015
  ..                                  D        0  Thu Feb 19 18:26:51 2015

        51330 blocks of size 262144. 38461 blocks available

 

Configuracion DNS

En el archivo de configuracion agregue el DNS para el FWD de peticiones DNS en la seccion global.

dns forwarder = ip.ip.ip.ip

Configure el archivo /etc/resolv.conf

domain codema.com.co
nameserver 192.168.10.6

Probando DNS

 [root@platon ~]# host -t SRV _ldap._tcp.codema.com.co.
_ldap._tcp.codema.com.co has SRV record 0 100 389 platon.codema.com.co.

[root@platon ~]# host -t SRV _kerberos._udp.codema.com.co.
_kerberos._udp.codema.com.co has SRV record 0 100 88 platon.codema.com.co.

[root@platon ~]# host -t A platon.codema.com.co.
platon.codema.com.co has address 192.168.10.6


Configurando kerberos

Reemplace el archivo de configuracion por el generado en la migración.

ln -sf /usr/local/samba/private/krb5.conf /etc/krb5.conf

Probando kerberos

Usando kinit para obtener un ticket de kerberos:

NOTA: Coloque el REALM en MAYUSCULA!

[root@platon ~]# kinit administrator@CODEMA.COM.CO
Password for administrator@CODEMA.COM.CO:
Warning: Your password will expire in 59 days on Mon Jun 22 23:55:27 2015


Verifique que kerberos esta corriendo y que se tiene un tiquete.


[root@platon ~]# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@CODEMA.COM.CO

Valid starting     Expires            Service principal
04/24/15 00:14:58  04/24/15 10:14:58  krbtgt/CODEMA.COM.CO@CODEMA.COM.CO
    renew until 04/25/15 00:14:18


Kerberos 4 ticket cache: /tmp/tkt0
klist: You have no tickets cached


Finalmente logueese con algun usuario y posterioirmente con el administrador, para abrir las herramientas administrativas de Windows y configurar lo que haga falta.

Ups, algo salio mal!!



En ese caso:

rm -f /usr/local/samba/etc/smb.conf

rm -rf /usr/local/samba/private/*
 

samba-tool domain classicupgrade –option=“interfaces=lo eth0” –dbdir=/var/lib/samba.PDC/dbdir/ –use-xattrs=yes –realm=codema.com.co –dns-backend=SAMBA_INTERNAL /etc/samba.PDC/smb.conf 2>&1 | tee /tmp/output_samba4_4.txt






 


Advertencia

Este documento es privado y es de u so exclusivo de sus autores y de SKINA TECH. Cualquier uso sin una autorización escrita es contra la ley de derechos de autor y de propiedad intelectual, y será motivo de una acción legal.


19-Enero-2015 J.C. Pineros C. v1.0 Primera version