Tabla de Contenidos

Controlador De Dominio Ldap Samba Pdc Debian Squeeze

Manual Creado por Samuel Glez Jimenez samglezj@gmail.com

Introducción

Quiero compartir esta configuracion de un PDC en Debian Squeeze. Cualquier duda o sugerencia para mejorar el tutorial, envíenme un correo.

Preparativos

Verificamos el nombre de host y el dominio:

root@pdc:~# hostname 
pdc
root@pdc:~#hostname -d
mi.dominio.cu

Instalación

Paso 1:

Instalamos paquetes para cliente ldap:

root@pdc:~# apt-get install libnss-ldap libpam-ldap ldap-utils

* LDAP server Uniform Resource Identifier:
ldap://127.0.0.1/

* Distinguished name of the search base:
dc=mi,dc=dominio,dc=cu

* LDAP version to use:
3

* LDAP account for root:
cn=admin,dc=mi,dc=dominio,dc=cu

* LDAP root account password:
tu clave

* nsswitch.conf not managed automatically Para que el libnss-ldap trabaje necesita modificar /etc/nsswitch.conf
para usar el “ldap” datasource.
Hay un ejemplo de configuracion en /usr/share/doc/libnss-ldap/examples/nsswirch.ldap
el cual puede ser usado como ejemplo para la config del nsswitch.
Ok

* Esta opción permitirá utilidades de passwords que usa PAM para cambiar passwords locales.
La cuenta de administrador de LDAP se almacenara en un archivo separado, el cual debera ser solamente legible por el usuario root.
Si /etc está montado por NFS, esta opción debe deshabilitarse.
Allow LDAP admin account to behave like local root?
Yes

*Does the LDAP database require login?
No

* LDAP administrative account:
cn=admin,dc=mi,dc=dominio,dc=cu

* LDAP administrative password:
tu clave

root@pdc:~# cp -pf /etc/nsswitch.conf /etc/nsswitch.conf.orig
root@pdc:~# nano /etc/nsswitch.conf

Agregar-Cambiar lo que está en negrita:

passwd: compat ldap
group: compat ldap
shadow: compat ldap

hosts: files dns
networks: files

protocols: db files
services: db files
ethers: db files
rpc: db files

netgroup: ldap

root@pdc:~# cp -pf /etc/pam.d/common-password /etc/pam.d/common-password.orig
root@pdc:~# nano /etc/pam.d/common-password

Borrar lo que está en negrita:

password [success=1 user_unknown=ignore default=die] pam_ldap.so use_authtok try_first_pass

root@pdc:~# cp -pf /etc/pam.d/common-session /etc/pam.d/common-session.orig
root@pdc:~# nano /etc/pam.d/common-session

Agregar al final del archivo:

session optional pam_mkhomedir.so skel=/etc/skel umask=077
# end of pam-auth-update config

Paso 2:

root@pdc:~# apt-get install slapd ldap-utils

Administrator password: tu clave

Confirm password: tu clave

root@pdc:~# ldapsearch -LLL -Y EXTERNAL -H ldapi:/// -b cn=config dn
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: cn=config

dn: cn=module{0},cn=config

dn: cn=schema,cn=config

dn: cn={0}core,cn=schema,cn=config

dn: cn={1}cosine,cn=schema,cn=config

dn: cn={2}nis,cn=schema,cn=config

dn: cn={3}inetorgperson,cn=schema,cn=config

dn: olcBackend={0}hdb,cn=config

dn: olcDatabase={-1}frontend,cn=config

dn: olcDatabase={0}config,cn=config

dn: olcDatabase={1}hdb,cn=config
root@pdc:~# slappasswd

New password: tu clave
Re-enter new password: tu clave
Copiamos esta clave que nos genera
{SSHA}N6ZE0PfgwfV9kYlT0zKiI9kpG8sx3rVI

root@pdc:~# ldapmodify -Y EXTERNAL -H ldapi:///

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
dn: olcDatabase={0}config,cn=config
add: olcRootPW
olcRootPW: {SSHA}N6ZE0PfgwfV9kYlT0zKiI9kpG8sx3rVI
Ctrl+D
modifying entry “olcDatabase={0}config,cn=config”

