11.07.2015 Views

controlador primarioo samba ldap - Papagayo System, CA

controlador primarioo samba ldap - Papagayo System, CA

controlador primarioo samba ldap - Papagayo System, CA

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

1- Introducción2- Características del servicio3- Software a utilizar4- Configuración de SLAPD4.1- Agregar el Schema Samba al Directorio4.2- El archivo /etc/<strong>ldap</strong>/slapd.conf4.3- Pruebas Preliminares de servidor <strong>ldap</strong>4.4- La herramienta php<strong>ldap</strong>admin5- Configuración de Samba5.1- El archivo /etc/<strong>samba</strong>/smb.conf5.2- Crear los directorios netlogon y profiles5.2.1- Crear scripts de inicio de sesión5.2.2- Implementar Políticas de Sistema5.3- Comprobando la configuración e iniciando el servicio5.4- La herramienta SWAT (Samba Web Administration Tool)6- Configuración de smb<strong>ldap</strong>-tools6.1- Obteniendo los archivos de configuración6.2- Obteniendo el SID6.3- El archivo /etc/smb<strong>ldap</strong>-tools/smb<strong>ldap</strong>.conf6.4- El archivo /etc/smb<strong>ldap</strong>-tools/smb<strong>ldap</strong>_bind.conf6.5- Poblando el directorio LDAP con el Schema Samba - La herramienta smb<strong>ldap</strong>populate6.6- Testeando la configuración de Samba y <strong>ldap</strong>7- Configuración de PAM/NSS7.1- Configuración de libnss-<strong>ldap</strong>7.1.1- El archivo /etc/libnss-<strong>ldap</strong>.conf7.1.2- El archivo /etc/libnss-<strong>ldap</strong>.secret7.2- Configurando el paquete libpam-<strong>ldap</strong>7.2.1- El archivo /etc/pam_<strong>ldap</strong>.conf7.2.2- El archivo /etc/pam_<strong>ldap</strong>.secret7.3- El archivo /etc/nsswitch.conf7.4- Configurando PAM7.4.1- El archivo /etc/pam.d/common-auth7.4.2- El archivo /etc/pam.d/common-account7.4.3- El archivo /etc/pam.d/common-password7.4.4- El archivo /etc/pam.d/common-session8- Creación de usuarios y grupos en el directorio LDAP mediante smb<strong>ldap</strong>-tools8.1- Crear usuarios del dominio8.2- Crear un usuario administrador del dominio


8.3- Crear un Grupo en el dominio8.4- Eliminar usuarios y grupos del dominio9- Agregar los usuarios Linux/Unix locales al directorio LDAP10- Agregar equipos Windows al Dominio10.1- Requisitos del sistema Windows10.2- Unir el equipo con Windows XP Professional al dominio Samba10.3- Eliminar el equipo del dominio10.4- Notas para equipos con Windows 711- Configurando PAM/NSS de clientes Linux/Unix para que utilicen la Autenticacióncentralizada.12- Referencias1- IntroducciónSe explica en este articulo la implementación de una base de datos de usuarios centralizadamediante OpenLDAP, la implementación de un Controlador Primario de Dominio (PDC) medianteSamba, el cual utilizará la información del directorio LDAP para autenticar y asignar privilegios yrestricciones, y la autenticación de usuarios desde terminales Linux/Unix mediante PAM/NSSSi tiene la intención de realizar una implementación de pruebas previa a la implementación final serecomienda:Realizar las pruebas sobre un equipo de finalidad exclusiva o bien una máquina virtualdestinada a estos efectos.Utilizar una instalación básica del Sistema Operativo: sin servicio ni entorno gráfico.No utilizar el nombre de dominio debian.org o example.com, estos nombres son losutilizados en la mayoría de los archivos de configuración como parámetros de ejemplo yutilizarlos para la implementación se presta a confusiones. En este articulo se utilizará eldominio de ejemplo esdebian.org y el equipo <strong>controlador</strong> de dominio tendrá por nombredebian-pdcSea paciente: los archivos a modificar son muchos, sus nombres se parecen y losparámetros a modificar en cada caso son similares, es normal que la configuración nofuncione a la primera y se deba hacer una revisión completa de los parámetros.2- Características del servicioEl mantener la base de datos centralizada permite:Mantener centralizada la información de usuarios, sus claves de acceso y sus privilegios ylimitaciones.Mantener un control de acceso a todos los recursos de la red utilizando la informacióncentralizada.


Cualquier usuario puede acceder al sistema y a sus recursos desde cualquier terminal, susprivilegios y limitaciones le serán efectivos con solo ingresar su nombre de usuario y clavede acceso.Se pueden aplicar restricciones que serán impuestas a los usuarios sin importar la terminalde desde la cual acceden.Se puede compartir la información de autenticación con otros servicios como autorizaciónde acceso a internet, cuentas de correo electrónico, servicio interno de mensajerainstantánea, etc.Replicación LDAP3- Software a utilizarLa implementación se llevará a cabo sobre un Sistema Operativo Debian GNU/Linux.El software a utilizar será: Debian GNU/Linux: en su versión 5.0.3. Samba: paquete <strong>samba</strong>, smbclient, smbfs y <strong>samba</strong>-doc en su versión 2:3.2.5-4lenny7 OpenLDAP: paquete slapd en su versión 2.4.11-1+lenny1 Ldap-utils: paquete <strong>ldap</strong>-utils en su versión 2.4.11-1+lenny1 Libpam-<strong>ldap</strong>: paquete libpam-<strong>ldap</strong> en su versión 184-4.2 Libnss-<strong>ldap</strong>: paquete libnss-<strong>ldap</strong> en su versión 261-2.1 Smb<strong>ldap</strong>-tools: paquete smb<strong>ldap</strong>-tools en su versión 0.9.4-1Se instalará todo el software de una vez, los paquetes de configuración de los diferentes serviciosnos solicitarán cierta información, por ahora responderemos con cualquier dato ya que masadelante reconfiguraremos los paquetes y la información será solicitada de nuevo. Puede, siquiere, responder con datos reales si cree conocer cuales son pero en este punto no esimportante.Instalemos los paquetes necesarios:aptitude install slapd <strong>ldap</strong>-utils libpam-<strong>ldap</strong> libpam-cracklib libnss-<strong>ldap</strong><strong>samba</strong> <strong>samba</strong>-doc smbclient smbfs smb<strong>ldap</strong>-tools libpam-dotfile4- Configuración de SLAPDLo primero será reconfigurar el paquete slapd# dpkg-reconfigure slapdResponderemos a las siguientes preguntas:¿Omitir la configuración del servidor OpenLDAP?: NoDNS Domain Name: esdebian.orgOrganization Name: esdebian.orgContraseña de Administrador: <strong>ldap</strong>adminVerificar Contraseña: <strong>ldap</strong>adminDatabase backend to use: HDB¿Desea que se borre la base de datos cuando se puergue el paquete slapd?: No¿Desea mover la base de datos antigua?: SiAllow LDAPv2 protocol?: No


Para que <strong>ldap</strong> sea el soporte para <strong>samba</strong> debemos incorporarle la estructura de grupos y usuariosque <strong>samba</strong> necesita, esa estructura debe contar con ciertos atributos y esos atributos se definenen un schema, pero antes de incorporar esos atributos deberemos hacer una copia de nuestrabase de datos.La herramienta slapcat nos permite volcar el contenido de una base de datos <strong>ldap</strong> a un archivo detexto ldif (LDAP Directory Interchange Format). Hacemos un backup de la base de datos ahora:# slapcat > ~/slapd.ldif4.1- Agregar el Schema Samba al DirectorioUn schema (esquema) define el tipo de objetos que podemos manejar en nuestro arbol dedirectorio, sus atributos y sus reglas de sintaxis.Slapd incluye por defecto los esquemas necesarios para almacenar informacion de cuentasUnix/Posix pero no incorpora soporte para el esquema de <strong>samba</strong>, afortunadamente el paquete<strong>samba</strong>-doc nos proveerá de uno. Simplemente haremos:# zcat /usr/share/doc/<strong>samba</strong>-doc/examples/LDAP/<strong>samba</strong>.schema.gz >/etc/<strong>ldap</strong>/schema/<strong>samba</strong>.schema4.2- El archivo /etc/<strong>ldap</strong>/slapd.confEs el archivo principal de configuración del servidor slapd. Hagamos una copia de respaldo delmismo antes de modificar el original:# cp /etc/<strong>ldap</strong>/slapd.conf{,.original}Para generar el password utilizaremos la herramienta slappasswd, la clave que utilizaremos es lamisma que la que se ingresó cuando se configuró slapd: <strong>ldap</strong>admin.No es requerimiento que sea la misma clave, pero utilizaremos la misma para evitar confusiones:~# slappasswd -h {md5}New password: <strong>ldap</strong>adminRe-enter new password: <strong>ldap</strong>admin{MD5}TmZgZ01/Z0/29bOPByMr4A==La salida de slappasswd se utilizará como valor del parámetro rootpw en el archivo/etc/<strong>ldap</strong>/slapd.conf. Este parametro se establece para hacer posible la replicacionmediante syncreplAhora reemplacemos el contenido del archivo /etc/<strong>ldap</strong>/slapd.conf con lo siguiete (no olvide dereemplazar el valor del parámetro rootpw con su hash):


