Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.

Como configurar un Dominio Samba con openLDAP en CentOS 5

SambaLDAPC5

Dominio Samba con OpenLDAP (Parte 1: Configuracion General)
PARA CENTOS 5

Autor: Jaime M. Tan Nozawa
Correo electrónico: jtnozawa@gmail.com
Procedencia del autor: Lima-Perú

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.

© 2007 Jaime M.Tan Nozawa. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.

Introducción.

LDAP (Lightweight Directory Access Protocol) es un protocolo a nivel de aplicación que permite el acceso a un servicio de directorio ordenado y distribuido para buscar diversa información en un entorno de red. LDAP puede considerarse una base de datos (aunque su sistema de almacenamiento puede ser diferente) al que pueden realizarse consultas.
URL: http://es.wikipedia.org/wiki/LDAP

SMB (acrónimo de Server Message Block)  Protocolo de red que permite compartir archivos e impresoras (entre otras cosas) entre nodos de una red. Es utilizado principalmente en ordenadores con Microsoft Windows.  SMB fue originalmente inventado por IBM, pero la versión más común hoy en día es la modificada ampliamente por Microsoft. Microsoft renombró SMB a Common Internet File System (CIFS) en 1998 y añadió más características, que incluyen soporte para enlaces simbólicos, enlaces duros (hard links) y mayores tamaños de archivo.
URL: http://es.wikipedia.org/wiki/SMB

OpenLDAP es una implementación libre y open source del protoloco Lightweight Directory Access Protocol (LDAP) desarrollado por  elOpenLDAP Project. Está liberada bajo su propia licencia OpenLDAP Public License. LDAP es un protoloco independiente de la plataforma. Muchas distribuciones  Linux incluyen el software OpenLDAP para su soporte.

SAMBA es un conjunto de programas, originalmente creados por Andrew Tridgell y actualmente mantenidos por The SAMBA Team, bajo la Licencia Publica General GNU, y que implementan en sistemas basados sobre UNIX® el protocolo SMB. Sirve como reemplazo total para Windows® NT, Warp®, NFS® o servidores Netware®.

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

Instalación a través de yum.

 yum -y install openldap openldap-clients openldap-servers authconfig authconfig-gtk samba samba-client samba-common 

Procedimientos:

Para comenzar a utilizar este tutorial se asume pudo implementar satisfactoriamente el tutorial: un openLDAP como servidor de autenticación y el tutorial : Cómo configurar SAMBA de Joel Barrios. Algunas pequeñas fracciones y configuración de este documento fueron extraidas de los manuales previamente mencionados para brindar una mejor comprensión e hilo del tutorial.  

Éste manual es una versión actualizada de una previa para CentOS 4, difieren en algunos detalles obvios por la actualización de los paquetes. También haremos uso de paquetes de un repositorio que contenga el smbldap-tools en nuestro caso el DAG. (Mientras esperamos el AL Desktop)

1. OPENLDAP Y AUTENTICACIÓN

Vamos a copiar el archivo de esquema de samba al directorio de esquemas de openLDAP:

cp /usr/share/doc/samba-*/LDAP/samba.schema /etc/openldap/schema/

Luego de esto editaremos el archivo /etc/openldap/slapd.conf y agregar una linea más para que openLDAP soporte el esquema de 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

Añadimos al final del archivo /etc/openldap/slapd.conf :

database bdb 
suffix "dc=su-red-local,dc=com"
rootdn "cn=Administrador,dc=su-red-local,dc=com"
# Este password obtenido previamente al digitar slappasswd
rootpw {SSHA}XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
directory /var/lib/ldap/autenticar
# Indices to maintain for this database
#index objectClass eq,pres
#index ou,cn,mail,surname,givenname eq,pres,sub
#index uidNumber,gidNumber,loginShell eq,pres
#index uid,memberUid eq,pres,sub
#index nisMapName,nisMapEntry eq,pres,sub
index objectClass eq
index cn pres,sub,eq
index sn pres,sub,eq
index uid pres,sub,eq
index displayName pres,sub,eq
index uidNumber eq
index gidNumber eq
index memberUID eq
index sambaSID eq
index sambaPrimaryGroupSID eq
index sambaDomainName eq
index default sub

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

host 127.0.0.1
base dc=su-red-local,dc=com

Tambien tenemos que configurar el cliente LDAP en /etc/openldap/ldap.conf :

HOST 127.0.0.1
BASE dc=su-red-local,dc=com

Iniciamos el servicio LDAP y configuramos que arranque por defecto:

service ldap start 
chkconfig ldap on

Configuramos la autenticación de Linux con authconfig-tui :

captura authconfig01

