Bueno e aquí como logre configurar el samba+ldap en le Centos 5.8

Lo primero que haremos es configurar el openldap para la autentificación ahí agregaremos todo lo necesario para vincularlo con el samba téngase en cuenta que no entrare en detalles de cada parámetro de lo que es ldap de sus bases de datos y tampoco explicar cada apartado solamente me enfocare en lo necesario para que pueda trabajar el samba+ldap, cualquier duda si lo desean escríbanme…
*Toda configuración mostrada en este manual funciona a la perfección de echo mis servicio estan trabajando de esta manera.*

Equipamiento lógico requerido.

Antes que nada aclaro, soy partidiario de instalar un server en consola puramente sin ningun paquete solamente para instalar luego lo unico que necesitare para no tener paquetes instalado que no usaremos. Bien dicho lo anterior empezamos.
*Advierto que estamos trabajando sobre la distro y versión de Centos5.4-5.8 ya la versión del Centos6 cambia radicalmente la configuración del ldap pues los pasos son diferentes por completo en otro apartado explicare como configurar un openldap en Centos6.*

yum -y install openldap openldap-clients openldap-servers  authconfig  samba samba-client samba-common
cp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG

Creación de claves de acceso para LDAP.

slappasswd   (Aqui ponemos la clave que deseamos)
{SSHA}dJ0Rz3yyb7wsfan1Bt8FzumdCkPVVvV5u  (Y esto es una muestra de como seria la salida de la clave)

Guardamos esta llave generada pues la utilizaremos mas adelante.

Luego de esto editaremos el archivo /etc/openldap/slapd.conf y agregar o reemplaza el contenido del fichero para que openLDAP soporte el samba. El archivo quedaría como lo siguiente:

############################################################################ # # See slapd.conf(5) for details on configuration options. # This file should NOT be world readable. #

  include		/etc/openldap/schema/core.schema
  include		/etc/openldap/schema/cosine.schema
  include		/etc/openldap/schema/inetorgperson.schema
  include		/etc/openldap/schema/nis.schema
  include		/etc/openldap/schema/samba.schema  (Este include es donde le decimos a ldap que soporte el schema de samba.)
  schemacheck	on

# Allow LDAPv2 client connections. This is NOT the default.

  allow bind_v2\\
  pidfile		/var/run/openldap/slapd.pid
  argsfile	/var/run/openldap/slapd.args

####################################################################### # ldbm and/or bdb database definitions #######################################################################

 database	bdb
 suffix		"dc=domain,dc=test,dc=cu"
 rootdn		"cn=administrador,dc=domain,dc=test,dc=cu"
 rootpw		{SSHA}dJ0Rz3yyb7wsfan1Bt8FzumdCkPVVvV5u ( Aqui es donde pegamos la clave generada que se guardo)
 directory	/var/lib/ldap
 lastmod		on

# Indices to maintain for this database

 index objectClass                     eq,pres
 index ou,cn,sn,mail,givenname   	eq,pres,sub
 index uidNumber,gidNumber,memberUid     eq,pres
 index loginShell			eq,pres

## required to support pdb_getsampwnam

 index uid                     		pres,sub,eq

## required to support pdb_getsambapwrid()

 index displayName             		pres,sub,eq
 index nisMapName,nisMapEntry            eq,pres,sub
 index sambaSID              		eq
 index sambaPrimaryGroupSID 		eq
 index sambaDomainName       		eq
 index default              		sub

# users can authenticate and change their password

 access to attrs=userPassword,sambaNTPassword,sambaLMPassword,sambaPwdMustChange,sambaPwdLastSet
    by dn="cn=administrador,dc=domain,dc=test,dc=cu" write
    by self write
    by anonymous auth
    by * none

# those 2 parameters must be world readable for password aging to work correctly # (or use a priviledge account in /etc/ldap.conf to bind to the directory)

access to attrs=shadowLastChange,shadowMax
    by dn="cn=administrador,dc=domain,dc=test,dc=cu" write
    by self write
    by * read

# all others attributes are readable to everybody

access to *
    by * read

Procedemos a iniciar el servicio ldap y agregandolo al inicio automatico.

