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ú
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
:
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) :
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:
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:
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