Archivo# This is the main slapd configuration file. See slapd.conf(5) for more# info on the configuration options.######################################################################## Global Directives:# Features to permit#allow bind_v2# Schema and objectClass definitionsinclude/etc/<strong>ldap</strong>/schema/core.schemainclude/etc/<strong>ldap</strong>/schema/cosine.schemainclude/etc/<strong>ldap</strong>/schema/nis.schemainclude/etc/<strong>ldap</strong>/schema/inetorgperson.schemainclude/etc/<strong>ldap</strong>/schema/<strong>samba</strong>.schema# Where the pid file is put. The init.d script# will not stop the server if you change this.pidfile/var/run/slapd/slapd.pid# List of arguments that were passed to the serverargsfile /var/run/slapd/slapd.args# Read slapd.conf(5) for possible valuesloglevel none# Where the dynamically loaded modules are storedmodulepath /usr/lib/<strong>ldap</strong>moduleload back_hdb# The maximum number of entries that is returned for a search operationsizelimit 500# The tool-threads parameter sets the actual amount of cpu's that is used# for indexing.tool-threads 1######################################################################## Specific Backend Directives for hdb:# Backend specific directives apply to this backend until another# 'backend' directive occursbackend hdb######################################################################## Specific Backend Directives for 'other':# Backend specific directives apply to this backend until another# 'backend' directive occurs#backend ######################################################################## Specific Directives for database #1, of type hdb:


# Database specific directives apply to this databasse until another# 'database' directive occursdatabase hdb# The base of your directory in database #1suffix"dc=esdebian,dc=org"# rootdn directive for specifying a superuser on the database. This isneeded# for syncrepl.rootdn"cn=admin,dc=esdebian,dc=org"rootpw{MD5}TmZgZ01/Z0/29bOPByMr4A==# Where the database file are physically stored for database #1directory "/var/lib/<strong>ldap</strong>"# The dbconfig settings are used to generate a DB_CONFIG file the first# time slapd starts. They do NOT override existing an existing DB_CONFIG# file. You should therefore change these settings in DB_CONFIG directly# or remove DB_CONFIG and restart slapd for changes to take effect.# For the Debian package we use 2MB as default but be sure to update this# value if you have plenty of RAMdbconfig set_cachesize 0 2097152 0# Sven Hartge reported that he had to set this value incredibly high# to get slapd running at all. See http://bugs.debian.org/303057 for more# information.# Number of objects that can be locked at the same time.dbconfig set_lk_max_objects 1500# Number of locks (both requested and granted)dbconfig set_lk_max_locks 1500# Number of lockersdbconfig set_lk_max_lockers 1500# Indices to maintain for this databaseindex objectClasseq,presindex ou,cn,sn,mail,givennameeq,pres,subindex uidNumber,gidNumber,memberUid eq,presindex loginShelleq,pres## required to support pdb_getsampwnamindex uidpres,sub,eq## required to support pdb_get<strong>samba</strong>pwrid()index displayNamepres,sub,eqindex nisMapName,nisMapEntryeq,pres,subindex <strong>samba</strong>SIDeqindex <strong>samba</strong>PrimaryGroupSIDeqindex <strong>samba</strong>DomainNameeqindex defaultsubindex uniqueMembereqindex <strong>samba</strong>GroupTypeeqindex <strong>samba</strong>SIDListeq


# Save the time that the entry gets modified, for database #1lastmodon# Checkpoint the BerkeleyDB database periodically in case of system# failure and to speed slapd shutdown.checkpoint 512 30# Where to store the replica logs for database #1# replogfile /var/lib/<strong>ldap</strong>/replog# users can authenticate and change their passwordaccess toattrs=userPassword,<strong>samba</strong>NTPassword,<strong>samba</strong>LMPassword,<strong>samba</strong>PwdMustChange,<strong>samba</strong>PwdLastSetby self writeby anonymous authby * none# those 2 parameters must be world readable for password aging to workcorrectly# (or use a priviledge account in /etc/<strong>ldap</strong>.conf to bind to thedirectory)access to attrs=shadowLastChange,shadowMaxby self writeby * read# all others attributes are readable to everybodyaccess to *by * read# For Netscape Roaming support, each user gets a roaming# profile for which they have write access to#access to dn=".*,ou=Roaming,o=morsnet"# by dn="cn=admin,dc=example,dc=com" write# by dnattr=owner write######################################################################## Specific Directives for database #2, of type 'other' (can be hdb too):# Database specific directives apply to this databasse until another# 'database' directive occurs#database # The base of your directory for database #2#suffix "dc=debian,dc=org"Como el archivo es muy extenso solo analizaremos las diferencias entre el archivo original y el nuevo, nos valdremos para eso dediff, si no conoce como funciona esta herramienta le bastará con saber que una linea que comienza con un + significa que ha sidoagregada en el archivo nuevo y una que comienza con un - significa que la linea ha sido quitada, una linea sin nada significa que lalinea permanece en ambos archivos.Por partes:


includeincludeinclude+include/etc/<strong>ldap</strong>/schema/cosine.schema/etc/<strong>ldap</strong>/schema/nis.schema/etc/<strong>ldap</strong>/schema/inetorgperson.schema/etc/<strong>ldap</strong>/schema/<strong>samba</strong>.schemaSe ha agregado el esquema <strong>samba</strong>.schema para que sea incluido-suffix+suffix"dc=example,dc=com""dc=esdebian,dc=org"Se ha modificado el sufijo de la base de datos a esdebian.org+rootdn+rootpw"cn=admin,dc=esdebian,dc=org"{MD5}SCBBhdOlfHozkVbuKGZt5w==Se han agregado las lineas que establecen el nombre (admin) y el password del administrador de la base de datos.-indexobjectClass eq+index objectClass+index ou,cn,sn,mail,givenname+index uidNumber,gidNumber,memberUid+index loginShell+index uid+index displayName+index nisMapName,nisMapEntry+index <strong>samba</strong>SID+index <strong>samba</strong>PrimaryGroupSID+index <strong>samba</strong>DomainName+index default+index uniqueMember+index <strong>samba</strong>GroupType+index <strong>samba</strong>SIDListeq,preseq,pres,subeq,preseq,prespres,sub,eqpres,sub,eqeq,pres,subeqeqeqsubeqeqeqSe ha agregado una gran cantidad de definiciones de índices. Al ser una base de datos, el incorporar índices acelerará lasbúsquedas lo cual es muy importante en un servidor atareado.-access to attrs=userPassword,shadowLastChange- by dn="cn=admin,dc=example,dc=com" write- by anonymous auth+access to


attrs=userPassword,<strong>samba</strong>NTPassword,<strong>samba</strong>LMPassword,<strong>samba</strong>PwdMustChange,<strong>samba</strong>PwdLastSetby self write+ by anonymous authby * none-access to dn.base="" by * read+access to attrs=shadowLastChange,shadowMax+ by self write+ by * readaccess to *- by dn="cn=admin,dc=example,dc=com" writeby * readSe otorgan permisos a los usuarios para acceder y modificar sus passwords, entre otras cosas.Para verificar la correctitud del archivo de configuración ejecutamos la herramienta slaptest:# slaptest -v -uconfig file testing succeededY ya podemos reiniciar el servido slapd# /etc/init.d/slapd restart4.3- Pruebas Preliminares de servidor <strong>ldap</strong>Hagamos una consulta al servidor LDAP para ver si responde correctamente. Con el comando <strong>ldap</strong>search consultaremos elnamingContexts:~ # <strong>ldap</strong>search -x -b '' -s base '(objectclass=*)' namingContexts# extended LDIF## LDAPv3# base with scope baseObject# filter: (objectclass=*)# requesting: namingContexts##dn:namingContexts: dc=esdebian,dc=org# search resultsearch: 2result: 0 Success# numResponses: 2# numEntries: 1


Ahora haremos una busqueda en el directorio LDAP autenticado como el usuario admin del LDAP y haremos la buqueda usandocomo base dc=esdebian,dc=org, esto es para comprobar que la autenticación y nuestras ACLs funcionen correctamente, ademásde comprobar que el directorio se haya incializado con la estrucutra básica..:~# <strong>ldap</strong>search -x -D "cn=admin,dc=esdebian,dc=org" -b"dc=esdebian,dc=org" -WEnter LDAP Password:# extended LDIF## LDAPv3# base with scope subtree# filter: (objectclass=*)# requesting: ALL## esdebian.orgdn: dc=esdebian,dc=orgobjectClass: topobjectClass: dcObjectobjectClass: organizationo: esdebian.orgdc: esdebian# admin, esdebian.orgdn: cn=admin,dc=esdebian,dc=orgobjectClass: simpleSecurityObjectobjectClass: organizationalRolecn: admindescription: LDAP administratoruserPassword:: e2NyeXB0fWRuZ2QvVWtZMEdzbGc=# search resultsearch: 2result: 0 Success# numResponses: 3# numEntries: 24.4- La herramienta php<strong>ldap</strong>adminEsta es una herramienta alternativa que puede utilizar para gestionar el directorio LDAP. Resulta muy útil pero no es necesariapara realizar la configuración que se plantea en este artículo.Si desea utilizar esta herramienta basta con instalarla:# aptitude install php<strong>ldap</strong>adminLo cual instalará una gran cantidad de software como dependencias, entre ellos apache2 y php5.Una vez instalado el software ya puede acceder desde cualquier navegador mediante:


http://ip_del_servidor/php<strong>ldap</strong>adminIngrese el nombre de usuario, en este caso cn=admin,dc=esdebian,dc=org, y la clave del mismo, en nuestro caso <strong>ldap</strong>adminNota: si cuando definio rootpw en /etc/<strong>ldap</strong>/slapd.conf utilizo otro password en lugar de <strong>ldap</strong>admin podra ingresar comocn=admin,dc=esdebian,dc=org utilizando cualquiera de los dos passwords5- Configuración de Samba5.1- El archivo /etc/<strong>samba</strong>/smb.confAbrir el archivo y modificar/Agregar los siguientes parametros:# Archivo principal de configuración de Samba[global]# Juego de caractreres para archivos dos y unixdos charset = 850Unix charset = ISO8859-1# Nombre de dominio y nombre netBIOSworkgroup = ESDEBIANrealm = esdebian.org# Cadena con la cual se identifica al servidorserver string = %h server# Comportamiento frente a usuarios inexistentesmap to guest = Bad User# Archivo de mapeo de nombres de usuarios, este archivo no existe, por loque debe crearse# El contenido es de la forma usuario = alias# Es util para mapear por ejemplo la cuenta de root con Administrator, lacuenta de# administrador en sistemas windowsusername map = /etc/<strong>samba</strong>/smbusers# Informacion para la utilizacion del directorio LDAP como base de datosde usuariospassdb backend = <strong>ldap</strong>sam:<strong>ldap</strong>://127.0.0.1/<strong>ldap</strong> admin dn = cn=admin,dc=esdebian,dc=org<strong>ldap</strong> delete dn = Yes<strong>ldap</strong> group suffix = ou=group<strong>ldap</strong> idmap suffix = ou=idmap<strong>ldap</strong> machine suffix = ou=computer<strong>ldap</strong> suffix = dc=esdebian,dc=org<strong>ldap</strong> ssl = no<strong>ldap</strong> user suffix = ou=peopleadd user script = /usr/sbin/smb<strong>ldap</strong>-useradd -m %udelete user script = /usr/sbin/smb<strong>ldap</strong>-userdel %uadd group script = /usr/sbin/smb<strong>ldap</strong>-groupadd -p %gdelete group script = /usr/sbin/smb<strong>ldap</strong>-groupdel %gadd user to group script = /usr/sbin/smb<strong>ldap</strong>-groupmod -m %u %g


delete user from group script = /usr/sbin/smb<strong>ldap</strong>-groupmod -x %u %gset primary group script = /usr/sbin/smb<strong>ldap</strong>-usermod -g %g %uadd machine script = /usr/sbin/smb<strong>ldap</strong>-useradd -w %u# Informacion relacionada con la red (adaptar a sus necesidades)socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192interfaces = eth0 lohosts allow = 127.0.0.1, 192.168.1.0/24hosts deny = 0.0.0.0smb ports = 139 445bind interfaces only = Yesname resolve order = wins hosts lmhosts bcastremote announce = 192.168.1.255# Cambio de contraseñas y otras opciones de PDCpam password change = Yespasswd program = /usr/sbin/smb<strong>ldap</strong>-passwd -u %upasswd chat = *New*password* %n\n *Retype*new*password* %n\n*all*authentication*tokens*updated*# Script de inicio de sesionlogon script = 'logon.bat %U'# Esto hace que los usuarios posean perfiles movibles. Un perfil móvilimplica# que gran volumen de información se transmite a través de la red cadavez que# un usuario inicia sesión. Para desactivar los perfiles móviles se debedejar# el parámetro con un valor vacío, como sigue: logon path = ""# En este ejemplo se permiten perfiles móvileslogon path = \\%N\profiles\%Ulogon drive = U:domain logons = Yesos level = 65preferred master = Yesdomain master = Yesdns proxy = Nowins support = Yespanic action = /usr/share/<strong>samba</strong>/panic-action %dmap acl inherit = Yescase sensitive = Nohide unreadable = Yes# Sincronizar password UNIX con passwords del dominiounix password sync = Yes# Loggigingsyslog = 0log file = /var/log/<strong>samba</strong>/log.%mmax log size = 1000## Sincroonizar la hora con el servidor PDCtime server = Yes#


# Mapear atributos de archivo de Unix a Windows# Estas opciones requieren que los parametros create mask y directorymask# tenga activo el bit de ejecucion para "grupo" y "otros"map hidden = Yesmap system = Yes# Recursos compartidos[homes]comment = Home Directoriesvalid users = %Sread only = Nocreate mask = 0611directory mask = 0711browseable = No[printers]comment = All Printerspath = /var/spool/<strong>samba</strong>create mask = 0611directory mask = 0711printable = Yesbrowseable = No[print$]comment = Printer Driverspath = /var/lib/<strong>samba</strong>/printerscreate mask = 0611directory mask = 0711[netlogon]path = /var/lib/<strong>samba</strong>/netlogonbrowseable = Nocreate mask = 0611directory mask = 0711[profiles]path = /var/lib/<strong>samba</strong>/profilesforce user = %Uread only = Nocreate mask = 0611directory mask = 0711guest ok = Yesprofile acls = Yesbrowseable = Nocsc policy = disable[public]path = /tmpread only = Noguest ok = Yescreate mask = 0611directory mask = 0711


Se han incluido una seride de explicaicones dentro del archivo a modo de comentario. Seria mas que conveniente que no se limite acopiar el archivo, sino que lea los comentarios.El archivo /etc/<strong>samba</strong>/smbusersPreste atencion al parametro username map = /etc/<strong>samba</strong>/smbusers, que indica el archivo de mapeo de nombres de usuarios.Este archivo no existe por lo que debe crearse, el contenido es de la forma usuario = alias y es util para mapear porejemplo la cuenta de root con Administrator, la cuenta de administrador en sistemas windowsEl contenido de /etc/<strong>samba</strong>/smbusers podria ser# Archivo de mapeo de usuarios# Formato: Unix_ID = Windows_ID## Ejemplo:# root = Administrator# pepe = "Pepe Parada"#root = Administratorroot = Administrador5.2- Crear los directorios netlogon y profilesCreamos los directorios especiales netlogon y profile y le asignamos los permisos adecuados# mkdir -p /var/lib/<strong>samba</strong>/netlogon /var/lib/<strong>samba</strong>/profiles# chown -Rf root:root /var/lib/<strong>samba</strong>/netlogon /var/lib/<strong>samba</strong>/profiles# chmod 1777 /var/lib/<strong>samba</strong>/profiles5.2.1- Crear scripts de inicio de sesiónUn script de inicio de sesión Windows es un archivo bat con comandos que se ejecutarán del lado del cliente cuando un usuarioinicie sesión. El script a utilizarse está definido por el parámetro logon script en la sección [global] de/etc/<strong>samba</strong>/smb.confNosotros definimos el paramatro de la siguiente maneralogon script = 'logon.bat %U'Lo que indica al cliente que debe buscarse el archivo logon.bat en el directorio compartido netlogon.Nosotros además hemos incluido %U en la definición, %U se reemplazará por el nombre de usuario y éste se pasará por parametroal script. Eso nos permitirá personalizar la acción dependiendo del usuario que inicia sesión.Un script de inicio de sesión es utilizado frecuentemente para tareas como:Sincronizar la hora con el servidorConectar unidades de redVaciar directorios temporalesUn ejemplo de script de inicio de sesión podría ser:@echo offnet time \\debian-pdc /set /yesIF %1 == Administrador net use p: \\debian-pdc\rootIF %1 == guest net use p: \\debian-pdc\publico