Creamos el .ldif para importarlo luego:

root@pdc:~# nano config.ldif
config.ldif
dn: olcDatabase={1}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=mi,dc=dominio,dc=cu
-
replace: olcRootDN
olcRootDN: cn=admin,dc=mi,dc=dominio,dc=cu
-
replace: olcAccess
olcAccess: to attrs=userPassword by dn="cn=admin,dc=mi,dc=dominio,dc=cu" write by anonymous auth by self write by * none
olcAccess: to attrs=shadowLastChange by self write by * read
olcAccess: to dn.base="" by * read
olcAccess: to * by dn=”cn=admin,dc=mi,dc=dominio,dc=cu" write by * read
-

Importamos la config del ldif creado anteriormente:

root@pdc:~# ldapmodify -Y EXTERNAL -H ldapi:/// -f config.ldif

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry “olcDatabase={1}hdb,cn=config”

root@pdc:~# ldapsearch -xLLL -b cn=config -D cn=admin,cn=config -W olcDatabase={1}hdb

Enter LDAP Password: tu clave
dn: olcDatabase={1}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcDbDirectory: /var/lib/ldap
olcLastMod: TRUE
olcRootPW: {SSHA}iBRORXu81Urzz26uD3LbPY919jigTO9Q
olcDbCheckpoint: 512 30
olcDbConfig: {0}set_cachesize 0 2097152 0
olcDbConfig: {1}set_lk_max_objects 1500
olcDbConfig: {2}set_lk_max_locks 1500
olcDbConfig: {3}set_lk_max_lockers 1500
olcDbIndex: objectClass eq
olcSuffix: dc=mi,dc=dominio,dc=cu
olcRootDN: cn=admin,dc=mi,dc=dominio,dc=cu
olcAccess: {0}to attrs=userPassword by dn=”cn=admin,dc=mi,dc=dominio,dc=cu” writ
e by anonymous auth by self write by * none
olcAccess: {1}to attrs=shadowLastChange by self write by * read
olcAccess: {2}to dn.base=”” by * read
olcAccess: {3}to * by dn=”cn=admin,dc=mi,dc=dominio,dc=cu” write by * read

root@pdc:~# apt-get install phpldapadmin

http://172.16.72.72/phpldapadmin

Login: cn=admin,dc=mi,dc=dominio,dc=cu
Pass: tu clave

+ dc=mi,dc=dominio,dc=cu
Default
Delete this entry

root@pdc:~# nano base.ldif

dn: dc=mi,dc=dominio,dc=cu
objectClass: top
objectClass: dcObject
objectclass: organization
o: mi.dominio.cu
dc: Mi-Dominio
description: LDAP Server

dn: ou=people,dc=mi,dc=dominio,dc=cu
objectClass: organizationalUnit
ou: people

dn: ou=groups,dc=mi,dc=dominio,dc=cu
objectClass: organizationalUnit
ou: groups

root@pdc:~# ldapadd -x -D cn=admin,dc=mi,dc=dominio,dc=cu -W -f base.ldif

Enter LDAP Password: tu clave
adding new entry “dc=mi,dc=dominio,dc=cu”

adding new entry “ou=people,dc=mi,dc=dominio,dc=cu”

adding new entry “ou=groups,dc=mi,dc=dominio,dc=cu”

root@pdc:~# nano ldapuser.ldif
ldapuser.ldif
dn: uid=echo $line | cut -d: -f1,ou=people,dc=tu,dc=dominio,dc=cu”objectClass: inetOrgPerson”objectClass: posixAccount”objectClass: shadowAccount”uid: echo $line | cut -d: -f1?sn: echo $NAME | awk ‘{print $2}’”givenName: echo $NAME | awk ‘{print $1}’”cn: echo $NAME | sed -e “s/%/ /””displayName: echo $NAME | sed -e “s/%/ /””uidNumber: echo $line | cut -d: -f3?gidNumber: echo $line | cut -d: -f4”userPassword: {crypt}grep $UID1 /etc/shadow | cut -d: -f2”gecos: echo $NAME | sed -e “s/%/ /””loginShell: echo $line | cut -d: -f7”homeDirectory: echo $line | cut -d: -f6”shadowExpire: passwd -S $UID1 | awk ‘{print $7}’”shadowFlag: grep $UID1 /etc/shadow | cut -d: -f9”shadowWarning: passwd -S $UID1 | awk ‘{print $6}’”shadowMin: passwd -S $UID1 | awk ‘{print $4}’”shadowMax: passwd -S $UID1 | awk ‘{print $5}’”shadowLastChange: grep $UID1 /etc/shadow | cut -d: -f3”
root@pdc:~# ldapadd -x -D cn=admin,dc=mi,dc=dominio,dc=cu -W -f ldapuser.ldif

