Samba4
Descripción
Samba 4 es una implementación del control del Dominio de MS completamente compatible con Active Directory.
Prerequistos
Nada un linux moderno .. suele ser.
Instalación
Debian
Instale de los rpositorios
apt-get install samba ldb-tools winbind smbclient ldb-tools smbldap-tools cifs-utils libnss-winbind libpam-winbind
Eso termina montando todas las dependencias
CentOS/RHEL
yum install 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
Si va a compartir directorios, asegurese que tengan en el fstab tenga los opciones de atributos extendidos:
/dev/hda3 /home ext3 user_xattr,acl,barrier=1 1 1
Configuración
1. Creando el dominio
Garantice que no tiene el /etc/samba/smb.conf .. deje que la herramienta lo cree
[root@alpha ~]# /usr/local/samba/bin/samba-tool domain provisionRealm: expert.expertltda.com Domain [expert]: Server Role (dc, member, standalone) [dc]: DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: DNS forwarder IP address (write 'none' to disable forwarding) [192.168.8.202]: noneAdministrator password: // Importante: Tenga en cuenta la complejida del password: MInimo 8 caracteres, una mayuscula y un numeroRetype password: Looking up IPv4 addressesLooking up IPv6 addresses....... Populating DomainDnsZones and ForestDnsZones partitionsSetting up sam.ldb rootDSE marking as synchronizedFixing provision GUIDsA Kerberos configuration suitable for Samba 4 has been generated at /usr/local/samba/private/krb5.confOnce the above files are installed, your Samba4 server will be ready to useServer Role: active directory domain controllerHostname: alphaNetBIOS Domain: EXPERTDNS Domain: expert.expertltda.comDOMAIN SID: S-1-5-21-1450233174-2261187801-2291801002https://wiki.samba.org/index.php/Setting_up_Samba_as_an_Active_Directory_Domain_ControllerOJO .. en el systemctl de Debian 9 toca desahbilitar un poco de cosas- https://www.server-world.info/en/note?os=Debian_9&p=samba&f=4
2. Comprobando conectividad con samba
Si lo monto en /usr/local/samba no olvide colocar el directorio en el PATH
Compruebe que todo esta corriendo
$ smbclient --version
Eso debe mostrar algo como “Version 4.0.XXXXX”.
COrra el sigueinte comando para listar los compartidos
$ smbclient -L localhost -U%
La salida debe ser algo similar a esto:
Sharename Type Comment --------- ---- ------- netlogon Disk sysvol Disk IPC$ IPC IPC Service (Samba 4.0.0)
netlogon y sysvol son base para el funcionamiento de AD.
SI falla este comando reinicie samba:
$ /etc/init.d/samba-ad-dc stop $ /etc/init.d/samba-ad-dc start
Pruebe la autenticacion:
$ smbclient //localhost/netlogon -UAdministrator%'p4$$word' -c 'ls'
Debe ver algo como esto:
Domain=[EXPERT] OS=[Unix] Server=[Samba 4.0.6]
. D 0 Thu Jun 6 09:15:35 2013
.. D 0 Thu Jun 6 09:17:24 2013
40317 blocks of size 524288. 36220 blocks available
Agregue un usuario para probar
$ samba-tool user create skina
Authenticando contra winbind
$ ntlm_auth –request-nt-key –domain=COLMINUTO-EXT –username=skina –password='Nio4Las2Oo'
$ wbinfo –ntlmv2 -a skina%Nio4Las2Oo
3. El administrador no vence
$ samba-tool user setexpiry administrator –noexpiry
Trucos
1. Herramientas de testeo o consulta
$ ldbsearch -H /var/lib/samba/private/sam.ldb '(&(objectclass=person))'
$ ldbsearch -H /var/lib/samba/private/sam.ldb '(invocationId=*)' –cross-ncs objectguid
$ netstat -tunap |grep samba
$ wbinfo -u
$ host -t SRV _ldap._tcp.codema.coop.
$ samba-tool fsmo show
$ wbinfo –name-to-sid fraterneo
2. Manipular el DNS con smb-tool
Añadir un registro A al servicio DNS:
$ samba-tool dns add 10.0.1.130 lab.codesa.co.cu pdc-master-1.lab.codesa.co.cu A ‘10.0.1.130’
Añadir un registro MX al servicio DNS:
$ samba-tool dns add 10.0.1.130 lab.codesa.co.cu lab.codesa.co.cu MX ‘mailserver.lab.codesa.co.cu 5’
Creación de una zona inversa en el servicio DNS:
$ samba-tool dns zonecreate 10.0.1.130 1.0.10.in-addr.arpa
Creación de un registro PTR al servicio DNS:
$ samba-tool dns add 10.0.1.130 1.0.10.in-addr.arpa 140.1.0.10.in-addr.arpa PTR ‘ws-1.lab.codesa.co.cu’
$ samba-tool dns zoneinfo 10.0.1.130 lab.codesa.co.cu
$ samba-tool dns zonelist 192.168.10.18
$ samba-tool dns delete 10.0.1.130 lab.codesa.co.cu w7-test.lab.codesa.co.cu A ‘10.0.2.92’
2. Usuarios y grupos con smb-tool
Añadir un usuario en el dominio:
root@pdc-master-1:~# samba-tool user add bolodia
o
$ samba-tool user add jvillamil –surname=“Villamil” –given-name=“Jorge” –initials=“JV” –mail-address=“jvillamil@codema.com.co”
+++ https://www.server-world.info/en/note?os=CentOS_7&p=samba&f=5
——————-
Añadir un usuario con los atributos UNIX en el dominio:
root@pdc-master-1:~# samba-tool user add bolodia –uid-number=500 –gid-number=500 –login-shell=/bin/false –uid=bolodia
New Password: <Contraseña del Usuario>
Retype Password: <Confirmar Contraseña del Usuario>
User ‘bolodia’ created successfully
Eliminar un usuario del dominio:
root@pdc-master-1:~# samba-tool user delete bolodia
ldb_wrap open of secrets.ldb
Deleted user bolodia
Ver lista de usuarios del dominio:
root@pdc-master-1:~# samba-tool user list
ldb_wrap open of secrets.ldb
bolodia
Administrator
krbtgt
Guest
Añadir un grupo en el dominio:
root@pdc-master-1:~# samba-tool group add “Grupo Informatica”
ldb_wrap open of secrets.ldb
Added group Grupo Informatica
Eliminando un grupo del dominio:
root@pdc-master-1:~# samba-tool group delete “Grupo Informatica”
ldb_wrap open of secrets.ldb
Deleted group Grupo Informatica
Añadiendo miembros a un grupo del dominio:
root@pdc-master-1:~# samba-tool group addmembers “Grupo Informatica” bolodia
ldb_wrap open of secrets.ldb
Added members to group Grupo Informatica
Listar miembros de un grupo del dominio:
root@pdc-master-1:~# samba-tool group listmembers “Grupo Informatica”
ldb_wrap open of secrets.ldb
bolodia
Eliminar miembros de un grupo del dominio:
root@pdc-master-1:~# samba-tool group removemembers “Grupo Informatica” bolodia
ldb_wrap open of secrets.ldb
Removed members from group Grupo Informatica
Desactivar regla de complejidad de las contraseñas en el dominio:
root@pdc-master-1:~# samba-tool domain passwordsettings set –complexity off
Password complexity deactivated!
All changes applied successfully!
Activar regla de complejidad de las contraseñas en el dominio:
root@pdc-master-1:~# samba-tool domain passwordsettings set –complexity on
Password complexity activated!
All changes applied successfully!
Establecer longitud mínima de las contraseñas en el dominio:
Ejemplo 1 (Longitud mínima de 6 caracteres):
root@pdc-master-1:~# samba-tool domain passwordsettings set –min-pwd-length=6
Minimum password length changed!
All changes applied successfully!
Ejemplo 2 (Longitud mínima de 8 caracteres):
root@pdc-master-1:~# samba-tool domain passwordsettings set –min-pwd-length=8
Minimum password length changed!
All changes applied successfully!
Resetear la contraseña del Administrador del Dominio (o expiró o se nos olvidó)
root@pdc-master-1:~# samba-tool user setpassword Administrator
New Password:<Nueva contraseña>
Changed password OK
root@pdc-karas:~#
3. Como pegar maquinas a un Dominio
Un windows https://wiki.samba.org/index.php/Joining_a_Windows_host_to_a_domain
Un linux https://wiki.samba.org/index.php/Setting_up_Samba_as_a_Domain_Member
Esto puede ayudar
https://wiki.samba.org/index.php/Required_settings_for_NT4-style_domains
https://samba.tranquil.it/doc/en/samba_config_server/debian/server_secondary_debian.html#server-secondary-debian
4. Como pego otro DC a un dominio (forest)
NUNCA replique si no tiene el sistema usando BIND9_DLZ .. NO FUNCIONA
- Primero instale samba y kerberos \
- Borre el smb.conf
- Peguelo al dominio con samba-tool domain join codema.coop DC -U“CODEMA-W10/Administrator” –realm=codema.coop
- Pruebe el DNS o cosas similares para ver com estan
++ samba-tool drs showrepl++ samba-tool ldapcmp ldap://DC1 ldap://DC2 -Uadministrator domain
- http://www.golinuxhub.com/2014/02/how-to-configure-samba-4-secondary.html
- https://wiki.samba.org/index.php/Joining_a_Samba_DC_to_an_Existing_Active_Directory
- https://wiki.samba.org/index.php/Samba-tool_ldapcmp
+++ OJO .. en Samba 4.3.8 es obligatorio montar winbind !! si no no pega las maquinas
+++ Todos los problemas de transfernecias de dominio estan basadas en los DNS .. el dice quien controla.
Verifique si la replica anda
https://wiki.samba.org/index.php/Verifying_the_Directory_Replication_Statuses
Pruebe la replica a mano
samba-tool drs replicate munich.cucuta.gov.co berlin.cucuta.gov.co CN=Configuration,DC=cucuta,DC=gov,DC=co
4. Como saco un DC de un dominio (forest)
https://wiki.samba.org/index.php/Demoting_a_Samba_AD_DC
5. Usar bind como backend de DNS
Sucede que cuando se complican los DNS o tiene varios servidores .. el servidor interno de DNS se enreda entonces mejor usar BIND
- https://wiki.samba.org/index.php/Setting_up_a_BIND_DNS_Server
- https://wiki.samba.org/index.php/BIND9_DLZ_DNS_Back_End
- https://wiki.samba.org/index.php/Changing_the_DNS_Back_End_of_a_Samba_AD_DC
El problema esta en que el bind estandar de paquete no viene ni con el soporte de ldopen o de los modulos DLZ . .entonces toco reconstruirlo metiendole mano a debian/rules agregandole
–with-dlz-postgres=no –with-dlz-mysql=no –with-dlz-bdb=yes –with-dlz-filesystem=yes \\
–with-dlz-ldap=yes –with-dlz-stub=yes –with-dlopen=yes \\
Y seguir el estandar de backport o reconstruir el paquete (https://wiki.debian.org/SimpleBackportCreation)
6. Configurar como Single-Sign-On con Radius
- https://wiki.samba.org/index.php/VPN_Single_SignOn_with_Samba_AD
7. Como se que maquinas viejas
for i in `ldapsearch -w “cheb2Pei” -x -H ldap://192.168.222.12 -D “CN=squid proxy,CN=Users,DC=codema,DC=coop” -b 'CN=Computers,dc=codema,dc=coop' '(objectclass=computer)' | grep cn: | awk '{print $2}' ` ; do
echo -n -e $i“\\t” ;
fecha=`ldapsearch -w “cheb2Pei” -x -H ldap://192.168.222.12 -D “CN=squid proxy,CN=Users,DC=codema,DC=coop” -b 'CN=Computers,dc=codema,dc=coop' “(&(objectClass=computer)(cn=$i))” lastLogonTimestamp | grep “^lastLogonTimestamp: ” | cut -d ' ' -f 2- ` ; echo $fecha | sed -r 's/(.*)([0-9]{18})(.*$)/echo “\\1”“$(date +%D_%T -d \\@$1))”“\\3”/e' ;
done
Problemas
1. Problema con aplicación GPO
En algunas ocasiones al aplicar la directiva de grupo desde el Administrator con el comando:
gpupdate /force
Da error al procesar la directiva de grupo.
Para solucionar el problema:
samba-tool ntacl sysvolreset
Y todo OK.
- http://techgenix.com/Top-10-Reasons-Why-Group-Policy-Fails-to-Apply-Part1/
- http://techgenix.com/Top-10-Reasons-Why-Group-Policy-Fails-to-Apply-Part2/
- http://techgenix.com/Top-10-Reasons-Why-Group-Policy-Fails-to-Apply-Part3/
2. Se pierden los roles
Por no razon aparente .. no puedo hacer
samba-tool fsmo show
Obtenemos
ldb_wrap open of secrets.ldb
ERROR(<type 'exceptions.KeyError'>): uncaught exception - 'No such element'
File “/usr/lib/python2.7/dist-packages/samba/netcmd/__init__.py”, line 175, in _run
return self.run(*args, **kwargs)
File “/usr/lib/python2.7/dist-packages/samba/netcmd/fsmo.py”, line 392, in run
pdcEmulator = get_fsmo_roleowner(samdb, domain_dn)
File “/usr/lib/python2.7/dist-packages/samba/netcmd/fsmo.py”, line 43, in get_fsmo_roleowner
master_owner = res[0][“fSMORoleOwner”][0]
Despues de mucho investigar descubro que es un problema con los roles (FSMO).. que parece que algunas hojas de LDAP no tienen el valor correcto.
samba-tool dbcheck –fix
Checking 655 objects
ERROR: fSMORoleOwner not found for role CN=RID Manager$,CN=System,DC=codema,DC=coop
Sieze role CN=RID Manager$,CN=System,DC=codema,DC=coop onto current DC by adding fSMORoleOwner=CN=NTDS Settings,CN=PARMENIDES3,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=codema,DC=coop [y/N/all/none] q^C
Finalmente . intento apoderarme de los roles .. pero tengo fallas con RIP y PDC
samba-tool fsmo seize –role=pdc
Entonces toco meterle mano a las tripas con unos LDIFF que corrigen el problema
dn: DC=codema,DC=coop
changetype: modify
replace: fSMORoleOwner
fSMORoleOwner: CN=NTDS Settings,CN=PARMENIDES3,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=codema,DC=coop
dn: CN=RID Manager$,CN=System,DC=codema,DC=coop
changetype: modify
replace: fSMORoleOwner
fSMORoleOwner: CN=NTDS Settings,CN=PARMENIDES3,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=codema,DC=coop
ldbmodify -H /var/lib/samba/private/sam.ldb –cross-ncs ./cosa2.ldif
Y listo
samba-tool fsmo show
ldb_wrap open of secrets.ldb
SchemaMasterRole owner: CN=NTDS Settings,CN=PARMENIDES3,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=codema,DC=coop
InfrastructureMasterRole owner: CN=NTDS Settings,CN=PARMENIDES3,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=codema,DC=coop
RidAllocationMasterRole owner: CN=NTDS Settings,CN=PARMENIDES3,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=codema,DC=coop
PdcEmulationMasterRole owner: CN=NTDS Settings,CN=PARMENIDES3,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=codema,DC=coop
DomainNamingMasterRole owner: CN=NTDS Settings,CN=PARMENIDES3,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=codema,DC=coop
DomainDnsZonesMasterRole owner: CN=NTDS Settings,CN=PARMENIDES3,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=codema,DC=coop
ForestDnsZonesMasterRole owner: CN=NTDS Settings,CN=PARMENIDES3,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=codema,DC=coop
http://poster.bshellz.net/samba/Ubuntu_14.04_4.1.6_to_4.3.8_Upgrade_Notes.txt
https://lists.samba.org/archive/samba/2015-December/196760.html
3. No sube el DNS
EN maquinas como Ubuntu 20 hay un systemd-resolvd que ocupa el puerto.
https://www.techrepublic.com/article/how-to-deploy-samba-on-linux-as-an-active-directory-domain-controller/
4. No puedo pegarme a un dominio con Windows 2019
No hay compatibilidad para un forest .. solo hasta 2012 y solo se puede montar con un servidor Read Only
samba-tool domain join codema.coop RODC -U“CODEMA-W10/Administrator” –realm=codema.coop
samba-tool domain join meiko.local RODC -U“MEIKO\\mkadmin” –site=AWS
Es un problema de compatibilidad de schemas
https://wiki.samba.org/index.php/AD_Schema_Version_Support
https://wiki.samba.org/index.php/Join_a_domain_as_a_RODC
https://blog.svedr.in/posts/samba4-readonly-dc-howto/
https://samba.tranquil.it/doc/en/samba_config_server/debian/server_rodc_debian.html
5. NO autentica ldap
ldap server require strong auth = no
Referencias
- https://wiki.samba.org/index.php/Setup_a_Samba_Active_Directory_Domain_Controller
- http://linuxprience.blogspot.com.co/2013/10/controlador-de-dominio-con-samba-4.html
- https://easgs.wordpress.com/2014/01/28/opensuse-13-1-con-active-directory-guia-ilustrada/
xFIN
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.
ANEXO 1: Script de Inicio
Crear en /etc/rc.d/init.d/samba
#! /bin/bash # # samba4 Bring up/down samba4 service # # chkconfig: - 90 10 # description: Activates/Deactivates all samba4 interfaces configured to \\ # start at boot time. # ### BEGIN INIT INFO # Provides: # Should-Start: # Short-Description: Bring up/down samba4 # Description: Bring up/down samba4 ### END INIT INFO # Source function library. . /etc/init.d/functions if [ -f /etc/sysconfig/samba4 ]; then \t. /etc/sysconfig/samba4 fi CWD=$(pwd) prog="samba4" start() { # Attach irda device echo -n $"Starting $prog: " \t/usr/local/samba/sbin/samba \tsleep 2 \tif ps ax | grep -v "grep" | grep -q /samba/sbin/samba ; then success $"samba4 startup"; else failure $"samba4 startup"; fi echo } stop() { # Stop service. echo -n $"Shutting down $prog: " \tkillall samba \tsleep 2 \tif ps ax | grep -v "grep" | grep -q /samba/sbin/samba ; then failure $"samba4 shutdown"; else success $"samba4 shutdown"; fi echo } status() { \t/usr/local/samba/sbin/samba --show-build } # See how we were called. case "$1" in start) \tstart ;; stop) \tstop ;; status) \tstatus irattach \t;; restart|reload) \tstop \tstart \t;; *) echo $"Usage: $0 {start|stop|restart|status}" exit 1 esac exit 0Apuntar enlace:/etc/rc3.d/S80samba4 -> ../rc.d/init.d/samba4
09-Mayo-2016 Kasandra
04-Junio-2013 J. C. Pineros C.