**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. * openldap-2.3.27 * openldap-clients-2.3.27 * openldap-servers-2.3. * authconfig-5.3.12 * samba-common * samba-client * samba-3.0. * smbldap-tools-0.9.1-1 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 * Bien ya tenemos instalados los servicio que utilizaremos téngase en cuenta que no e instalado de momento el smbldap-tools este lo dejaremos para último. Ok ahora explicare lo más interesante que se debe saber.\\ * Se requiere copiar el archivo DB_CONFIG.example dentro del directorio /var/lib/ldap/, como el archivo DB_CONFIG este fichero se encuentra alojado dentro del mismo openldap. Es decir, ejecute lo siguiente: cp /etc/openldap/DB_CONFIG.example /var/lib/ldap/DB_CONFIG Creación de claves de acceso para LDAP. * Para crear la clave de acceso que se asignará en LDAP para el usuario administrador del directorio, ejecute lo siguiente:\\ 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 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 -o add the user in the organizational unit (relative to the user suffix) -a is a Windows User (otherwise, Posix stuff only) -w is a Windows Workstation (otherwise, Posix stuff only) -i is a trust account (Windows Workstation) -u uid -g gid -G supplementary comma-separated groups -n do not create a group -d home -s shell -c gecos -m creates home directory and copies /etc/skel -k skeleton dir (with -m) -t time. Wait 'time' seconds before exiting (when adding Windows Workstation) -P ends by invoking smbldap-passwd -A can change password ? 0 if no, 1 if yes -B must change password ? 0 if no, 1 if yes -C sambaHomePath (SMB home share, like 'PDC-SRVhomes') -D sambaHomeDrive (letter associated with home share, like 'H:') -E sambaLogonScript (DOS script to execute on login) -F sambaProfilePath (profile directory, like 'PDC-SRVprofilesfoo') -H sambaAcctFlags (samba account control bits like '[NDHTUMWSLKI]') -N canonical name -S surname -M local mailAddress (comma seperated) -T mailToAddress (forward address) (comma seperated) -? show this help message