Enter LDAP Password: tu clave

root@pdc:~#nano ldapgroup.ldif
ldapgroup.ldif
dn: cn=echo $line | cut -d: -f1,ou=groups,dc=tu,dc=dominio,dc=cu’”objectClass: posixGroup”cn: echo $line | cut -d: -f1”gidNumber: echo $line | cut -d: -f3”
root@pdc:~# ldapadd -x -D cn=admin,dc=mi,dc=dominio,dc=cu -W -f ldapgroup.ldif

Enter LDAP Password: tu clave

Paso 3:

root@pdc:~#apt-get install samba-doc
root@pdc:~# cp -Rpf /etc/ldap/ /etc/ldap.orig
root@pdc:~# cp /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz /etc/ldap/schema/
root@pdc:~# gzip -d /etc/ldap/schema/samba.schema.gz
root@pdc:~# nano schema_convert.conf

include /etc/ldap/schema/core.schema
include /etc/ldap/schema/collective.schema
include /etc/ldap/schema/corba.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/duaconf.schema
include /etc/ldap/schema/dyngroup.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/java.schema
include /etc/ldap/schema/misc.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/openldap.schema
include /etc/ldap/schema/ppolicy.schema
include /etc/ldap/schema/samba.schema

root@pdc:~# mkdir -p ./tmp/ldif_output
root@pdc:~# slapcat -f schema_convert.conf -F ./tmp/ldif_output -n0 -s "cn={12}samba,cn=schema,cn=config" > ./tmp/cn=samba.ldif
root@pdc:~# cp -pf ./tmp/cn=samba.ldif ./tmp/cn=samba.ldif.orig
root@pdc:~# nano ./tmp/cn=samba.ldif

Eliminar el {12} de la linea 1 y la linea 3:
dn: cn={12}samba,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: {12}samba

Quedando:
dn: cn=samba,cn=schema,cn=config
objectClass: olcSchemaConfig
cn: samba

Eliminar estas líneas al final del archivo:
structuralObjectClass: olcSchemaConfig
entryUUID: bd8a7a82-3cb8-102f-8d5f-070b4e5d16f8
creatorsName: cn=config
createTimestamp: 20100815125953Z
entryCSN: 20100815125953.198505Z#000000#000#000000
modifiersName: cn=config
modifyTimestamp: 20100815125953Z

root@pdc:~# ldapadd -Y EXTERNAL -H ldapi:/// -f ./tmp/cn=samba.ldif

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry “cn=samba,cn=schema,cn=config”

root@pdc:~# nano samba_indexes.ldif
samba_indexes.ldif
dn: olcDatabase={1}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: uidNumber eq
olcDbIndex: gidNumber eq
olcDbIndex: loginShell eq
olcDbIndex: uid eq,pres,sub
olcDbIndex: memberUid eq,pres,sub
olcDbIndex: uniqueMember eq,pres
olcDbIndex: sambaSID eq
olcDbIndex: sambaPrimaryGroupSID eq
olcDbIndex: sambaGroupType eq
olcDbIndex: sambaSIDList eq
olcDbIndex: sambaDomainName eq
olcDbIndex: default sub
root@pdc:~# ldapmodify -Y EXTERNAL -H ldapi:/// -f samba_indexes.ldif

SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry “olcDatabase={1}hdb,cn=config”

root@pdc:~# /etc/init.d/slapd restart
root@pdc:~# apt-get install smbldap-tools samba

Workgroup/Domain Name: MiDominio