Captura authconfig02


2. SAMBA e INTEGRACION LDAP

Ahora configuremos Samba en /etc/samba/smb.conf

 # Samba PDC openLDAP para CentOS 5
# x Jaime M. Tan Nozawa

# Nombre del dominio : podria ser nombre de la empresa.
workgroup = DOMAIN
server string = Samba Server
 netbios name = LINUX

# ----- Parametros LDAP -----

# Quien va a ser el usuario administrador del dominio
admin users = Administrator @"Domain Admins"
passdb backend = ldapsam:ldap://localhost

#?Sufijo ldap para todas las entradas siguientes

ldap suffix = dc=su-red-local,dc=com

# OU de usuarios netbios
ldap user suffix = ou=People

# OU de Grupos netbios
ldap group suffix = ou=Group

# Cuentas maquinas netbios
ldap machine suffix = ou=Computers

# La cuenta administrador openLDAP

ldap admin dn = cn=Administrador,dc=su-red-local,dc=com

# Sincronizacion de cuentas
LDAP, NT y LM
ldap passwd sync = yes

# Agregado de cuentas maquina automáticamente
add machine script = /usr/sbin/smbldap-useradd -w %u

# Aqui dejo comentado por si es necesario o a tu criterio usarlo
#ldap ssl = start tls
#add user script = /usr/sbin/smbldap-useradd -m "%u"
#ldap delete dn = Yes
#delete user script = /usr/sbin/smbldap-userdel "%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"
#ldap replication sleep = 1000 # Tiempo de replicacion entre servidores

# ----- FIN DE PARAMETROS LDAP

# Asegurarse de tener los siguiente parametros activado de la siguiete forma:

security = user

encrypt passwords = yes
os level = 65
domain master = yes
preferred master = yes
domain logons = yes

# ... demas opciones.

Ahora necesitamos hacer saber a samba cual es el password del usuario Administrador de openLDAP para que pueda conectarse al directorio (Esto se hacía en CentOS 4, me parece ahora no es necesario) :

smbpasswd -w password

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

Setting stored password for "cn=Administrador,dc=su-red-local,dc=com" in secrets.tdb


Testeamos y reiniciamos samba:
testparm
service smb restart


3. Smbldap-tools y repositorios extras.

Hasta este punto será necesario usar el openldap-tools, por alguna razón el que viene junto con samba no me funcionó así que opté por usar el del repositorio DAG.

NOTA: Despues de haber instalado el perl-LDAP del repositorio base (de mis pruebas del tutorial de CentOS 4), me dio conflicto con el perl-ldap de DAG, así que recomendaría desinstalarlo previamente.

En nuestro caso instalamos el RPM de http://dag.wieers.com/  :

wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
rpm -Uvh
rpmforge-release-0.3.6-1.el5.rf.i386.rpm

Ahora ya podemos comprobar en /etc/yum.repos.d/rpmforge.repo :

[rpmforge]
name = Red Hat Enterprise $releasever - RPMforge.net - dag
#baseurl = http://apt.sw.be/redhat/el5/en/$basearch/dag
mirrorlist = http://apt.sw.be/redhat/el5/en/mirrors-rpmforge
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge
enabled = 0
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1

Yo dejo desabilitado el repositorio por defecto (enabled=0).

Ahora ya es posible instalar el smbldap-tools :

yum install smbldap-tools --enablerepo=rpmforge

Con el siguiente resultado final de dependencias, pongo en negritas las del "repositorio extra":

Installed: smbldap-tools.noarch 0:0.9.1-1.2.el5.rf
Dependency Installed: perl-Compress-Zlib.i386 0:1.42-1.fc6 perl-Convert-ASN1.noarch 0:0.20-1.1 perl-Crypt-SmbHash.noarch 0:0.12-1.2.el5.rf perl-Digest-SHA1.i386 0:2.11-1.2.1 perl-HTML-Parser.i386 0:3.55-1.fc6 perl-HTML-Tagset.noarch 0:3.10-2.1.1 perl-IO-Socket-SSL.noarch 0:1.01-1.fc6 perl-Net-SSLeay.i386 0:1.30-4.fc6 perl-URI.noarch 0:1.35-3 perl-XML-NamespaceSupport.noarch 0:1.09-1.2.1 perl-XML-SAX.noarch 0:0.14-5 perl-ldap.noarch 0:0.33-1.el5.rf perl-libwww-perl.noarch 0:5.805-1.1.1
Complete!

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 LINUX is:   
S-1-5-21-XXXXXXXXXX-XXXXXXXXXX


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