5.2.2- Implementar Politicas de SistemaA grandes rasgos, Políticas de Sistema es un mecanismo que se emplea en sistemas Microsoft Windows para esablecer ciertascondiciones que se imponen a los usuarios y procesos del equipo.Cada equipo Windows define su "Políticas de Sistema" local. Cuando un usuario inicia sesión en un equipo que pertenece a undominio, éste además descarga del servidor, si está disponible, el archivo de políticas Globales y las hace efectivas en el cliente."Políticas de Sistema" cuenta con una jerarquía, la definición de una política local gobierna a una política global, mientras que unapolítica globál solo se hará efectiva si no está definida esa política localmente.No es la finalidad de este artículo dar una explicación detallada de Políticas de Sistema, simplemente se dará una breve explicaciónde como implementarlas en un dominio Samba.En un entorno de Dominio las Políticas se materializan en un único archivo de nombre NTConfig.POL que se almacenará enel directorio compartido netlogon, de modo que los clientes acceden a este archivo a través de la ruta \\debianpdc\netlogon\NTConfig.POLEntonces implementar las políticas es muy simple, la complejidad radica en crear el archivo NTConfig.POL y ajustarlo anuestras necesidades.Para esto debemos obtener el software poledit.exe, lo que hacemos es, desde un equipo Windows NT compatible:Nos dirigimos al sitio de descargas de Microsoft Windows 2000: http://www.microsoft.com/windows2000/Descargamos el archivo "Windows 2000 Service Pack 4 Network Install for IT Professionals" (W2kSP4_EN.EXE)Descomprimimos el paquete con "W2kSP4_EN.EXE /x"Ejecutamos el archivo "adminpack.msi" para instalar las herramientasCorremos "poledit.exe"Ya obtenido el software se puede crear un arhivo de Politicas de manera Standard, se asume que para implementar "Politias deSistema" usted sabe que son y como se configuran.Una vez ajustadas las politicas a nuestras necesidades simplemente debemos guardar el archivo como NTConfig.POL ycopiarlo al servidor en el directorio compartido netlogon, en nuestro caso /var/lib/<strong>samba</strong>/netlogonEn http://www.pcc-services.com/custom_poledit.html se explica como configurar políticas de modo mas detallado y además seofrecen plantillas personalizadas que usted puede utilizar.NOTA: Esta configuración no es compatible para clientes Windows 98, cuyo archivo de políticas se denomina Config.POL ysu estructura es diferente e incompatible. No se tratará en este artículo el caso de clientes Windows 98.5.3- Comprobando la configuración e iniciando el servicioPara comprobar la configuración de <strong>samba</strong> basta con ejecutar:# testparmSi todo es correcto ya podemas reiniciar el servicio:# /etc/init.d/<strong>samba</strong> restartY ahora le indicamos a <strong>samba</strong> la clave de nuestro usuario admin especificado en smb.conf para que pueda así acceder y modificarnuestro directorio <strong>ldap</strong>, en nuestro caso la clave que utilizamos es <strong>ldap</strong>admin# smbpasswd -WSetting stored password for "cn=admin,dc=esdebian,dc=org" in secrets.tdbNew SMB password: <strong>ldap</strong>adminRetype new SMB password: <strong>ldap</strong>admin


La clave se almacenará en /var/lib/<strong>samba</strong>/secrets.tdb, asegurémonos que los permisos de dicho archivo sean los adecuados# ls -l /var/lib/<strong>samba</strong>/secrets.tdb-rw------- 1 root root 8192 2008-06-18 23:29 /var/lib/<strong>samba</strong>/secrets.tdb5.4- La herramienta SWAT (Samba Web Administration Tool)Esta herramienta resulta muy útil para configurar un servidor <strong>samba</strong>, cuenta con una interfaz a la cual se accede a través de unnavegador web y permite modificar todos los parametros de smb.conf a la vez que cuenta con toda la información de las paginasman para cada parámetro de configuración.Al igual que cuando se describió la herramienta php<strong>ldap</strong>admin, esta herramienta tampoco es necesaria para la configuración que sepropone en este articulo.Para instalar swat, simplemente hacer:# aptitude install swatEl servicio Swat corre bajo el superserver inetd, por lo que debemos decirle a inetd que active el servicio# update-inetd --enable 'swat'Ahora ya podemos acceder desde cualquier navegador ingresando en la barra de direccioneshttp://ip_del_servidor:9016- Configuración de smb<strong>ldap</strong>-toolsEl archivo de configuración de smb<strong>ldap</strong>-tools es /etc/smb<strong>ldap</strong>-tools/smb<strong>ldap</strong>.conf, en dicho archivo sedefinen los parámetros básicos como servidor <strong>ldap</strong>, servidor <strong>samba</strong>, tipo de comunicación (cifrada o en claro), dominio, SID, etc.Además necesita contar con el archivo smb<strong>ldap</strong>_bind.conf, en dicho archivo se almacenará en claro la informaciónnecesaria para la conexión con el servidor <strong>ldap</strong>6.1- Obteniendo los archivos de configuraciónSi ingresamos al directorio /etc/smb<strong>ldap</strong>-tools/ nos encontraremos con que está vacío, Afortunadamente podemos obtener losarchivos de configuración desde los archivos de ejemplo de smb<strong>ldap</strong>-tools# zcat /usr/share/doc/smb<strong>ldap</strong>-tools/examples/smb<strong>ldap</strong>.conf.gz >/etc/smb<strong>ldap</strong>-tools/smb<strong>ldap</strong>.conf# cp /usr/share/doc/smb<strong>ldap</strong>-tools/examples/smb<strong>ldap</strong>_bind.conf/etc/smb<strong>ldap</strong>-tools/smb<strong>ldap</strong>_bind.confLos permisos de /etc/smb<strong>ldap</strong>-tools/smb<strong>ldap</strong>.conf y /etc/smb<strong>ldap</strong>tools/smb<strong>ldap</strong>_bind.confdeberian ser 640, propiedad de root y grupo open<strong>ldap</strong>.# chmod 640 /etc/smb<strong>ldap</strong>-tools/smb<strong>ldap</strong>.conf /etc/smb<strong>ldap</strong>tools/smb<strong>ldap</strong>_bind.conf# chown root:open<strong>ldap</strong> /etc/smb<strong>ldap</strong>-tools/smb<strong>ldap</strong>.conf /etc/smb<strong>ldap</strong>tools/smb<strong>ldap</strong>_bind.conf6.2- Obteniendo el SIDEl SID (security identifiers) es un identificador único asignado desde su creación a cada objeto dentro de un dominio. Todo objeto enel dominio tiene un SID y, claro, el <strong>controlador</strong> de dominio también tiene uno.


Para obtener nuestro SID hacemos:# net getlocalsidSID for domain DEBIAN-PDC is: S-1-5-21-3991131808-1853181808-1058153799Guardemos el SID, ya que lo necesitaremos cuando configuremos /etc/smb<strong>ldap</strong>-tools/smb<strong>ldap</strong>.confNOTA: Probablemente nos encontremos con algun mensaje de error cuando ejecutamos net getlocalsid, eso se debe aque el paquete smb<strong>ldap</strong>-tools aún no esta configurado. Sin embargo el SID nos será mostrado correctamente6.3- El archivo /etc/smb<strong>ldap</strong>-tools/smb<strong>ldap</strong>.confAntes de modificar el archivo original hagamos una copia de respaldo mismocp /etc/smb<strong>ldap</strong>-tools/smb<strong>ldap</strong>.conf{,.original}Ahora modifiquemos los siquientes parametros, no olvidar reemplazar el SID por el obtenido con net getlocalsid# El sid obtenido mediante net getlocalsidSID="S-1-5-21-669132894-2586221759-3914214969"# Nuestro dominio netBIOS<strong>samba</strong>Domain="ESDEBIAN"# Informacion del servidor LDAP primario y esclavoslaveLDAP="127.0.0.1"slavePort="389"masterLDAP="127.0.0.1"masterPort="389"# No utilizar conexión cifrada<strong>ldap</strong>TLS="0"# Sin importancia ya que no se utiliza TLSverify="require"cafile="/etc/smb<strong>ldap</strong>-tools/ca.pem"clientcert="/etc/smb<strong>ldap</strong>-tools/smb<strong>ldap</strong>-tools.pem"clientkey="/etc/smb<strong>ldap</strong>-tools/smb<strong>ldap</strong>-tools.key"# Sufijo LDAPsuffix="dc=esdebian,dc=org"# Donde se almacenan los usuarios, grupos, computadoras y idmapdnusersdn="ou=people,${suffix}"computersdn="ou=computer,${suffix}"groupsdn="ou=group,${suffix}"idmapdn="ou=idmap,${suffix}"<strong>samba</strong>UnixIdPooldn="<strong>samba</strong>DomainName=${<strong>samba</strong>Domain},${suffix}"# Default scopescope="sub"


# Tipo de cifrado UNIX (CRYPT, MD5, SMD5, SSHA, SHA, CLEARTEXT)hash_encrypt="CRYPT"crypt_salt_format="%s"# Especifico para cuentas UNIX, shell, ruta al home y demásuserLoginShell="/bin/bash"userHome="/home/%U"userHomeDirectoryMode="700"userGecos="<strong>System</strong> User"defaultUserGid="513"defaultComputerGid="515"skeletonDir="/etc/skel"defaultMaxPasswordAge="365"# Configuración especifica para cuentas SAMBAuserSmbHome="\\debian-pdc\%U"userProfile="\\debian-pdc\profiles\%U"userHomeDrive="U:"userScript="logon.bat %U"mailDomain="esdebian.org"# Especifico de smb<strong>ldap</strong>-toolswith_smbpasswd="0"smbpasswd="/usr/bin/smbpasswd"with_slappasswd="0"slappasswd="/usr/sbin/slappasswd"6.4- El archivo /etc/smb<strong>ldap</strong>-tools/smb<strong>ldap</strong>_bind.conf/etc/smb<strong>ldap</strong>-tools/smb<strong>ldap</strong>_bind.conf es el archivo de credenciales, en el se almacenará en claro laclave de administrador del servidor <strong>ldap</strong>. El contenido deberia ser:slaveDN="cn=admin,dc=esdebian,dc=org"slavePw="<strong>ldap</strong>admin"masterDN="cn=admin,dc=esdebian,dc=org"masterPw="<strong>ldap</strong>admin"Se puede definir un servidor LDAP esclavo, el cual solo se utilizará para consultas, y un servidor primario, el cual se utilizará paraescrituras. En nuestro caso, y por el momento, utilizaremos el mismo servidor.Está de mas decir que si se utilizan dos servidores LDAP, estos deben estar sincronizados.6.5- Poblando el directorio LDAP con el Schema Samba - La herramienta smb<strong>ldap</strong>-populateUna vez configuradas las herramientas smb<strong>ldap</strong>-tools, podemos inicializar nuestro dominio esdebian.orgLa herramienta smb<strong>ldap</strong>-populate poblará nuestro directorio LDAP con:Base DN: dc=esdebian,dc=orgUnidad Organizativa people(ou=people) para las cuentas Unix/Samba: se crearán por defecto los usuarios root y nobodylos cuales serán mapeados al usuarios Administrador y Guest Samba respectivamente.


