Howto: Configurar CentOS 5 como PDC (Controlador de Dominio Windows)

Voy a explicar como podemos configurar un CentOS 5 como PDC.
Vamos a utilizar OpenLDAP como Active Directory. Este se va a encargar de guardar todo lo que sea referente a los usuarios (Nombre, Apellido, Usuario, Password, directorio home, etc). Configuraremos nuestro sistema para que autentifique por medio de OpenLDAP, logrando integrar a los usuarios SAMBA. Utilizaremos SAMBA para que sea un controlador de dominio primario de Windows. Lo vamos a configurar con perfiles móviles y un recurso de disco compartido, de forma que un usuario conserve sus configuraciones, archivos y documentos. Esto quiere decir que cuando usemos una máquina con Windows conectada al dominio y efectuemos cambios en nuestro perfil, ya sea cambiando el fondo de pantalla, agregando iconos al escritorio; creando nuevos documentos; etc, estos se mantengan si nosotros nos movemos a otra máquina.

ACLARACIÓN: Para explicar algunas configuraciones voy a utilizar datos ficticios, los cuales ustedes tendrán que cambiar por los suyos. Ahora los paso a detallar:

  • Nombre del dominio Windows: EXAMPLE
  • Nombre del dominio LDAP: example.com
  • Nombre del host: pdc.example.com
  • Administrador del dominio: Administrador
  • Administrador del dominio LDAP: Manager
  • Password del administrador del domino LDAP: 123456

NOTA: Cuando editen un archivo de configuracion, es recomendable hacer un backup antes:

#cp archivo.conf archivo.conf.backup

Primero necesitamos tener instalados los paquetes de OpenLDAP y de SAMBA:

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

Ahora vamos a configurar OpenLDAP, primero copiamos el schema de SAMBA (Por medio de este archivo, OpenLDAP sabe que datos guardar y pedir para autentificar):

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

Despues de copiar el schema de SAMBA para OpneLDAP, vamos a crear el password para el administrador del dominio LDAP (Copiamos lo que nos devuelve este comando para ponerlo en el archivo /etc/openldap/slapd.conf):

# slappasswd -h {MD5}
New password:
Re-enter new password:
{MD5}4QrcOUm6Wau+VuBX8g+IPg==

Editamos el archivo de configuración /etc/openldap/slapd.conf para que quede de la siguiente manera:


# —– Schemas —–
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/misc.schema
include /etc/openldap/schema/samba.schema

# ----- Parametros generales de OpenLDAP -----

allow bind_v2

pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args

directory /var/lib/ldap

# ----- Parametros relacionados al dominio LDAP -----

access to attrs=SambaLMPassword,SambaNTPassword
  by dn="cn=example,dc=com" write
  by * none
access to *
  by dn="cn=Manager,dc=example,dc=com" write
  by * read

database bdb
suffix "dc=example,dc=com"
rootdn "cn=Manager,dc=example,dc=com"
rootpw
{MD5}4QrcOUm6Wau+VuBX8g+IPg==

# ----- Parametros de la base de datos -----

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 sambaSID eq
index sambaPrimaryGroupSID eq
index sambaDomainName eq
index default sub

checkpoint 512 30

Ahora necesitamos editar el archivo /etc/ldap.conf para que contenga:


base dc=example,dc=com
timelimit 120
bind_timelimit 120
idle_timelimit 3600
nss_initgroups_ignoreusers root,ldap,named,avahi,haldaemon,dbus,radvd,tomcat,radiusd,news,mailman
uri ldap://127.0.0.1/
ssl no
tls_cacertdir /etc/openldap/cacerts
pam_password md5

Y por ultimo debemos configurar el cliente LDAP, para eso editamos /etc/openldap/ldap.conf de la siguiente manera:


URI ldap://127.0.0.1/
BASE dc=example,dc=com
TLS_CACERTDIR /etc/openldap/cacerts

Tenemos que configurar al sistema para que autentique por OpenLDAP, para eso ejecutamos authconfig-tui y completamos como muestran las imágenes (Recuerden que los datos que utilizo son de ejemplo, ustedes tienen que reemplazar por los suyos):

#authconfig-tui
Image Hosted by ImageShack.us
Image Hosted by ImageShack.us
Listo LDAP, ahora procederemos con SAMBA. Editamos el archivo /etc/samba/smb.conf para que quede de la siguiente manera:


# —– Parametros globales —–
# ——————————-
[global]

#Nombre y descripcion del dominio
workgroup = EXAMPLE
server string = Dominio Primario
#Nombre netbios
netbios name = PDC

# ----- Parametros para integrar SAMBA con OpenLDAP -----

# Administrador del dominio
admin users = Administrador @"Domain Admins"
passdb backend = ldapsam:ldap://localhost
#Sufijo ldap
ldap suffix = dc=example,dc=com
# OU de usuarios
ldap user suffix = ou=People
# OU de grupos
ldap group suffix = ou=Group
# OU de maquinas
ldap machine suffix = ou=Computers
# Administrador de OpenLDAP
ldap admin dn = cn=Manager,dc=example,dc=com
# Sincronizacion de cuentas LDAP, NT y LM
ldap passwd sync = yes

# ----- Parametros de Seguridad de Samba -----

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

# ----- Integracion con smbldap-tools -----

ldap delete dn = Yes
add user script = /usr/sbin/smbldap-useradd -m "%u"
add machine script = /usr/sbin/smbldap-useradd -w "%u"
add group script = /usr/sbin/smbldap-groupadd -p "%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"
delete user script = /usr/sbin/smbldap-userdel "%u"
delete group script = /usr/sbin/smbldap-groupdel "%g"
set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u"

# ----- Parametros Windbind -----

winbind nested groups = no

# ----- Opciones de impresion -----

load printers = yes
cups options = raw

# ----- Deficinicion de recursos compartidos -----
# ————————————————

[homes]
comment = Home Directories
browseable = no
writable = yes

[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
guest ok = no
writable = no
printable = yes

# ----- Recurso netlogon (Donde se ponen los scripts de logon) -----
[netlogon]
comment = Network Logon Service
path = /var/lib/samba/netlogon
guest ok = yes
writable = no
share modes = no

# ----- Recurso profiles (Donde se guardan los perfiles) -----
[Profiles]
path = /var/lib/samba/profiles
comment = Network Profiles Share
create mask = 0600
directory mask = 0700
browseable = no
writable = yes
guest ok = no
printable = no
store dos attributes = Yes
hide files = /desktop.ini/outlook*.lnk/*Briefcase*/

Como paso final con SAMBA necesitamos crear los directorios de los profiles y de logon:

#mkdir /var/lib/samba/logon
#mkdir /var/lib/samba/profiles
#chmod o+w /var/lib/samba/profiles

Ahora vamos a reiniciar los servicios de SAMBA y LDAP

#chkconfig ldap on
#chkconfig smb on
#service ldap restart
#service smb restart

Despues de todo lo anterior estamos listos para integrar OpenLDAP y SAMBA, pero antes instalaremos Smbldap-tools. Este paquetes nos provee de herramientas que permiten una mejor manipulación de los recursos de un dominio (Usuarios, PCs, etc). Para instalarlos vamos a configurar un repositorio extra (repositorio DAG):

#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

Modificamos al archivo /etc/yum.repos.d/rpmforge.repo para que quede de la siguiente forma:

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

Aclaracion: Es recomendable desabilitar este repositorio para conservar le estabilidad del sistema. Solo lo vamos a usar para instalar Smbldap-tools, ya que el que trae SAMBA no funciona (O al menos no lo he podido hacer funcionar…).

Para instalar Smbldap-tools ejecutamos:

#yum install smbldap-tools –enablerepo=rpmforge

Una vez instalado configuramos Smbldap-tools para que funcione con nuestra configuracion, para eso primero editamos el archivo /etc/smbldap-tools/smbldap_bind.conf para que quede de la siguiente manera (Recuerden que los valores de los parámetros son a modo de ejemplo, ustedes tienen que utizar los suyos):


slaveDN="cn=Manager,dc=example,dc=com"
slavePw="123456"
masterDN="cn=Manager,dc=example,dc=com"
masterPw="123456"

Nota: El password es el que ingresaron cuando utilizaron con el comando slappasswd (No lo que obtuvieron, si no lo que ingresaron).

En segundo lugar tenemos que configurar el archivo /etc/smbldap-tools/smbldap.conf, pero antes tenemos que averiguar el SSID de nuestro dominio (Es uno de los datos que tenemos que ingresar en /etc/smbldap-tools/smbldap.conf):

#net getlocalsid
SID for domain PDC is:
S-1-5-21-415277157-3344451951-2205127578
Una vez obtenido el SSID editamos /etc/smbldap-tools/smbldap.conf para que solamente contenga :

# —– Datos del dominio —–
SID="
S-1-5-21-415277157-3344451951-2205127578"
sambaDomain="EXAMPLE"

# ----- Datos del servidor LDAP -----
slaveLDAP="127.0.0.1"
slavePort="389"
masterLDAP="127.0.0.1"
masterPort="389"
suffix="dc=example,dc=com"
usersdn="ou=Users,${suffix}"
computersdn="ou=Computers,${suffix}"
groupsdn="ou=Groups,${suffix}"
idmapdn="ou=Idmap,${suffix}"
sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}"
scope="sub"
hash_encrypt="SSHA"
crypt_salt_format="%s"

