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