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)
- Instalacion de SO con las mismas caracteristicas del de produccion.
- Instalacion de samba3 (samba3, samba3-client, samba3-utils, samba3-docs, smbldap-tools)
- Instalacion de Openldap (openldap-servers, openldap-client.)
Migracion de Samba3 al server de pruebas
- Migre /etc/samba y /var/lib/samba a donde corresponda segun el backend que este usando. Esta es la guia de migracion official: https://www.samba.org/samba/docs/man/Samba3-ByExample/upgrades.html#id2600749
- Si su backend es ldapsam, migre openldao como se indica a continuacion.
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