# ----- Configuracion de las cuentas Unix -----
userLoginShell="/bin/bash"
userHome="/home/%U"
userHomeDirectoryMode="700"
userGecos="System User"
defaultUserGid="513"
defaultComputerGid="515"
skeletonDir="/etc/skel"
defaultMaxPasswordAge="45"

# ----- Configuracion de las cuentas SAMBA -----
userSmbHome="\\PDC\%U"
userProfile="\\PDC\profiles\%U"
userHomeDrive="Z:"

# ----- configuracion de smbldap-tools -----
with_smbpasswd="0"
smbpasswd="/usr/bin/smbpasswd"
with_slappasswd="0"
slappasswd="/usr/sbin/slappasswd"

Nota: Tienen que poner el SSID que les devolvió el comando net getlocalsid

Editados los archivos de configuracion, vamos a utilizar las herramientas de Smbldap-tools para administrar nuestro dominio. Lo primero que tenemos que hacer es crear la estructura del dominio en LDAP y establecer al administrador del dominio (En este caso voy a usar al usuario Administrador como administrador del dominio, ustedes pueden usar cualquiere, por defecto si no ponen nada usa como administrador al usuario root)

smbldap-populate -a Administrador

Ok, esta todo listo, ahora podemos crear usuarios para el dominio de Windows. Para eso usamos el comando smbldap-useradd de la suite Smbldap-tool:

#smbldap-useradd -a -m -P Nombre_del_Usuario_del_Dominio

Para conocer mas opciones del comando smbldap-useradd usen el switch smbldap-useradd –help

Como paso final tienen que probar el nuevo usuario en una PC con Windows que este asociada al dominio Windows que crearon.

Espero les haya servido, cualquier duda o sugerencia no duden en enviarmela. Saludos!