Unidad Organizativa Groups (ou=Groups) para los Grupos Unix/Samba: se crearán por defecto los GruposPredeterminados de un dominio Samba: Domain Admins, Domain Users, Domain Guests, Domain ComputersUnidad Organizativa Computers (ou=Computers) para las cuentas de Computadoras WindowsUnidad Organizativa Idmap (ou=Idmap) para los mapeos de Cuentas Unix a Cuentas Samba/Windows (Relaciones UID SID)Tambien se nos solicitará que asignemos una contraseña al usuario root del dominio, le pondrémos la clave dominioadminCorramos el comando smb<strong>ldap</strong>-populate# smb<strong>ldap</strong>-populatePopulating LDAP directory for domain ESDEBIAN (S-1-5-21-669132894-2586221759-3914214969)(using builtin directory structure)entry dc=esdebian,dc=org already exist.adding new entry: ou=people,dc=esdebian,dc=orgadding new entry: ou=group,dc=esdebian,dc=orgadding new entry: ou=computer,dc=esdebian,dc=orgadding new entry: ou=idmap,dc=esdebian,dc=orgadding new entry: uid=root,ou=people,dc=esdebian,dc=orgadding new entry: uid=nobody,ou=people,dc=esdebian,dc=orgadding new entry: cn=Domain Admins,ou=group,dc=esdebian,dc=orgadding new entry: cn=Domain Users,ou=group,dc=esdebian,dc=orgadding new entry: cn=Domain Guests,ou=group,dc=esdebian,dc=orgadding new entry: cn=Domain Computers,ou=group,dc=esdebian,dc=orgadding new entry: cn=Administrators,ou=group,dc=esdebian,dc=orgadding new entry: cn=Account Operators,ou=group,dc=esdebian,dc=orgadding new entry: cn=Print Operators,ou=group,dc=esdebian,dc=orgadding new entry: cn=Backup Operators,ou=group,dc=esdebian,dc=orgadding new entry: cn=Replicators,ou=group,dc=esdebian,dc=orgentry <strong>samba</strong>DomainName=ESDEBIAN,dc=esdebian,dc=org already exist. Updatingit...Please provide a password for the domain root:Changing UNIX and <strong>samba</strong> passwords for rootNew password: dominioadminRetype new password: dominioadminLa clave solicitada, dominioadmin, es la clave de nuestro usuario Administrador, el administrador del dominio que está mapeadoa la cuenta root. Es la clave que debemos utilizar para, por ejemplo, agregar un equipo al dominio.6.6- Testeando la configuración de Samba y <strong>ldap</strong>Mediante la herramienta pdbedit testearemos que el servidor <strong>ldap</strong> se comporta como nosostros esperamos, listemos los usuarios deldirectorio# pdbedit -Lroot:0:rootnobody:65534:nobodyVeamos la información de nuestro usuario root


# pdbedit -Lv rootUnix username: rootNT username:rootAccount Flags: [U ]User SID:S-1-5-21-669132894-2586221759-3914214969-500Primary Group SID: S-1-5-21-669132894-2586221759-3914214969-513Full Name:rootHome Directory: \\debian-pdc\rootHomeDir Drive: U:Logon Script:'logon.bat root'Profile Path:\\debian-pdc\profiles\rootDomain:ESDEBIANAccount desc:Workstations:Munged dial:Logon time: 0Logoff time:neverKickoff time:neverPassword last set: lun, 18 ene 2010 09:07:47 ARTPassword can change: lun, 18 ene 2010 09:07:47 ARTPassword must change: neverLast bad password : 0Bad password count : 0Logon hours: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFLa cuenta root que se creo en el directorio LDAP, es la que se usará como usuario root local y como administrador de dominio,asignemosle un home y un shell:# smb<strong>ldap</strong>-usermod -d /root -s /bin/bash rootProbemos ahora conectarnos mediante smbclient:# smbclient //localhost/netlogon -U rootEnter root's password: dominioadminDomain=[ESDEBIAN] OS=[Unix] Server=[Samba 3.2.5]smb: \>Podemos testear el funcionamiento de los alias de root que definimos antes en el archivo /etc/<strong>samba</strong>/smbusers,Administrador y Administrator~# smbclient //localhost/netlogon -U administradorEnter administrador's password: dominioadminDomain=[ESDEBIAN] OS=[Unix] Server=[Samba 3.2.5]smb: \> quit~# smbclient //localhost/netlogon -U administratorEnter administrator's password: dominioadminDomain=[ESDEBIAN] OS=[Unix] Server=[Samba 3.2.5]


smb: \> quit~#7- Configuración de PAM/NSSEl servicio NSS (Name Service Switch) provee una interface para configurar y acceder a diferentes bases de datos de cuentas deusuarios, la forma mas básica y conocida es acceder a la información de los usuarios locales mediante los archivos/etc/passwd y /etc/shadow, /etc/group, /etc/hosts, etc. Sin embargo se pueden implementar otrosmecanismos para ello.PAM (Pluggable Authentication Modules) es un mecanismo de autenticación flexible que permite abstraer las aplicaciones y otrosoftware del proceso de identificación. El módulo PAM, según como se haya configurado, accederá a la información y determinarásu identidad, autenticidad, privilegios y limitaciones entre otras cosas.Entonces, la combinación PAM/NSS nos provee una capa de abstracción que nos permite obtener la información de usuarios y suidentidad sin importar que dicha información sea almacenada en un simple archivo de texto plano (/etc/passwd) o un complejodirectorio <strong>ldap</strong>.Nos daremos cuenta luego que, al acceder tanto PAM como NSS a la misma base de datos, la configuración de ambos es la misma.7.1- Configuración de libnss-<strong>ldap</strong>El paquete libnss-<strong>ldap</strong> es el nexo que permitirá el servicio NSS acceder y utilizar la información en el directorio LDAP.Reconfiguremos el paquete mediante:# dpkg-reconfigure libnss-<strong>ldap</strong>Y respondamos a las siguientes preguntas:Identificador de recursos para el servidor LDAP: <strong>ldap</strong>://127.0.0.1/El nombre distintivo (DN) de la base de búsquedas: dc=esdebian,dc=org Versión de LDAP a utilizar: 3¿Hace falta un usuario para acceder a la base de datos LDAP?: No¿Dar privilegios especiales de LDAP para root?: Sí¿Desea hacer que la configuración sólo la pueda leer o escribir el propietario? SíCuenta LDAP para root: cn=admin,dc=esdebian,dc=orgContraseña para la cuenta LDAP de root: <strong>ldap</strong>adminEl demonio nscd (Name Service Cache Daemon) es una caché de nombres para el servicio NSS. Acelera de forma significativa lasconsultas pero puede hacernos pasar malos ratos durante la configuración. Detengamos el servicio por ahora# /etc/init.d/nscd stop7.1.1- El archivo /etc/libnss-<strong>ldap</strong>.conf/etc/libnss-<strong>ldap</strong>.conf es el archivo de configuración de libnss-<strong>ldap</strong>. Allí se podrían almacenar en claro alguna clave,no en nuestro caso pero debe igualmente asegurarse que los permisos son restrictivos. Propietario root, grupo root y permisos 600.Busque y reemplace el contenido de las siguientes lineas:base dc=esdebian,dc=orguri <strong>ldap</strong>://127.0.0.1/<strong>ldap</strong>_version 3rootbinddn cn=admin,dc=esdebian,dc=orgbind_policy softpam_password cryptnss_base_passwd dc=esdebian,dc=org?sub