# password es el password sin cifrar del Administrador openLDAP
slaveDN="cn=Administrador,dc=su-red-local,dc=com"
slavePw="password"
masterDN=
"cn=Administrador,dc=su-red-local,dc=com"
masterPw="password"

Y la configuración principal en  /etc/smbldap-tools/smbldap.conf :

# Aquí el SID que copiamos
SID="S-1-5-21-XXXXXXXXXXX-XXXXXXXXXX-XXXXXXX"

# El nombre del DOMINIO SAMBA workgroup = DOMAIN
sambaDomain="DOMAIN"

slaveLDAP="127.0.0.1"
slavePort="389"

masterLDAP="127.0.0.1"
masterPort="389"

# Para usar TLS con LDAP
# (También usará el puerto 389)
# ldapTLS="1"

# Pongo a optional porque no quiero que sea obligatorio la conexion
# verify="optional"

#cafile="/etc/smbldap-tools/ca.pem"
#clientcert="/etc/smbldap-tools/smbldap-tools.pem"
#clientkey="/etc/smbldap-tools/smbldap-tools.key"

# Sufijo por defecto a todas las entradas posteriores
suffix="dc=su-red-local,dc=com"

# 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}"

scope="sub"
hash_encrypt="SSHA"

crypt_salt_format="%s"

userLoginShell="/bin/bash"
userHome="/home/%U"
userHomeDirectoryMode="700"
userGecos="System User"
defaultUserGid="513"
defaultComputerGid="515"
skeletonDir="/etc/skel"
# Lo comento para que no caduce la contraseña cada 45 días, amenos que quieras lo contrario # -- Agregado recientemente 13-2-2008 -- : Esta línea no debe comentarse por ahora en 5.1 por bug en RPMS del DAG
defaultMaxPasswordAge="45"

#
# LINUX es el nombre NETBIOS DEL SERVER netbios name = LINUX
userSmbHome="\LINUX\%U"

# Perfiles
userProfile="\LINUX\profiles\%U"

# Letra de la unidad para su carpeta personal
userHomeDrive="Z:"

# Comento porque no usar un bat de arranque para mi caso
#userScript="logon.bat"