13 comentarios para “Howto: Configurar CentOS 5 como PDC (Controlador de Dominio Windows)”

  1. cocoliso Dijo:

    anada con vista/srv2008?
    Que tipo de hash usa?

  2. demonccc Dijo:

    No te quiero mentir, nunca lo probe con Vista. Saludos!

  3. No me ha funcionado, ya desde aqui:

    [root@localhost samba]# service ldap restart
    Parando slapd: [FALLÓ]
    Verificando los archivos de configuración para slapd: /etc/openldap/slapd.conf: line 20: warning: no by clause(s) specified in access line (ignored).
    /etc/openldap/slapd.conf: line 23: warning: no by clause(s) specified in access line (ignored).
    config file testing succeeded
    [ OK ]
    Iniciando slapd: [ OK ]

    ——

    Luego no puedo añadir usuarios pq al añadir me dice lo siguiente:
    smbldap-useradd -a -m -P mperezg
    erreur LDAP: Can’t contact master ldap server for writing (IO::Socket::INET: Bad hostname ‘ldap.iallanis.info’) at /usr/sbin//smbldap_tools.pm line 322.
    [4]+ Done gedit slapd.conf.backup

    ————
    Tal vez la causa es que no he modificado el archivo /etc/yum.repos.d/rpmforge.repo pq el servidor que indicas no conecta.
    Muchas gracias y espero que me puedas ayudar

  4. Como andas Manuel?

    El primer error se debe a lo mejor porque no hay dos espacios antes del by:

    access to attrs=SambaLMPassword,SambaNTPassword
    by dn=”cn=example,dc=com” write
    by * none
    access to *
    by dn=”cn=Manager,dc=example,dc=com” write
    by * read

    Fijate si es eso y avisame, si no también podes mandarme un mail con lo que tenes en el archivo.

    Me podes pasar el mensaje de error, en que paso y que es lo que pones cuando te sale el error de conexión a rpmforge?

    Saludos!

  5. Exelente tu blog, para mí que quiero reemplazar servidores Windows por linux me viene al pelo, Una pregunta de usuario novel, instalé centos 5.2 y quiero que se autentique en un AD, vi que tenía un menú de autenticación donde se podía configurar kerberos y windbind, probé distintas opciones pero no me funciona, se puede hacer desde allí?

    Lo que voy a probar ahora es likewise-open.

  6. Se puede reemplazar un controlador de dominio windows con un servidor Linux con una configuración como esta?

  7. Arysar,

    Nunca tuve la oportunidad de integrar un Linux con Novel… así que no se que decirte que podes hacer… Perdón.

    Con esta configuración reemplazas tranquilamente un controlador de dominio Windows. Es mas, si le integras el otro tutorial también vas a tener la oportunidad de integrar un proxy que autentique con los mismos usuarios del dominio.
    Saludos!

  8. Hola Buenos Dias, me estoy iniciando en el tema Linux y para empezar comence bastante adelante, me dieron una tarea de reemplazar un dominio WINDOWS2k.

    He instalado CentOS 5.2 y he utilizado este HowTo pero me encuentro con un problema al ejecutar el comando luego de realizar la configuracion inicial de los archivos.

    #service ldap restart

    el mensaje dice:
    ERROR LDAP Line80: can only by set when rootd n is under suffix.

    Desde ya muchas gracias por la ayuda y estan muy buenos estos Howto para quienes no estamos muy empapados en Linux.

    Saludos:)

  9. Si desean que funcione, mi tutorial levantado desde junio del 2007 de Samba+openLdap, con licencia libre creative commons:

    http://www.alcancelibre.org/staticpages/index.php/SAMBALDAP-CENTOS5

    y hace un mes, la parte 2:
    http://www.alcancelibre.org/staticpages/index.php/Samba-LDAP-GUI-LAM-Centos5

  10. Hola,

    Estoy siguiendo el tutorial, y llego hasta la parte donde se reincian los servicios ldap y samba. Cuando corro service ldap restart, obtengo lo siguiente:

    [root@PDC /]# service ldap restart
    Parando slapd: [FALLÓ]
    Verificando los archivos de configuración para slapd: config file testing succeeded
    [ OK ]
    Iniciando slapd: [ OK ]
    [root@PDC /]#

    Me doy cuenta que el servicio ldap no levanto, porque ejecuto service ldap status y obtengo el mensaje:
    slapd está parado

    El servicio samba si reinicia bien.

    He seguido los pasos al pie de la letra, pero no consigo la solucion.

    Gracias.

  11. Estimado, por favor su ayuda, he instalado un controlador de dominios PDC con samba en CentOS y un servidor openldap en la misma máquina, estoy tratando de incorporales, pero el momento que deseo averiguar el SSID del dominio (Es uno de los datos que se debe ingresar en /etc/smbldap-tools/smbldap.conf), coloco…

    #net getlocalsid

    pero no me devuelve el SSID, me sale el mensaje

    [2009/02/08 22:24:02, 0] passdb/secretc.c:fetch_ldap_pw(825)
    fetch_ldap_pw: neither ldap secret retrieved!
    [2009/02/08 22:24:02, 0] lib/smbldap.c:smbldap_connect_systems(924)
    ldap_connect_systems: Failed to retrieve password from secrets.tdb

    Por favor su ayuda, elimine todo e instale nuevamente pero el error persiste.

    Gracias

  12. Lucy, por lo que deduzco es un error en el paso de establecer el pass para usar samba con ldap. Si seguis paso a paso la configuración del sistema para usar ldap y te da este error, proba usando este comando:

    smbpasswd -w password

    donde “password” es el pass que estableciste para el usuario administrador de ldap (cn=Manager,dc=tu,dc=dominio,dc=com)

    Saludos!

  13. Maria, como andas.
    Me mataste, el script de inicio testea la configuración y no encuentra ningún error…
    Proba usando este comando y fijate que error te devuelve:

    slapd -d 16383

    Fijate si en el archivo /etc/openldap/slapd.conf tenes las siguientes lineas:

    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/misc.schema
    include /etc/openldap/schema/samba.schema

    Lo que también podes hacer, es revisar que existan dichos archivos.

    Saludos!

Leave a Reply