nss_base_shadow dc=esdebian,dc=org?subnss_base_group ou=group,dc=esdebian,dc=org?one7.1.2- El archivo /etc/libnss-<strong>ldap</strong>.secret/etc/libnss-<strong>ldap</strong>.secret es el archivo de credenciales. Allí se almacena en claro la clave de root del servidor <strong>ldap</strong>,asegúrese de que los permisos son restrictivosPropietario root, grupo root y permisos 600Verifique el contenido del archivo:# cat /etc/libnss-<strong>ldap</strong>.secret<strong>ldap</strong>admin7.2- Configurando el paquete libpam-<strong>ldap</strong>Reconfiguremos el paquete libpam-<strong>ldap</strong># dpkg-reconfigure libpam-<strong>ldap</strong>La configuración es similar a libnss-<strong>ldap</strong>, respondamos a las siguientes preguntas:Identificador de recursos para el servidor LDAP: <strong>ldap</strong>://127.0.0.1/El nombre distintivo (DN) de la base de búsquedas: dc=esdebian,dc=org Versión de LDAP a utilizar: 3Crear un administrador de la base de datos local: Sí¿Hace falta un usuario para acceder a la base de datos LDAP?: NoCuenta LDAP para root: cn=admin,dc=esdebian,dc=orgContraseña para la cuenta LDAP de root: <strong>ldap</strong>adminCifrado local a utilizar cuando se cambian las contraseñas: crypt7.2.1- El archivo /etc/pam_<strong>ldap</strong>.conf/etc/pam_<strong>ldap</strong>.conf es el archivo de configuración de libpam-<strong>ldap</strong>.Busque y reemplace el contenido de las siguientes lineas:base dc=esdebian,dc=orguri <strong>ldap</strong>://127.0.0.1/<strong>ldap</strong>_version 3rootbinddn cn=admin,dc=esdebian,dc=orgbind_policy softpam_password cryptnss_base_passwd dc=esdebian,dc=org?subnss_base_shadow dc=esdebian,dc=org?subnss_base_group ou=group,dc=esdebian,dc=org?one7.2.2- El archivo /etc/pam_<strong>ldap</strong>.secret/etc/pam_<strong>ldap</strong>.secret es el archivo de credenciales. Allí se almacena en claro la clave de root del servidor <strong>ldap</strong>,asegúrese de que los permisos son restrictivosPropietario root, grupo root y permisos 600Verifique el contenido del archivo:# cat /etc/pam_<strong>ldap</strong>.secret<strong>ldap</strong>admin


7.3- El archivo /etc/nsswitch.conf/etc/nsswitch.conf es el archivo de configuración del servicio NSS, él determina cuales son los orígenes que seutilizarán para obtener la información. Teniendo ya configurado libnss-<strong>ldap</strong> solo modifiquemos las siguientes lineas agregando elorigen <strong>ldap</strong>:passwd: files <strong>ldap</strong>group: files <strong>ldap</strong>shadow: files <strong>ldap</strong>Esto le indica al servicio NSS que debe utilizar el origen files (/etc/passwd, /etc/group y /etc/shadow respectivamente) y el origen<strong>ldap</strong> (mediante el modulo libnss-<strong>ldap</strong>)Ya teniendo <strong>samba</strong> configurado como servidor de nombres wins podemos agregar también el soporte para resolucion de nombresde hosts mediante ese serviciohosts: files wins dnsAqui el orden es mas importante, esto indica que deben resolverse nombre de host mediante files (/etc/hosts), luego se utilizará wins(<strong>samba</strong>) y finalmente mediante el DNS resolverCon esta configuración ya debemos estar en condiciones de obtener información de los usuarios desde todos los orígenesconfigurados, no está de mas recordar que debe detener o al menos reiniciar el servicio nscd.Comprobemos que nuestro usuario root pertenece al grupo Domain Admins:# id rootuid=0(root) gid=0(root) grupos=0(root),512(Domain Admins)Comprobemos las dos entradas para nuestro usuario root, la de /etc/passwd y la de <strong>ldap</strong># getent passwd | grep rootroot:x:0:0:root:/root:/bin/bashroot:x:0:0:Netbios Domain Administrator:/home/root:/bin/bashComprobemos los grupos del dominio# getent group | grep -E 'root|Domain'root:x:0:Domain Admins:*:512:rootDomain Users:*:513:Domain Guests:*:514:Domain Computers:*:515:Una cosa interesante que pasa cuando nuestro servidor tiene más servicios que prestar como bases de datos, web, etc; es quecuando se reinicia la PC nos sale un error como el siguiente:nss_<strong>ldap</strong>: failed to bind to LDAP server <strong>ldap</strong>://127.0.0.1/: Can'tcontact LDAP serverEse es uno de los muchos errores que aparecerán, pero no afecta en nada el funcionamiento del PDC, aunque para solucionar estoy todo se vea bien durante el reinicio del servidor se deben agregar los siguietes grupos y usarios en la consola:addgroup --system nvramaddgroup --system rdma


addgroup --system fuseaddgroup --system kvmaddgroup --system scanneradduser --system --group --shell /usr/sbin/nologin --home /var/lib/tpmtss7.4- Configurando PAMAhora configuremos el módulo PAM para poder acceder localmente con usuarios del DominioAntes de modificar nada, seria buena idea respaldar la configuración de pam# cp -a /etc/pam.d /etc/pam.d.ORIGINAL7.4.1- El archivo /etc/pam.d/common-auth# Lo que denominarías el bloque primario, si cualquiera de los dosmódulos tiene# exito se salta la ejecucion del modulo pam_deny.soauth [success=2 default=ignore] pam_unix.so nullok_secureauth [success=1 default=ignore] pam_<strong>ldap</strong>.so use_first_pass# Si no se salta este punto la autenticacion falla siempreauth requisite pam_deny.so# aún cuando la autenticacion tubiera éxito los modulos del bloque# primario podrian no retornar un código positivo, esto soluciona eso# asegurando un valor positivo si no lo era antesauth required pam_permit.so7.4.2- El archivo /etc/pam.d/common-account# Lo que denominarias el bloque primario, si cualquiera de los dosmódulos tiene# exito se salta la ejecucion del modulo pam_deny.soaccount [success=2 new_authtok_reqd=done default=ignore]pam_unix.soaccount [success=1 default=ignore] pam_<strong>ldap</strong>.so# Si no se salta este punto la autenticacion falla siempreaccount requisitepam_deny.so# aún cuando la autenticacion tubiera éxito los modulos del bloque# primario podrian no retornar un código positivo, esto soluciona eso# asegurando un valor positivo si no lo era antesaccount requiredpam_permit.so


7.4.3- El archivo /etc/pam.d/common-password# Es buena idea que se tenga restriciones sobre los passwords# cracklib permite controlar longitudes minimas y fortaleza de la clave# ante ataques de diccionario# Solo no debe ovidarse instalar cracklib, simplemente aptitude installlibpam-cracklibpassword required pam_cracklib.so difok=2 minlen=8dcredit=2 ocredit=2 retry=3# Lo que denominarias el bloque primario, si cualquiera de los dosmódulos tiene# exito se salta la ejecucion del modulo pam_deny.sopassword [success=2 default=ignore] pam_unix.so obscure cryptpassword [success=1 user_unknown=ignore default=die]pam_<strong>ldap</strong>.so use_authtok try_first_pass# Si no se salta este punto la autenticacion falla siemprepassword requisite pam_deny.so# aún cuando la autenticacion tubiera éxito los modulos del bloque# primario podrian no retornar un código positivo, esto soluciona eso# asegurando un valor positivo si no lo era antespassword required pam_permit.so7.4.4- El archivo /etc/pam.d/common-session# Lo que denominarias el bloque primario, si el usuario estácorrectamente autenticado# se salta la ejecucion del modulo pam_deny.so (recordar que este es unapartado de# sesion, por lo tanto lo que se controla no es el acceso sino losprivilegios efectivos# de un usuario ya autenticado)session [default=1]pam_permit.so# Si no se salta este punto la autenticacion falla siempresession requisitepam_deny.so# aún cuando la autenticacion tubiera éxito los modulos del bloque# primario podrian no retornar un código positivo, esto soluciona eso# asegurando un valor positivo si no lo era antessession requiredpam_permit.so# Se chequean los privilegios y restriccionessession requiredpam_unix.sosession optionalpam_<strong>ldap</strong>.so


8- Creación de usuarios y grupos en el directorio LDAP mediante smb<strong>ldap</strong>-toolsLlegado a este punto ya se debería estar en condiciones de ingresar al servidor mediante usuarios del Dominio, los cualesautenticarán mediante PAM, accediendo éste a la información almacenada en nuestro directorio LDAP.Pero para probar si es posible ingresar al sistema local con un usuario del dominio primero debemos crear uno8.1- Crear usuarios del dominioPara esto nos valdremos de las herramientas provistas por smb<strong>ldap</strong>-tools.Mediante la herramienta smb<strong>ldap</strong>-useradd crearemos agregamos al usuario pepe al dominio# smb<strong>ldap</strong>-useradd -a -m -P pepeCannot confirm uidNumber 1000 is free: checking for the next oneChanging UNIX and <strong>samba</strong> passwords for pepeNew password: 123456Retype new password: 123456La opción -a indica que es un usuario WindowsLa opción -m indica que debe crearse el home del usuario e inicializarlo con el contenido de /etc/skel que es elcomportamiento standard para la creación de una cuenta UNIX. Esta opción no siempre es necesario incluirla ya puedepasar que no todos los usuarios del dominio necesiten un HOME en el servidorLa opción -P indica que se solicitará y establecerá un password al usuarioman smb<strong>ldap</strong>-useradd para mas información acerca de las opciones del comandoLa contraseña de pepe es 123456, es una contraseña muy simple que el sistema nos ha dejado crear porque somos root, si pepedesea en el futuro cambiar su contraseña deberá cumplir las especificaciones del archivo /etc/pam.d/common-password impuestaspor el módulo pam_cracklibTambién vemos el mensaje "Cannot confirm uidNumber 1000 is free: checking for the next one". Ese mensaje solo aparecerá éstaprimera vez, de ahora en más el último UID se almacenará en <strong>samba</strong>UnixIdPooldn como lo establece el archivo/etc/smb<strong>ldap</strong>-tools/smb<strong>ldap</strong>.conf y el siguiente UID libre se determinará en base a eso. Cuando se agrege elprimer grupo sucederá lo mismo.Podemos verificar que el usuario se ha creado pero no existe localmente::~# cat /etc/passwd | grep pepe:~# getent passwd | grep pepepepe:x:1003:513:<strong>System</strong> User:/home/pepe:/bin/bash:~#El paquete libpam-dotfile nos provee la herramienta pamtest que nos permite verificar el funcionamiento de losmecanismos de autenticación. Probemos con nuestro usuario pepe:~# pamtest passwd pepeTrying to authenticate for service .Password: 123456Authentication successful.Los mecanismos de autenticación funcionan correctamente, accedamos al sistema con el usuario pepe:debian-pdc login: pepePassword: 123456Linux debian-pdc 2.6.26-2-686 #1 SMP Wed Nov 4 20:45:37 UTC 2009 i686