root@pdc:~# mv /etc/samba/smb.conf /etc/samba/smb.conf.orig
root@pdc:~# cp /usr/share/doc/smbldap-tools/examples/smb.conf /etc/samba/smb.conf
root@pdc:~# nano /etc/samba/smb.conf

Linea 3 cambiar el grupo de trabajo:
workgroup = MiDominio
Linea 12 comentarla:
#min passwd length = 3
Cambiar línea 22 a yes:
ldap passwd sync = yes
Cambiar línea 33 y 34 a:
Dos charset = CP932
Unix charset = UTF-8
48:
ldap admin dn = cn=admin,dc=mi,dc=dominio,dc=cu

50: ldap suffix = dc=mi,dc=dominio,dc=cu
ldap group suffix = ou=groups
ldap user suffix = ou=people

60 descomentarla:
delete group script = /usr/sbin/smbldap-groupdel “%g”

64 agregar:
set primary group script = /usr/sbin/smbldap-usermod -g ‘%g’ ‘%u’
admin users = master
ldap ssl = no

root@pdc:~# mkdir /home/netlogon
root@pdc:~# /etc/init.d/samba restart
root@pdc:~# smbpasswd -W

Setting stored password for “cn=admin,dc=mi,dc=dominio,dc=cu” in secrets.tdb
New SMB password: mi clave
Retype new SMB password: mi clave

INSTALACION DE MKNTPWD

root@pdc:~#cd /opt/
root@pdc:~#wget http://www.silcom.com.pe/soft/mkntpwd.tar.gz
pdc:~#tar -zxf mkntpwd.tar.gz
root@pdc:~#cd mkntpwd
root@pdc:~#make
root@pdc:~#cp mkntpwd /usr/local/bin

VERIFICAR

root@pdc:~#mkntpwd

Usage: mkntpwd [-L lanmgrpwd] [-N ntpasswd]
mkntpwd password
mkntpwd -f [-] [filename]

-L lanmgrpasswd LanManager cleartextpwd ⇐ 14 chars
-N ntpasswd NT cleartextpwd ⇐128 chars (usually ⇐14)

with both options present the encrypted LanManager-Pwd is
printed first, followed by a ‘:’ and the encrypted NT-Pwd.

The second usage behaves like mkntpwd -L pwd -N pwd

The third usage reads the password from STDIN or a File. Printout is the same as second.

anton@genua.de

root@pdc:~# gzip -d /usr/share/doc/smbldap-tools/configure.pl.gz
root@pdc:~# perl /usr/share/doc/smbldap-tools/configure.pl

A todas las preguntas, damos ENTER (leer, igual), excepto a “logon home” y “logon path”,
a las que damos respuesta escribiendo un punto “.” y luego ENTER.
El password es “miclave”, como siempre.

root@pdc:~# smbldap-populate

Populating LDAP directory for domain MiDominio (S-1-5-21-3529095435-2300348255-434367669) (using builtin directory structure)

entry dc=mi,dc=dominio,dc=cu already exist.
entry ou=people,dc=mi,dc=dominio,dc=cu already exist.
entry ou=groups,dc=mi,dc=dominio,dc=cu already exist.
adding new entry: ou=Computers,dc=mi,dc=dominio,dc=cu
adding new entry: ou=Idmap,dc=mi,dc=dominio,dc=cu
adding new entry: uid=root,ou=people,dc=mi,dc=dominio,dc=cu
adding new entry: uid=nobody,ou=people,dc=mi,dc=dominio,dc=cu
adding new entry: cn=Domain Admins,ou=groups,dc=mi,dc=dominio,dc=cu
adding new entry: cn=Domain Users,ou=groups,dc=mi,dc=dominio,dc=cu
adding new entry: cn=Domain Guests,ou=groups,dc=mi,dc=dominio,dc=cu
adding new entry: cn=Domain Computers,ou=groups,dc=mi,dc=dominio,dc=cu
adding new entry: cn=Administrators,ou=groups,dc=mi,dc=dominio,dc=cu
adding new entry: cn=Account Operators,ou=groups,dc=mi,dc=dominio,dc=cu
adding new entry: cn=Print Operators,ou=groups,dc=mi,dc=dominio,dc=cu
adding new entry: cn=Backup Operators,ou=groups,dc=mi,dc=dominio,dc=cu
adding new entry: cn=Replicators,ou=groups,dc=mi,dc=dominio,dc=cu
entry sambaDomainName=MiDominio,dc=mi,dc=dominio,dc=cu already exist. Updating it…