# Para el atributo de dominio para el correo por defecto
#mailDomain="su-red-local.com"

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

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-XXXXXXXXXXX-XXXXXXXXXXx-XXXXXXXXXx)
(using builtin directory structure)
adding new entry: dc=su-red-local,dc=com
adding new entry: ou=People,dc=su-red-local,dc=com
adding new entry: ou=Group,dc=su-red-local,dc=com
adding new entry: ou=Computers,dc=su-red-local,dc=com
adding new entry: ou=Idmap,dc=su-red-local,dc=com
adding new entry: uid=Administrator,ou=People,dc=su-red-local,dc=com
adding new entry: uid=nobody,ou=People,dc=su-red-local,dc=com
adding new entry: cn=Domain Admins,ou=Group,dc=su-red-local,dc=com
adding new entry: cn=Domain Users,ou=Group,dc=su-red-local,dc=com
adding new entry: cn=Domain Guests,ou=Group,dc=su-red-local,dc=com
adding new entry: cn=Domain Computers,ou=Group,dc=su-red-local,dc=com
adding new entry: cn=Administrators,ou=Group,dc=su-red-local,dc=com
adding new entry: cn=Account Operators,ou=Group,dc=su-red-local,dc=com
adding new entry: cn=Print Operators,ou=Group,dc=su-red-local,dc=com
adding new entry: cn=Backup Operators,ou=Group,dc=su-red-local,dc=com
adding new entry: cn=Replicators,ou=Group,dc=su-red-local,dc=com
adding new entry: sambaDomainName=DOMAIN,dc=su-red-local,dc=com
Please provide a password for the domain Administrator:
Changing password for Administrator
New password :
Retype 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-XXXXXXXXXX-XXXXXXXX-512) -> Domain Admins
Domain Users (S-1-5-21-XXXXXXXXXX-XXXXXXXX-513) -> Domain Users
Domain Guests (S-1-5-21-XXXXXXXXXX-XXXXXXXX-514) -> Domain Guests
Domain Computers (S-1-5-21-XXXXXXXXXX-XXXXXXXX-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 "" usuariowin
smbldap-passwd usuariowin

Mas detalle del comando smbldap-useradd en el siguiente anexo: Anexo 1: smbldap-useradd
Reiniciamos samba y openLdap:

service ldap restart
service smb restart

Uniendo máquinas al dominio del Controlador Primario de Dominio.

En este proceso no es necesario crear cuentas máquinas debido a que agregamos en el archivo /etc/samba/smb.conf el script correspondiente salvo posiblemente en plataformas antiguas.

Windows 95/98/ME y Windows XP Home

Ya que los sistemas con Windows 95/98/ME y Windows XP Home no incluyen una implementación completa como miembros de dominio, no se requieren cuentas de confianza. El procedimiento para unirse al dominio es el siguiente:

•  Acceder hacia Menú de inicio ? Configuraciones ? Panel de control ? Red
•  Seleccione la pestaña de Configuración
•  Seleccione «Cliente de redes Microsoft»
•  Haga clic en el botón de propiedades
•  Seleccione Acceder a dominio de Windows NT y especifique el dominio correspondiente.
•  Clic en todos los botones de «Aceptar» y reinicie el sistema
•  Acceda con un usuario que haya sido creado con  smbldap-useradd en el directorio LDAP o una cuenta de usuario que pertenezca a la OU=Domain Admins

Windows NT

•  Acceder hacia Menú de inicio ? Configuraciones ? Panel de control ? Red.
•  Seleccionar la pestaña de «Identificación».
•  Clic en el botón de «Cambiar».
•  Ingrese el nombre del dominio y el nombre del sistema. Seleccione «Crear una cuenta de máquina en el Dominio».
•  Clic en «Aceptar»
•  Espere algunos segundos.
•  Deberá mostrarse un mensaje emergente de confirmación que dice «Bienvenido a MI-DOMINIO»
•  Reinicie el sistema
•  Acceda con un usuario que haya sido creado con  smbldap-useradd en el directorio LDAP o una cuenta de usuario que pertenezca a la OU=Domain Admins

Windows 2000/2003 y Windows XP Profesional

•  Clic derecho en el icono de «Mi PC».
•  Seleccionar «Propiedades»
•  Haga clic en la pestaña de «Identificación de red» o «Nombre del sistema».
•  Clic en el botón de «Propiedades».
•  Clic en el botón «Miembro de dominio»
•  Ingrese el nombre del dominio y el nombre de la máquina y haga clic en el botón de «Aceptar»
•  Aparecerá un diálogo que preguntará por una cuenta y clave de acceso con privilegios de administración en el servidor. Especifique el usuario : Administrator y la clave de acceso que se le asignó. 
•  Espere algunos segundos.
•  Deberá mostrarse un mensaje emergente de confirmación que dice «Bienvenido a MI-DOMINIO»
•  Reinicie el sistema
•  Acceda con un usuario que haya sido creado con  smbldap-useradd en el directorio LDAP o una cuenta de usuario que pertenezca a la OU=Domain Admins

Comprobaciones:

Para culminar con este turorial procede a autenticarte en una máquina Windows con la cuenta usuario  usuariowin  creado en los pasos previos. Una vez dentro de tu cuenta presiona  CTRL+ALT+DEL  y cambia la contraseña.
Si todo fue bien pudiste cambiar la contraseña LDAP y por lo tanto tambien la de acceso local (si posee shell:  /bin/bash ) , abrimos una terminal cualquiera e intentemos autenticarnos con la cuenta usuariowin, deberíamos poder ingresar con la nueva contraseña.
Intenta ahora cambiar tu contraseña con  smbldap-passwd  como root.

Desarrollado desde Lima-Peru por :
Jaime M. Tan Nozawa.
Cuaquier consulta a mi correo

NOTAS DE ULTIMA HORA:  

(13/02/2008)

En al versión CentOS 5.1, en los paquetes del DAG hay un bug donde sale error al ponerle password a un usuario :

Use of uninitialized value in string at /usr/sbin/smbldap-passwd line  277, <STDIN> line 2.  
Failed to modify UNIX password: shadowMax: value #0
invalid per syntax at /usr/sbin/smbldap-passwd line 285, <STDIN> line 2.

Mientras esperamos la corrección de los paquetes del DAG por ahora , la forma más fácil, es descomentar (sin # ) la línea de caducidad de passwords en smbldap.conf :

defaultMaxPasswordAge="45"

(18/06/2007)

He observado en los lugares que he instalado que demora mucha al arrancar el CentOS Linux. Se queda en servicio "bus del sistema" mucho tiempo, despues de buscar mucho en los foros de Internet, lo solucioné haciendo de esta forma:

En:  /etc/ldap.conf  

buscar la linea que diga:  

bind_policy   hard

y cambiar por:

bind_policy    soft

La directiva bind_policy sirve para indicar que la conexión debe intentarla una vez y en caso de fracasar, no volver a intentarlo, algo necesario para que no tarde demasiado cada equipo cuando arranque y, antes de tener conexión a red, intentar acceder al servicio LDAP.



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

Última Edición: 13/02/2008, 09:08|Hits: 114,614 Ver la versión para imprimir