service ldap start
chkconfig ldap on
    

Llegado aqui ya el ldap trabaja perfectamente siempre y cuando se hayan seguido los pasos ahora si quisieramos comprobar lo realizado no mas ejecutamos este comando que verifica que directorios disponibles existen en el servidor 127.0.0.1.

ldapsearch -h 127.0.0.1 -x -b '' -s base '(objectclass=*)' namingContexts

Con una salida similar a la mostrada aqui:

# extended LDIF
#
# LDAPv3
# base <> with scope base
# filter: (objectclass=*)
# requesting: namingContexts
#
#
dn:
namingContexts: dc=domain,dc=test,dc=cu
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1

El siguiente mandato debe devolver toda la información de todo el directorio solicitado (dc=domain,dc=test,dc=cu).

ldapsearch -x -b 'dc=domain,dc=test,dc=cu' '(objectclass=*)'

Tenemos que configurar los parametros globales como cliente(NSS), el mismo servidor localhost en /etc/ldap.conf

host 127.0.0.1\\
base dc=domain,dc=test,dc=cu\\
uri ldap://127.0.0.1/\\
pam_password md5**\\

# The search scope.

scope sub\\
nss_base_passwd		ou=People,dc=domain,dc=test,dc=cu?sub\\
nss_base_shadow		ou=People,dc=domain,dc=test,dc=cu?sub\\
nss_base_group		ou=Group,dc=domain,dc=test,dc=cu?sub**\\

Editamos el fichero /etc/nsswitch.conf donde modificamos las siguientes lineas

   passwd:     files ldap
   shadow:     files ldap
   group:      files ldap
   netgroup:   files ldap
   automount:  files ldap
   sudoers:    files ldap

Tambien tenemos que configurar el cliente LDAP en /etc/openldap/ldap.conf editando las siguientes lineas

host 127.0.0.1
base dc=domain,dc=test,dc=cu

Ahora solo nos queda configurar el samba mas instalar el smbldap-tools. Entonces modificamos el fichero de samba ubicado /etc/samba/smb.conf, quedando de la siguiente manera

# Samba PDC openLDAP para CentOS 5.8
# x Richard Soriano Sanchez
[global]

# Nombre del dominio : podria ser nombre de la empresa.

workgroup = DOMAIN
netbios name = TEST
security = user
enable privileges = yes
#interfaces = 192.168.5.11
#username map = /etc/samba/smbusers
server string = Linux Centos5 Direccion Municipal de la Vivienda
#security = ads
encrypt passwords = Yes
#min passwd length = 3
#pam password change = no
#obey pam restrictions = No
# method 2:
unix password sync = yes
ldap passwd sync = no
passwd program = /usr/sbin/smbldap-passwd -u "%u"
passwd chat = "Changing *\nNew password*" %n\n "*Retype new password*" %n\n"
log level = 0
syslog = 0
log file = /var/log/samba/log.%U
max log size = 100000
time server = Yes
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
mangling method = hash2
logon script = logon.bat
logon drive = Z:
      logon home = \\TEST\%U
      logon path = 
domain logons = Yes
domain master = Yes
os level = 65
preferred master = Yes
wins support = yes
  # ----- Parametros LDAP ---------------------------------
passdb backend = ldapsam:ldap://127.0.0.1/

La cuenta administrador openLDAP

ldap admin dn = cn=administrador,dc=domain,dc=test,dc=cu

Sufijo ldap para todas las entradas siguientes

ldap suffix = dc=domain,dc=test,dc=cu

OU de Grupos netbios

      ldap group suffix = ou=Group

OU de usuarios netbios

      ldap user suffix = ou=People

Cuentas maquinas netbios

      ldap machine suffix = ou=Computers
ldap idmap suffix = ou=Idmap
      add user script = /usr/sbin/smbldap-useradd -m "%u"
      ldap delete dn = Yes
      delete user script = /usr/sbin/smbldap-userdel "%u"

Agregado de cuentas maquina automáticamente

      add machine script = /usr/sbin/smbldap-useradd -t 0 -w "%u"
      add group script = /usr/sbin/smbldap-groupadd -p "%g" 
      delete group script = /usr/sbin/smbldap-groupdel "%g"
      add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"
      delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"
