====== Controlador De Dominio Ldap Samba Pdc Debian Squeeze ====== Manual Creado por Samuel Glez Jimenez ===== 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 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 ==== 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 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