Manual Creado por Samuel Glez Jimenez samglezj@gmail.com
Quiero compartir esta configuracion de un PDC en Debian Squeeze. Cualquier duda o sugerencia para mejorar el tutorial, envíenme un correo.
Verificamos el nombre de host y el dominio:
root@pdc:~# hostname pdc
root@pdc:~#hostname -d mi.dominio.cu
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
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
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
“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
“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
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
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.)
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
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