The programs included with the Debian GNU/Linux system are free software;the exact distribution terms for each program are described in theindividual files in /usr/share/doc/*/copyright.Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extentpermitted by applicable law.I have no name!@debian-pdc:~$Y pudimos acceder al equipo mediante una cuenta <strong>ldap</strong>. Nos llama la atencion ese "I have no name!" en el prompt, si hacemos$ whoamiwhoami: cannot find name for user ID 1001Por algún motivo y aún con el demonio nscd detenido pasa esto, pero si reiniciemos el demonio# /etc/init.d/nscd restartahora si$ whoamipepe8.2- Crear un usuario administrador del dominioA diferencia de los sistemas Linux/Unix, donde el administrador del dominio es root y su UID es 0, en un Dominio Windows para seradministrador del dominio basta con pertenecer al grupo Domain Admins, cuyo GID es 512.Por lo tanto, para crear un usuario administrador del dominio, basta con indicarle a smb<strong>ldap</strong>-adduser que lo incluya en el grupo 512# smb<strong>ldap</strong>-useradd -a -m -G 512 -P adminnuevoChanging UNIX and <strong>samba</strong> passwords for adminnuevoNew password: adminnuevoRetype new password: adminnuevoTambién podemos ingresar al sistema mediante éste usuario, y podremos comprobar que es solo un administrador del dominio perono tiene permisos de root (su prompt no es #)$ id adminnuevouid=1002(adminnuevo) gid=513(Domain Users) grupos=512(DomainAdmins),513(Domain Users)8.3- Crear un Grupo en el dominioSimplemente haciendo::~# smb<strong>ldap</strong>-groupadd -a "Grupo Nuevo"Cannot confirm gidNumber 1000 is free: checking for the next oneCannot confirm gidNumber 1001 is free: checking for the next oneCannot confirm gidNumber 1002 is free: checking for the next one:~#Podemos verificar que el grupo existe, pero no localmente


:~# cat /etc/group | grep "Grupo Nuevo":~# getent group | grep "Grupo Nuevo"Grupo Nuevo:*:1003::~#8.4- Eliminar usuarios y grupos del dominioProbemos eliminar el grupo recién creado::~# smb<strong>ldap</strong>-groupdel "Grupo Nuevo":~#Y el grupo ya no existe:~# getent group | grep "Grupo Nuevo":~#Eliminemos el usuario pepe que creamos anteriormente:~# smb<strong>ldap</strong>-userdel -r pepe:~#La opción -r indica que debe eliminarse el home del usuarioPodemos verificar que el usuario ya no existe:~# getent passwd | grep pepe:~#9- Agregar los usuarios y grupos Linux/Unix locales al directorio LDAPPara la migracion de usuarios y grupos Unix al <strong>ldap</strong> se utilizarán herramientas provistas por el paquete smb<strong>ldap</strong>-toolsDichas herramientas no son provistas como parte del paquete de software sino en la parte de documentación. Las herramientas seencuentran en los archivos:/usr/share/doc/smb<strong>ldap</strong>-tools/examples/migration_scripts/smb<strong>ldap</strong>-migrateunix-accounts.gz/usr/share/doc/smb<strong>ldap</strong>-tools/examples/migration_scripts/smb<strong>ldap</strong>-migrateunix-groups.gzDebemos descomprimir estos archivos y hacerlos ejecutables. Los copiaremos a alguna ubicación que figure en nuestro path comoser /usr/sbin# zcat /usr/share/doc/smb<strong>ldap</strong>-tools/examples/migration_scripts/smb<strong>ldap</strong>migrate-unix-accounts.gz> /usr/sbin/smb<strong>ldap</strong>-migrate-unix-accounts# zcat /usr/share/doc/smb<strong>ldap</strong>-tools/examples/migration_scripts/smb<strong>ldap</strong>migrate-unix-groups.gz> /usr/sbin/smb<strong>ldap</strong>-migrate-unix-groups# chmod 755 /usr/sbin/smb<strong>ldap</strong>-migrate-unix-accounts /usr/sbin/smb<strong>ldap</strong>migrate-unix-groupsMigrando usuarios locales al directorio LDAPEl script smb<strong>ldap</strong>-migrate-unix-accounts está preparado para recibir como parametro el archivo/etc/passwd y /etc/shadow, sin embargo nosotros no deseamos exportar todos los usuarios.Usuarios como backup, bin o daemon no nos son necesarios en nuestro directorio <strong>ldap</strong>, tampoco podemos migrar root y nobody


porque esos usuarios ya existen el el directorio.Solo migraremos los usuarios necesarios, copiemos /etc/passwd y /etc/shadow a una ubicaion temporal:# cp /etc/passwd /etc/shadow /tmp/Quitemos de estos archivos temporales los usuarios que no deseamos migrar y entonces si corramos la herramienta de migración:# smb<strong>ldap</strong>-migrate-unix-accounts -a -P /tmp/passwd -S /tmp/shadowMigrando grupos locales al directorio LDAPNuevamente copiemos /etc/group a una ubicacion temporal:# cp /etc/group /tmp/Editemos el archivo dejando los grupos que deseamos migrar (podria no migrar los grupos root, bin y daemon) y entonces sicorramos la herramienta de migración:# smb<strong>ldap</strong>-migrate-unix-groups -a -G /tmp/groupSeguramente querremos que los usuarios Samba pertenezcan a ciertos grupos Unix, por ejemplo los grupos audio, video, cdrom,plugdev, floppy, etc. para tener esos privilegios cuando accedan desde terminales Linux/Unix. No tenemos mas que agregarlos adichos grupos, por ejemplo al usuario adminnuevo:# smb<strong>ldap</strong>-usermod --group audio,video,floppy,cdrom,plugdev,"DomainAdmins","Domain Users" adminnuevoy podemos ver que adminnuevo ya es miembro de esos grupos:# id adminnuevouid=1002(adminnuevo) gid=513(Domain Users) grupos=513(DomainUsers),512(DomainAdmins),24(cdrom),25(floppy),29(audio),44(video),46(plugdev)NOTA: Recuerde detener el demonio nscd para hacer estas pruebas10- Agregar equipos Windows al DominioHemos terminado las configuraciones, nuestro servidor se comporta ahora como un <strong>controlador</strong> de Dominio NT, ya nos debería serposible unir terminales Windows a nuestro Dominio.10.1- Requisitos del sistema WindowsEl sistema a agregar al dominio será un Windows XP Professional.Antes que nada se debe estar consiente que nuestro PDC no es un Dominio Active Directory, por lo que:No se utiliza el mecanismo de autenticación MIT Kerberos: <strong>samba</strong> puede ser cliente en un dominio Active Directory yutilizar Kerberos para la autenticación, pero no puede utilizar este mecanismo cuando es un PDC.No incorpora un servidor DNS: a diferencia de un dominio NT, donde los nombres se resuelven mediante wins, undominio Active Directory es gobernado por una implementación DNS. Si bien Active Directory soporta wins (no pordefecto, debe instalarse) se basa en DNS para ubicar objetos en la red y esto requiere que los clientes tengan al<strong>controlador</strong> de dominio como servidor DNS primario.El no utilizar Kerberos no es un problema, los clientes se autenticarán mediante NTLM, un protocolo lo suficientemente seguro.


El no ser un servidor DNS resulta para nosotros en una mínima configuración más, al no contar con un servidor DNS el dominioesdebian.org no se resuelve con la IP del servidor.Esto no supone un problema, simplemente debemos utilizar nombres NetBIOS en lugar de nombres DNS, por lo tanto los clientesno podrán agregarse al dominio esdebian.org sino que deberán hacerlo al dominio NetBIOS ESDEBIAN.Deberemos configurar a nuestros clientes para que utilicen nuestro Samba como servidor de nombres WINS.NOTA: hacer que nuestro servidor sea tambien un servidor DNS no es nada complicado, pero esa configuración no se tratará eneste articulo.Configuración de redAsignemos al cliente una dirección IP dentro del segmento de red de nuestro servidor y configuremos para que el servidor wins seanuestro servidor Samba. Debemos habilitar también NetBIOS sobre TCP/IP:10.2- Unir el equipo con Windows XP Professional al dominio SambaAgregaremos el equipo al dominio de manera standard. Se utiliza la cuenta de root, cuyo password era dominioadmin


Y deberíamos recibir el mensaje de bienvenida al Dominio ESDEBIAN


10.3- Eliminar el equipo del dominioUn equipo dentro del dominio es un usuario dentro de la ou=Computers, el nombre de usuario esel nombre del equipo con ladiferencia que su nombre finaliza con un $Podemos verlo con# getent passwd | grep Computerpc-win$:*:1004:515:Computer:/dev/null:/bin/falseMas información con:~# pdbedit -Lv pc-win$Unix username: pc-win$NT username:pc-win$Account Flags: [W ]User SID:S-1-5-21-669132894-2586221759-3914214969-1001Primary Group SID: S-1-5-21-669132894-2586221759-3914214969-515Full Name:PC-WIN$Home Directory: \\debian-pdc\pc-win_HomeDir Drive: U:Logon Script:'logon.bat pc-win_'Profile Path:\\debian-pdc\profiles\pc-win_Domain:ESDEBIANAccount desc:ComputerWorkstations:


Munged dial:Logon time: 0Logoff time:neverKickoff time:neverPassword last set: mar, 19 ene 2010 07:30:23 ARTPassword can change: mar, 19 ene 2010 07:30:23 ARTPassword must change: neverLast bad password : 0Bad password count : 0Logon hours: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFPor lo tanto eliminar un equipo del dominio es lo mismo que eliminar un usuario, se lo hace mediante la herramienta smb<strong>ldap</strong>userdel:~# smb<strong>ldap</strong>-userdel pc-win$10.4- Notas para equipos con Windows 7Para unir equipos con windows 7 al dominio hay que hacer unos cambios en el registro de los clientes, así como actualizar <strong>samba</strong> ala versión 3.4 de Debian-backports. Para ello añadimos la siguiente linea al archivo sources.list:deb http://backports.debian.org/debian-backports lenny-backports mainHacemos un update e instalamos <strong>samba</strong>:aptitude -t lenny-backports install <strong>samba</strong>Nos instalará los paquetes actualizados y nos desinstalará smbfs (no problem).A continuación debemos crear dos claves de registro en las máquinas con Windows 7 que se unirán al dominio:HKLM\<strong>System</strong>\CCS\Services\LanmanWorkstation\ParametersDWORD DomainCompatibilityMode = 1DWORD DNSNameResolutionRequired = 0Ahora ya podemos unir las máquinas al dominio y abrir sesión en el mismo.11- Configurando PAM/NSS de clientes Linux/Unix para que utilicen la Autenticación centralizada.Una vez que hicimos login en nuestro equipo cliente Linux/Unix estamos listos para configurar PAM/NSS para hacer que dichoequipo utilice nuestro servidor PDC para la autenticación y manejo de permisos.Para el ejemplo utilizaremos Debian/GNU Linux 5.0 como Sistema Operativo para el equipo cliente pero cualquier clienteLinux/Unix debe porder ser configurado. La única diferencia destacable en la configuracion es que en sistemas no Debian el archivo/etc/libnss-<strong>ldap</strong>.conf suele llamarse simplemente /etc/<strong>ldap</strong>.confInstalemos en el cliente el software necesario:


# aptitude install libnss-<strong>ldap</strong> libpam-<strong>ldap</strong> libpam-crackliby respondamos a las siguientes preguntas:Configuración de libnss-<strong>ldap</strong>:Identificador de recursos para el servidor LDAP: <strong>ldap</strong>://192.168.1.200/El nombre distintivo (DN) de la base de búsquedas: dc=esdebian,dc=org Versión de LDAP a utilizar: 3Cuenta LDAP para root: cn=admin,dc=esdebian,dc=orgContraseña para la cuenta LDAP de root: dejar vacíoConfiguración de libpam-<strong>ldap</strong>:Crear un administrador de la base de datos local: No¿Hace falta un usuario para acceder a la base de datos LDAP? : NoNo olvidemos la seguridadEs importante destacar que cuando se nos preguntó "Contraseña para la cuenta LDAP de root:" durante la configuración de libnss<strong>ldap</strong>no se respondió nada.La contraseña de root para la cuenta <strong>ldap</strong> es la que definimos en el servidor, en nuestro caso era <strong>ldap</strong>admin, y la utiliza entre otrascosas <strong>samba</strong> para modificar la base de datos agregando usuarios y demás. Sin embargo nuestro servidor <strong>ldap</strong> es accesible desdetoda la red y una red con cientos de clientes Linux/Unix que tengan almacenada la contraseña de root para acceder al servidor <strong>ldap</strong>no parece muy inteligente.Cualquier equipo que se vea comprometido tendrá la posibilidad de acceder y modificar sin restricciones nuestra base de datos.El parámetro "Cuenta LDAP para root:" también lo hemos establecido pero no tiene sentido alguno, cuando revisemos los archivosde configuración comentaremos la linea.Los archivos de configuración de PAM y NSSPAM y NSS utilizarán la misma base de datos <strong>ldap</strong>, por la tanto su configuración es igual.Editamos los archivos /etc/libnss-<strong>ldap</strong>.conf y /etc/pam_<strong>ldap</strong>.conf, y reemplazamos con lo siguiente (laconfiguración es muy similar a la del servidor):# DN basebase dc=esdebian,dc=org# URI del servidor <strong>ldap</strong>, en nuestro caso es 192.168.1.200uri <strong>ldap</strong>://192.168.1.200/# Version de <strong>ldap</strong> a utilizar<strong>ldap</strong>_version 3# Cuenta de root <strong>ldap</strong># Esta linea no es necesaria, la comentamos o borramos# rootbinddn cn=admin,dc=esdebian,dc=orgbind_policy softpam_password cryptnss_base_passwd dc=esdebian,dc=org?subnss_base_shadow dc=esdebian,dc=org?subnss_base_group ou=group,dc=esdebian,dc=org?oneModificamos /etc/nsswitch.conf agregando <strong>ldap</strong> para las búsquedas y wins para resolver nombres:


passwd:group:shadow:hosts:files <strong>ldap</strong>files <strong>ldap</strong>files <strong>ldap</strong>files wins dnsHacemos un backup de la configuración de PAM# cp -a /etc/pam.d{,.ORIGINAL}Y modificamos los archivos de configuración de PAM:/etc/pam.d/common-authauth [success=2 default=ignore] pam_unix.so nullok_secureauth [success=1 default=ignore] pam_<strong>ldap</strong>.so use_first_passauth requisite pam_deny.soauth required pam_permit.so/etc/pam.d/common-accountaccount [success=2 new_authtok_reqd=done default=ignore]pam_unix.soaccount [success=1 default=ignore] pam_<strong>ldap</strong>.soaccount requisitepam_deny.soaccount requiredpam_permit.so/etc/pam.d/common-passwordpassword required pam_cracklib.so difok=2 minlen=8dcredit=2 ocredit=2 retry=3password [success=2 default=ignore] pam_unix.so obscure cryptpassword [success=1 user_unknown=ignore default=die]pam_<strong>ldap</strong>.so use_authtok try_first_passpassword requisite pam_deny.sopassword required pam_permit.so/etc/pam.d/common-sessionLa configuración de este archivo difiere de la del servidor PDC.En el servidor podemos crear las cuentas de usuario mediante smb<strong>ldap</strong>-useradd agregando la opción -m de modo que el home decada usuario se crea junto con el usuario.En los clientes el home de cada usuario no existe, por lo que se utiliza el módulo pam_mkhomedir.so para crear el homedel usuario en caso que no exista. Eso es lo que motiva agregar la primer linea del archivosession requiredsession [default=1]session requisitesession requiredsession requiredsession optionalpam_mkhomedir.sopam_permit.sopam_deny.sopam_permit.sopam_unix.sopam_<strong>ldap</strong>.soProbando la configuraciónPrimero que nada, detengamos el demonio nscd


# /etc/init.d/nscd stopAhora ya podemos hacer login en los clientes Linux/Unix con algún usuario del dominio Samba, utilizemos la cuenta deadminnuevo que creamos anteriormente:debian-cli login: adminnuevoPassword:Linux debian-cli 2.6.26-2-686 #1 SMP Wed Nov 4 20:45:37 UTC 2009 i686The programs included with the Debian GNU/Linux system are free software;the exact distribution terms for each program are described in theindividual files in /usr/share/doc/*/copyright.Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extentpermitted by applicable law.Creating directory '/home/adminnuevo'adminnuevo@debian-cli:~$Y hemos logrado hacer login con un usuario del dominioVemos también como el módulo pam_mkhomedir.so definido en /etc/pam.d/common-session ha creado elhome del usuario en el equipo local. Esto solo sucede para el primer login12- Referenciashttp://linuxcursosgratis.org/Documentos/usando-<strong>samba</strong>/node1.htmlhttp://edin.no-ip.com/content/<strong>ldap</strong>-<strong>samba</strong>-pdc-pamnss-debian-lenny-howtohttp://tuxjm.net/docs/Configurar_Servidor_Controlador_de_Dominio_con_Sam...http://wiki.debian.org/LDAP/NSShttp://wiki.<strong>samba</strong>.org/index.php/Implementing_<strong>System</strong>_Policies_with_Sambahttp://www.pcc-services.com/custom_poledit.html

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!