set primary group script = /usr/sbin/smbldap-usermod -g '%g' '%u'
      
      # ----- FIN DE PARAMETROS LDAP

[homes]

#valid users = %U
	read only = No
	create mask = 0664
	directory mask = 0775
	browseable = No	
veto files = /*.mp3/*.mp4/*.avi/*.mpg/*.dat/*.vob/*.exe/*.mkv/ (Toda extencion declarada aqui no podran copiarce en el home)

[netlogon]

path = /home/netlogon/
browseable = No
read only = yes

[profiles]

path = /home/profiles
read only = no
create mask = 0600
directory mask = 0700
browseable = No
guest ok = Yes
profile acls = yes
csc policy = disable
# next line is a great way to secure the profiles 
#force user = %U 
# next line allows administrator to access all profiles 
#valid users = %U "Domain Admins"

Ahora necesitamos hacer saber a samba cual es el password del usuario Administrador de openLDAP para que pueda conectarse al directorio

smbpasswd -w password

Nos aparecererá el siguiente mensaje y confirmará que samba ya pueda autenticarse en openLDAP

Setting stored password for "cn=Administrador, dc=domain,dc=test,dc=cu " in secrets.tdb

Testeamos y reiniciamos samba:

testparm
service smb restart

Ya en este punto instalamos el smbldap-tools para poder definir los grupos de maquinas y usuarios como claves etc.

yum -y install smbldap-tools

Ahora averigüemos el SID de nuestro servidor Samba:

net getlocalsid

Nos mostrará un mensaje similar al siguiente y debemos de anotarlo o copiarlo:

SID for domain TEST is: S-1-5-21-9901842461-2600320704-4177078223

Procedemos a configurar el acceso smbldap-tools a la BD de openLDAP en /etc/smbldap-tools/smbldap_bind.conf:

slaveDN="cn=Administrador,dc=domain,dc=test,dc=cu "
slavePw="password"
masterDN="cn=Administrador,dc=domain,dc=test,dc=cu "
masterPw="password"

El password aqui es la clave sin sifrar introducida al usar el comando slappasswd.
Y la configuración principal en /etc/smbldap-tools/smbldap.conf:

# Aquí el SID que copiamos

SID= "S-1-5-21-9901842461-2600320704-4177078223"

# El nombre del DOMINIO SAMBA workgroup = DOMAIN

sambaDomain="DOMAIN"

############################################################################## # # LDAP Configuration # ############################################################################## # Slave LDAP server # Ex: slaveLDAP=127.0.0.1 # If not defined, parameter is set to “127.0.0.1”

slaveLDAP="127.0.0.1"

# Slave LDAP port # If not defined, parameter is set to “389”

slavePort="389"

# Master LDAP server: needed for write operations # Ex: masterLDAP=127.0.0.1 # If not defined, parameter is set to “127.0.0.1”

masterLDAP="127.0.0.1"

# Master LDAP port # If not defined, parameter is set to “389”

masterPort="389"

# Sufijo por defecto a todas las entradas posteriores

suffix="dc=domain,dc=test,dc=cu"

# Usuarios del dominio

usersdn="ou=People,${suffix}"

# Cuentas Computadoras del dominio

computersdn="ou=Computers,${suffix}"

# Cuentas Grupo

groupsdn="ou=Group,${suffix}"

# Si somos un Samba Domain Member Server

idmapdn="ou=Idmap,${suffix}"

# Importante: el nextUID para calcular el codigo siguiente usuario o grupo

sambaUnixIdPooldn="sambaDomainName=DOMAIN,${suffix}"

# Default scope Used

scope="sub"

# Unix password encryption (CRYPT, MD5, SMD5, SSHA, SHA, CLEARTEXT)

hash_encrypt="MD5"

# if hash_encrypt is set to CRYPT, you may set a salt format. # default is “%s”, but many systems will generate MD5 hashed # passwords if you use “$1$%.8s”. This parameter is optional!

crypt_salt_format="%s"

############################################################################## # # Unix Accounts Configuration # ##############################################################################

# Login defs # Default Login Shell # Ex: userLoginShell=“/bin/bash”

userLoginShell="/bin/nologin"

# Home directory # Ex: userHome=“/home/%U”

userHome="/home/%U"

# Default mode used for user homeDirectory

userHomeDirectoryMode="700"

# Gecos

userGecos="System User"

# Default User (POSIX and Samba) GID

defaultUserGid="513"

# Default Computer (Samba) GID

defaultComputerGid="515"

# Skel dir

skeletonDir="/etc/skel"

#Comantar esta linea si no deseamos que la contraseña caduque cada 45 dias.

defaultMaxPasswordAge="45"

############################################################################## # # SAMBA Configuration # ##############################################################################

# LINUX es el nombre NETBIOS DEL SERVER netbios name = TEST

userSmbHome="\\TEST\%U"

# Perfiles

userProfile="\\TEST\profiles\%U"

# Letra de la unidad para su carpeta personal

userHomeDrive="Z:"

# The default user netlogon script name (%U username substitution) # if not used, will be automatically username.cmd # make sure script file is edited under dos # Ex: userScript=“startup.cmd” # make sure script file is edited under dos

userScript="logon.bat"

# Para el atributo de dominio para el correo por defecto

mailDomain="domain.test.cu"

############################################################################## # # SMBLDAP-TOOLS Configuration (default are ok for a RedHat) # ##############################################################################

# Allows not to use smbpasswd (if with_smbpasswd=“0” in smbldap.conf) but # prefer Crypt::SmbHash library

with_smbpasswd="0"
smbpasswd="/usr/bin/smbpasswd"

# Allows not to use slappasswd (if with_slappasswd=“0” in smbldap.conf) # but prefer Crypt:: libraries

with_slappasswd="0"
slappasswd="/usr/sbin/slappasswd"

Ahora debemos crear la estructura de dominio en openldap con el comando y digitar el password de Administrator que es el administrador del dominio:

smbldap-populate -a Administrator

Con un resultado similar al siguiente:

Populating LDAP directory for domain DOMAIN (S-1-5-21-9901842461-2600320704-4177078223)
(using builtin directory structure)
adding new entry: dc=domain,dc=test,dc=cu
adding new entry: ou=People,dc=domain,dc=test,dc=cu
adding new entry: ou=Group,dc=domain,dc=test,dc=cu
adding new entry: ou=Computers,dc=domain,dc=test,dc=cu
adding new entry: ou=Idmap,dc=domain,dc=test,dc=cu
adding new entry: uid=Administrator,ou=People,dc=domain,dc=test,dc=cu
adding new entry: uid=nobody,ou=People,dc=domain,dc=test,dc=cu
adding new entry: cn=Domain Admins,ou=Group,dc=domain,dc=test,dc=cu
adding new entry: cn=Domain Users,ou=Group,dc=domain,dc=test,dc=cu
adding new entry: cn=Domain Guests,ou=Group,dc=domain,dc=test,dc=cu
adding new entry: cn=Domain Computers,ou=Group,dc=domain,dc=test,dc=cu
adding new entry: cn=Administrators,ou=Group,dc=domain,dc=test,dc=cu
adding new entry: cn=Account Operators,ou=Group,dc=domain,dc=test,dc=cu
adding new entry: cn=Print Operators,ou=Group,dc=domain,dc=test,dc=cu
adding new entry: cn=Backup Operators,ou=Group,dc=domain,dc=test,dc=cu
adding new entry: cn=Replicators,ou=Group,dc=domain,dc=test,dc=cu
adding new entry: sambaDomainName=DOMAIN,dc=domain,dc=test,dc=cu
Please provide a password for the domain Administrator:
Changing password for Administrator
New password :

En este caso no quiero que se llame root por defecto, por ello le cambié con el parámetro -a Administrator.
Ahora veremos la asociación de los builtin groups del dominio SAMBA con los grupos openLDAP creados:

net groupmap list

Con un resultado similar al siguiente:

Domain Admins (S-1-5-21-9901842461-2600320704-4177078223-512) -> Domain Admins
Domain Users (S-1-5-21-9901842461-2600320704-4177078223-513) -> Domain Users
Domain Guests (S-1-5-21-9901842461-2600320704-4177078223-514) -> Domain Guests
Domain Computers (S-1-5-21-9901842461-2600320704-4177078223-515) -> Domain Computers
Administrators (S-1-5-32-544) -> Administrators
Account Operators (S-1-5-32-548) -> Account Operators
Print Operators (S-1-5-32-550) -> Print Operators
Backup Operators (S-1-5-32-551) -> Backup Operators
Replicators (S-1-5-32-552) -> Replicators

Ahora podemos crear una cuenta de usuario Windows ( -a), se le crear su carpeta personal ( -m), especificando que no tenga una ruta Profile (opción -F) y le asignamos un password:

smbldap-useradd -a -m -F "prueba" prueba
smbldap-passwd prueba

Mas detalle del comando smbldap-useradd en el Final de esta pagina: smbldap-useradd Reiniciamos samba y openLdap:

service ldap restart
service smb restart

COMPROBACIONES

Si ejecutamos el comando id seguido de un usuario existenten en la bd de ldap nos deberia aparecer lo siguiente.

id prueba

Con una salida similar a esta:

uid=1006(prueba) gid=513(Domain Users) grupos=513(Domain Users)

Una comprobacion mas completa que incluso nos da ya de esta manera los grupo en el samba+ldap seria buscando de esta manera

ldapsearch -x -b 'uid=prueba,ou=People,dc=domain,dc=test,dc=cu'

Con una salida similar a la siguiente:

# extended LDIF
#
# LDAPv3
# base <uid=tamara,ou=People,dc=domain,dc=test,dc=cu> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# prueba, People, domain.test.cu
dn: uid=tamara,ou=People,dc=domain,dc=test,dc=cu
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
objectClass: sambaSamAccount
cn: prueba
sn: prueba
givenName: prueba
uid: prueba
uidNumber: 1006
gidNumber: 513
homeDirectory: /home/prueba
loginShell: /bin/nologin
gecos: System User
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
sambaPwdCanChange: 0
displayName: prueba
sambaSID: S-1-5-21-9901842461-2600320704-4177078223-3012
sambaAcctFlags: [U]
shadowLastChange: 15986
shadowMax: 45
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1

Bueno si hasta aquí si todo lo has realizado tal cual como se a mostrado aquí las salidas después de cada código tendrán que ser similar a las mostradas aquí y todo deberá marchar sin problemas, cualquier duda o error encontrado ya que me puedo haber confundido perfecto no soy por favor hacérmelo saber. Aqui al final les muestro las funciones del smbldap-tools

Anexo 1: smbldap-useradd

/usr/sbin/smbldap-useradd [-awmugdsckABCDEFGHMNPST?] username
  1. o add the user in the organizational unit (relative to the user suffix)
  2. a is a Windows User (otherwise, Posix stuff only)
  3. w is a Windows Workstation (otherwise, Posix stuff only)
  4. i is a trust account (Windows Workstation)
  5. u uid
  6. g gid
  7. G supplementary comma-separated groups
  8. n do not create a group
  9. d home
  10. s shell
  11. c gecos
  12. m creates home directory and copies /etc/skel
  13. k skeleton dir (with -m)
  14. t time. Wait 'time' seconds before exiting (when adding Windows Workstation)
  15. P ends by invoking smbldap-passwd
  16. A can change password ? 0 if no, 1 if yes
  17. B must change password ? 0 if no, 1 if yes
  18. C sambaHomePath (SMB home share, like 'PDC-SRVhomes')
  19. D sambaHomeDrive (letter associated with home share, like 'H:')
  20. E sambaLogonScript (DOS script to execute on login)
  21. F sambaProfilePath (profile directory, like 'PDC-SRVprofilesfoo')
  22. H sambaAcctFlags (samba account control bits like '[NDHTUMWSLKI]')
  23. N canonical name
  24. S surname
  25. M local mailAddress (comma seperated)
  26. T mailToAddress (forward address) (comma seperated)
  27. ? show this help message