Please provide a password for the domain root:
Changing UNIX and samba passwords for root
New password: mi clave
Retype new password: mi clave

Agregar grupo admin que definio en el smb.conf (master):
root@pdc:~# smbldap-groupadd -a master

Cannot confirm gidNumber 1000 is free: checking for the next one

Agregamos usuario y a la vez al grupo de dominio (master):

root@pdc:~# smbldap-useradd -am -g master master

Cannot confirm uidNumber 1000 is free: checking for the next one

Creamos la contraseña para el usuario master:

root@pdc:~# smbldap-passwd master

Changing UNIX and samba passwords for master
New password: claveusuariomaster
Retype new password: claveusuariomaster

4ta Parte:

Agregando Windows Xp Dominio Linux

Para Registrar máquinas con Windows XP se debe crear/modificar la siguiente
etiqueta de registro usando regedit

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon\Parameters]
“requiresignorseal”=dword:00000000

Inicio, ejecutar:

C:\WINDOWS\system32\drivers\etc\hosts
Abrir con Notepad y poner dentro lo siguiente:
127.0.0.1 localhost
172.16.72.72 MiDominio

Agregamos un cliente al dominio:

Botón derecho sobre “Mi PC” → Properties
Vamos a la solapa “Computer Name”
Clickeamos el botón que dice “Change …”
Seleccionamos la opción “Domain”
Domain: MiDominio → Ok
Username: MiDominio\master
Password: claveusuariomaster

Agregando WINDOWS 7 Dominio Linux

Elementos a tomar en cuenta en un Windows 7 para unir a un dominio Debian-Samba-LDAP:

1) Inicio, ejecutar:

regedit

Y modificar lo siguientes registros

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\services\LanManWorkstation\Parameters]

“DNSNameResolutionRequired”=dword:00000000

“DomainCompatibilityMode”=dword:00000001

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\services\Netlogon\Parameters]

“RequireSignOrSeal”=dword:00000000

“RequireStrongKey”=dword:00000001

2) Además, chequear que en \HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\System
existan (si no, hay que crearlos) los siguientes valores DWORD:

a) LocalProfile con valor 1

b) ReadOnlyProfile con valor 1

3) Ir al Panel de Control, en Herramientas administrativas, Configuración
de seguridad, Directivas locales, Opciones de seguridad y buscar los siguientes
dos renglones pertenecientes a Seguridad de red:

a) seguridad de sesión mínima para clientes NTLM basados en SSP

b) seguridad de sesión mínima para servidores NTLM basados en SSP

En ambos, quitar el tilde en “Requerir cifrado de 128 bits”

Reiniciar el sistema y probar la unión al dominio, de la manera habitual
(propiedades de Equipo…, etc.)

Comprobación

PRUEBA 1

PODER VALIDAR POR SSH AL PDC, SI BIEN ES CIERTO LOS USUARIOS DEL DOMINIO
NO TIENEN SHELL DEBERIA SER POSIBLE HACER UN INICIO VIA SSH

root@pdc:~#ssh -l administrador 172.16.72.72

PRUEBA 2

PODER VALIDAR DESDE UN WIN$ AUN ASI NO SE HALLA UNIDO AL DOMINIO, SIN
PERTENECER AL DOMINIO DEBERÍA PODER VALIDAR COMO UN SIMPLE SERVER DE
ARCHIVOS
\\pdc\master

Notas

Si nos sale este error al tratar de meter el equipo al dominio:
“Las conexiones múltiples para un servidor o recurso compartido compatible
por el musmo usuario, usando más de un nombre de usuario, no están permitidas.
Desconecte todas las conexiones anteriores al servidor o recursos compartidos y
vuelva a intentarlo de nuevo.”
Debemos correr esto en una consola DOS:
net use * /d /y