Controlador Primario de Dominio (PDC) en Debian Lenny 5.0 mediante Samba, PAM/NSS y OpenLDAP
1- Introducción
2- Características del servicio
3- Software a utilizar
4- Configuración de SLAPD
4.2- El archivo /etc/ldap/slapd.conf
4.3- Pruebas Preliminares de servidor ldap
4.4- La herramienta phpldapadmin
5.2- Crear los directorios netlogon y profiles
5.2.1- Crear scripts de inicio de sesión
5.2.2- Implementar Políticas de Sistema
5.3- Comprobando la configuración e iniciando el servicio
5.4- La herramienta SWAT (Samba Web Administration Tool)
6- Configuración de smbldap-tools
6.2- Obteniendo el SID
6.3- El archivo /etc/smbldap-tools/smbldap.conf
6.4- El archivo /etc/smbldap-tools/smbldap_bind.conf
6.5- Poblando el directorio LDAP con el Schema Samba - La herramienta smbldap-populate
6.6- Testeando la configuración de Samba y ldap
7.1.1- El archivo /etc/libnss-ldap.conf
7.1.2- El archivo /etc/libnss-ldap.secret
7.2- Configurando el paquete libpam-ldap
7.2.1- El archivo /etc/pam_ldap.conf
7.2.2- El archivo /etc/pam_ldap.secret
7.3- El archivo /etc/nsswitch.conf
7.4- Configurando PAM
7.4.1- El archivo /etc/pam.d/common-auth
7.4.2- El archivo /etc/pam.d/common-account
7.4.3- El archivo /etc/pam.d/common-password
7.4.4- El archivo /etc/pam.d/common-session
8- Creación de usuarios y grupos en el directorio LDAP mediante smbldap-tools
8.2- Crear un usuario administrador del dominio
8.3- Crear un Grupo en el dominio
8.4- Eliminar usuarios y grupos del dominio
9- Agregar los usuarios Linux/Unix locales al directorio LDAP
10- Agregar equipos Windows al Dominio
10.2- Unir el equipo con Windows XP Professional al dominio Samba
10.3- Eliminar el equipo del dominio
11- Configurando PAM/NSS de clientes Linux/Unix para que utilicen la Autenticación centralizada.
12- Referencias
1- Introducción
Se explica en este articulo la implementación de una base de datos de usuarios centralizada mediante OpenLDAP, la implementación de un Controlador Primario de Dominio (PDC) mediante Samba, el cual utilizará la información del directorio LDAP para autenticar y asignar privilegios y restricciones, y la autenticación de usuarios desde terminales Linux/Unix mediante PAM/NSS
Si tiene la intención de realizar una implementación de pruebas previa a la implementación final se recomienda:
- Realizar las pruebas sobre un equipo de finalidad exclusiva o bien una máquina virtual destinada 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 los utilizados en la mayoría de los archivos de configuración como parámetros de ejemplo y utilizarlos para la implementación se presta a confusiones. En este articulo se utilizará el dominio de ejemplo esdebian.org y el equipo controlador de dominio tendrá por nombre debian-pdc
- Sea paciente: los archivos a modificar son muchos, sus nombres se parecen y los parámetros a modificar en cada caso son similares, es normal que la configuración no funcione a la primera y se deba hacer una revisión completa de los parámetros.
2- Características del servicio
El mantener la base de datos centralizada permite:
- Mantener centralizada la información de usuarios, sus claves de acceso y sus privilegios y limitaciones.
- Mantener un control de acceso a todos los recursos de la red utilizando la información centralizada.
- Cualquier usuario puede acceder al sistema y a sus recursos desde cualquier terminal, sus privilegios y limitaciones le serán efectivos con solo ingresar su nombre de usuario y clave de acceso.
- Se pueden aplicar restricciones que serán impuestas a los usuarios sin importar la terminal de desde la cual acceden.
- Se puede compartir la información de autenticación con otros servicios como autorización de acceso a internet, cuentas de correo electrónico, servicio interno de mensajera instantánea, etc.
- Replicación LDAP
3- Software a utilizar
La 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 samba, smbclient, smbfs y samba-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 ldap-utils en su versión 2.4.11-1+lenny1
- Libpam-ldap: paquete libpam-ldap en su versión 184-4.2
- Libnss-ldap: paquete libnss-ldap en su versión 261-2.1
- Smbldap-tools: paquete smbldap-tools en su versión 0.9.4-1
Se instalará todo el software de una vez, los paquetes de configuración de los diferentes servicios nos solicitarán cierta información, por ahora responderemos con cualquier dato ya que mas adelante reconfiguraremos los paquetes y la información será solicitada de nuevo. Puede, si quiere, responder con datos reales si cree conocer cuales son pero en este punto no es importante.
Instalemos los paquetes necesarios:
aptitude install slapd ldap-utils libpam-ldap libpam-cracklib libnss-ldap samba samba-doc smbclient smbfs smbldap-tools libpam-dotfile
4- Configuración de SLAPD
Lo primero será reconfigurar el paquete slapd
# dpkg-reconfigure slapd
Responderemos a las siguientes preguntas:
- ¿Omitir la configuración del servidor OpenLDAP?: No
- DNS Domain Name: esdebian.org
- Organization Name: esdebian.org
- Contraseña de Administrador: ldapadmin
- Verificar Contraseña: ldapadmin
- Database 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?: Si
- Allow LDAPv2 protocol?: No
Para que ldap sea el soporte para samba debemos incorporarle la estructura de grupos y usuarios que samba necesita, esa estructura debe contar con ciertos atributos y esos atributos se definen en un schema, pero antes de incorporar esos atributos deberemos hacer una copia de nuestra base de datos.
La herramienta slapcat nos permite volcar el contenido de una base de datos ldap a un archivo de texto ldif (LDAP Directory Interchange Format). Hacemos un backup de la base de datos ahora:
# slapcat > ~/slapd.ldif
4.1- Agregar el Schema Samba al Directorio
Un schema (esquema) define el tipo de objetos que podemos manejar en nuestro arbol de directorio, sus atributos y sus reglas de sintaxis.
Slapd incluye por defecto los esquemas necesarios para almacenar informacion de cuentas Unix/Posix pero no incorpora soporte para el esquema de samba, afortunadamente el paquete samba-doc nos proveerá de uno. Simplemente haremos:
# zcat /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz > /etc/ldap/schema/samba.schema
4.2- El archivo /etc/ldap/slapd.conf
Es el archivo principal de configuración del servidor slapd. Hagamos una copia de respaldo del mismo antes de modificar el original:
# cp /etc/ldap/slapd.conf{,.original}
Para generar el password utilizaremos la herramienta slappasswd, la clave que utilizaremos es la misma que la que se ingresó cuando se configuró slapd: ldapadmin.
No es requerimiento que sea la misma clave, pero utilizaremos la misma para evitar confusiones
:~# slappasswd -h {md5}
New password: ldapadmin
Re-enter new password: ldapadmin
{MD5}TmZgZ01/Z0/29bOPByMr4A==
####################################################################### # Features to permit # Schema and objectClass definitions # Where the pid file is put. The init.d script # List of arguments that were passed to the server # Read slapd.conf(5) for possible values # Where the dynamically loaded modules are stored # The maximum number of entries that is returned for a search operation # The tool-threads parameter sets the actual amount of cpu's that is used ####################################################################### ####################################################################### ####################################################################### # The base of your directory in database #1 # rootdn directive for specifying a superuser on the database. This is needed # Where the database file are physically stored for database #1 # The dbconfig settings are used to generate a DB_CONFIG file the first # For the Debian package we use 2MB as default but be sure to update this # Sven Hartge reported that he had to set this value incredibly high # Number of objects that can be locked at the same time. # Indices to maintain for this database # Save the time that the entry gets modified, for database #1 # Checkpoint the BerkeleyDB database periodically in case of system # Where to store the replica logs for database #1 # users can authenticate and change their password # those 2 parameters must be world readable for password aging to work correctly # all others attributes are readable to everybody # For Netscape Roaming support, each user gets a roaming ####################################################################### # The base of your directory for database #2
La salida de slappasswd se utilizará como valor del parámetro rootpw en el archivo /etc/ldap/slapd.conf. Este parametro se establece para hacer posible la replicacion mediante syncrepl
Ahora reemplacemos el contenido del archivo /etc/ldap/slapd.conf con lo siguiete (no olvide de reemplazar el valor del parámetro rootpw con su hash):
# This is the main slapd configuration file. See slapd.conf(5) for more
# info on the configuration options.
# Global Directives:
#allow bind_v2
include /etc/ldap/schema/core.schema
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/samba.schema
# will not stop the server if you change this.
pidfile /var/run/slapd/slapd.pid
argsfile /var/run/slapd/slapd.args
loglevel none
modulepath /usr/lib/ldap
moduleload back_hdb
sizelimit 500
# for indexing.
tool-threads 1
# Specific Backend Directives for hdb:
# Backend specific directives apply to this backend until another
# 'backend' directive occurs
backend hdb
# Specific Backend Directives for 'other':
# Backend specific directives apply to this backend until another
# 'backend' directive occurs
#backend <other>
# Specific Directives for database #1, of type hdb:
# Database specific directives apply to this databasse until another
# 'database' directive occurs
database hdb
suffix "dc=esdebian,dc=org"
# for syncrepl.
rootdn "cn=admin,dc=esdebian,dc=org"
rootpw {MD5}TmZgZ01/Z0/29bOPByMr4A==
directory "/var/lib/ldap"
# 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.
# value if you have plenty of RAM
dbconfig set_cachesize 0 2097152 0
# to get slapd running at all. See http://bugs.debian.org/303057 for more
# information.
dbconfig set_lk_max_objects 1500
# Number of locks (both requested and granted)
dbconfig set_lk_max_locks 1500
# Number of lockers
dbconfig set_lk_max_lockers 1500
index objectClass eq,pres
index ou,cn,sn,mail,givenname eq,pres,sub
index uidNumber,gidNumber,memberUid eq,pres
index loginShell eq,pres
## required to support pdb_getsampwnam
index uid pres,sub,eq
## required to support pdb_getsambapwrid()
index displayName pres,sub,eq
index nisMapName,nisMapEntry eq,pres,sub
index sambaSID eq
index sambaPrimaryGroupSID eq
index sambaDomainName eq
index default sub
index uniqueMember eq
index sambaGroupType eq
index sambaSIDList eq
lastmod on
# failure and to speed slapd shutdown.
checkpoint 512 30
# replogfile /var/lib/ldap/replog
access to attrs=userPassword,sambaNTPassword,sambaLMPassword,sambaPwdMustChange,sambaPwdLastSet
by self write
by anonymous auth
by * none
# (or use a priviledge account in /etc/ldap.conf to bind to the directory)
access to attrs=shadowLastChange,shadowMax
by self write
by * read
access to *
by * read
# 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 <other>
#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 de diff, si no conoce como funciona esta herramienta le bastará con saber que una linea que comienza con un + significa que ha sido agregada en el archivo nuevo y una que comienza con un - significa que la linea ha sido quitada, una linea sin nada significa que la linea permanece en ambos archivos.
Por partes:
include /etc/ldap/schema/cosine.schema
include /etc/ldap/schema/nis.schema
include /etc/ldap/schema/inetorgperson.schema
+include /etc/ldap/schema/samba.schema
Se ha agregado el esquema samba.schema para que sea incluido
-suffix "dc=example,dc=com"
+suffix "dc=esdebian,dc=org"
Se ha modificado el sufijo de la base de datos a esdebian.org
+rootdn "cn=admin,dc=esdebian,dc=org"
+rootpw {MD5}SCBBhdOlfHozkVbuKGZt5w==
Se han agregado las lineas que establecen el nombre (admin) y el password del administrador de la base de datos.
-index objectClass eq
+index objectClass eq,pres
+index ou,cn,sn,mail,givenname eq,pres,sub
+index uidNumber,gidNumber,memberUid eq,pres
+index loginShell eq,pres
+index uid pres,sub,eq
+index displayName pres,sub,eq
+index nisMapName,nisMapEntry eq,pres,sub
+index sambaSID eq
+index sambaPrimaryGroupSID eq
+index sambaDomainName eq
+index default sub
+index uniqueMember eq
+index sambaGroupType eq
+index sambaSIDList eq
Se ha agregado una gran cantidad de definiciones de índices. Al ser una base de datos, el incorporar índices acelerará las bú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,sambaNTPassword,sambaLMPassword,sambaPwdMustChange,sambaPwdLastSet
by self write
+ by anonymous auth
by * none
-access to dn.base="" by * read
+access to attrs=shadowLastChange,shadowMax
+ by self write
+ by * read
access to *
- by dn="cn=admin,dc=example,dc=com" write
by * read
Se 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 -u
config file testing succeeded
Y ya podemos reiniciar el servido slapd
# /etc/init.d/slapd restart4.3- Pruebas Preliminares de servidor ldap
Hagamos una consulta al servidor LDAP para ver si responde correctamente. Con el comando ldapsearch consultaremos el namingContexts
# extended LDIF # # search result # numResponses: 2
:~ # ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts
#
# LDAPv3
# base <> with scope baseObject
# filter: (objectclass=*)
# requesting: namingContexts
#
dn:
namingContexts: dc=esdebian,dc=org
search: 2
result: 0 Success
# numEntries: 1
Ahora haremos una busqueda en el directorio LDAP autenticado como el usuario admin del LDAP y haremos la buqueda usando como base dc=esdebian,dc=org, esto es para comprobar que la autenticación y nuestras ACLs funcionen correctamente, además de comprobar que el directorio se haya incializado con la estrucutra básica..
# esdebian.org # admin, esdebian.org # search result # numResponses: 3
:~# ldapsearch -x -D "cn=admin,dc=esdebian,dc=org" -b "dc=esdebian,dc=org" -W
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <dc=esdebian,dc=org> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
dn: dc=esdebian,dc=org
objectClass: top
objectClass: dcObject
objectClass: organization
o: esdebian.org
dc: esdebian
dn: cn=admin,dc=esdebian,dc=org
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e2NyeXB0fWRuZ2QvVWtZMEdzbGc=
search: 2
result: 0 Success
# numEntries: 2
4.4- La herramienta phpldapadmin
Esta es una herramienta alternativa que puede utilizar para gestionar el directorio LDAP. Resulta muy útil pero no es necesaria para realizar la configuración que se plantea en este artículo.
Si desea utilizar esta herramienta basta con instalarla:
# aptitude install phpldapadmin
Lo 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/phpldapadmin
Ingrese el nombre de usuario, en este caso cn=admin,dc=esdebian,dc=org, y la clave del mismo, en nuestro caso ldapadmin
Nota: si cuando definio rootpw en /etc/ldap/slapd.conf utilizo otro password en lugar de ldapadmin podra ingresar como cn=admin,dc=esdebian,dc=org utilizando cualquiera de los dos passwords
5- Configuración de Samba
5.1- El archivo /etc/samba/smb.conf
Abrir el archivo y modificar/Agregar los siguientes parametros: [global] # Nombre de dominio y nombre netBIOS # Cadena con la cual se identifica al servidor # Comportamiento frente a usuarios inexistentes # Archivo de mapeo de nombres de usuarios, este archivo no existe, por lo que debe crearse # Informacion para la utilizacion del directorio LDAP como base de datos de usuarios # Informacion relacionada con la red (adaptar a sus necesidades) # Cambio de contraseñas y otras opciones de PDC # Script de inicio de sesion # Esto hace que los usuarios posean perfiles movibles. Un perfil móvil implica # Sincronizar password UNIX con passwords del dominio # Loggiging # Recursos compartidos [printers] [print$] [netlogon] [profiles] [public]
# Archivo principal de configuración de Samba
# Juego de caractreres para archivos dos y unix
dos charset = 850
Unix charset = ISO8859-1
workgroup = ESDEBIAN
realm = esdebian.org
server string = %h server
map to guest = Bad User
# El contenido es de la forma usuario = alias
# Es util para mapear por ejemplo la cuenta de root con Administrator, la cuenta de
# administrador en sistemas windows
username map = /etc/samba/smbusers
passdb backend = ldapsam:ldap://127.0.0.1/
ldap admin dn = cn=admin,dc=esdebian,dc=org
ldap delete dn = Yes
ldap group suffix = ou=group
ldap idmap suffix = ou=idmap
ldap machine suffix = ou=computer
ldap suffix = dc=esdebian,dc=org
ldap ssl = no
ldap user suffix = ou=people
add user script = /usr/sbin/smbldap-useradd -m %u
delete user script = /usr/sbin/smbldap-userdel %u
add group script = /usr/sbin/smbldap-groupadd -p %g
delete group script = /usr/sbin/smbldap-groupdel %g
add user to group script = /usr/sbin/smbldap-groupmod -m %u %g
delete user from group script = /usr/sbin/smbldap-groupmod -x %u %g
set primary group script = /usr/sbin/smbldap-usermod -g %g %u
add machine script = /usr/sbin/smbldap-useradd -w %u
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
interfaces = eth0 lo
hosts allow = 127.0.0.1, 192.168.1.0/24
hosts deny = 0.0.0.0
smb ports = 139 445
bind interfaces only = Yes
name resolve order = wins hosts lmhosts bcast
remote announce = 192.168.1.255
pam password change = Yes
passwd program = /usr/sbin/smbldap-passwd -u %u
passwd chat = *New*password* %n\n *Retype*new*password* %n\n *all*authentication*tokens*updated*
logon script = 'logon.bat %U'
# que gran volumen de información se transmite a través de la red cada vez que
# un usuario inicia sesión. Para desactivar los perfiles móviles se debe dejar
# el parámetro con un valor vacío, como sigue: logon path = ""
# En este ejemplo se permiten perfiles móviles
logon path = \\%N\profiles\%U
logon drive = U:
domain logons = Yes
os level = 65
preferred master = Yes
domain master = Yes
dns proxy = No
wins support = Yes
panic action = /usr/share/samba/panic-action %d
map acl inherit = Yes
case sensitive = No
hide unreadable = Yes
unix password sync = Yes
syslog = 0
log file = /var/log/samba/log.%m
max log size = 1000
#
# Sincroonizar la hora con el servidor PDC
time server = Yes
#
# Mapear atributos de archivo de Unix a Windows
# Estas opciones requieren que los parametros create mask y directory mask
# tenga activo el bit de ejecucion para "grupo" y "otros"
map hidden = Yes
map system = Yes
[homes]
comment = Home Directories
valid users = %S
read only = No
create mask = 0611
directory mask = 0711
browseable = No
comment = All Printers
path = /var/spool/samba
create mask = 0611
directory mask = 0711
printable = Yes
browseable = No
comment = Printer Drivers
path = /var/lib/samba/printers
create mask = 0611
directory mask = 0711
path = /var/lib/samba/netlogon
browseable = No
create mask = 0611
directory mask = 0711
path = /var/lib/samba/profiles
force user = %U
read only = No
create mask = 0611
directory mask = 0711
guest ok = Yes
profile acls = Yes
browseable = No
csc policy = disable
path = /tmp
read only = No
guest ok = Yes
create mask = 0611
directory mask = 0711
Se han incluido una seride de explicaicones dentro del archivo a modo de comentario. Seria mas que conveniente que no se limite a copiar el archivo, sino que lea los comentarios.
El archivo /etc/samba/smbusers
Preste atencion al parametro username map = /etc/samba/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 por ejemplo la cuenta de root con Administrator, la cuenta de administrador en sistemas windows
El contenido de /etc/samba/smbusers podria ser
# Archivo de mapeo de usuarios
# Formato: Unix_ID = Windows_ID
#
# Ejemplo:
# root = Administrator
# pepe = "Pepe Parada"
#
root = Administrator
root = Administrador
5.2- Crear los directorios netlogon y profiles
Creamos los directorios especiales netlogon y profile y le asignamos los permisos adecuados
# mkdir -p /var/lib/samba/netlogon /var/lib/samba/profiles
# chown -Rf root:root /var/lib/samba/netlogon /var/lib/samba/profiles
# chmod 1777 /var/lib/samba/profiles5.2.1- Crear scripts de inicio de sesión
Un script de inicio de sesión Windows es un archivo bat con comandos que se ejecutarán del lado del cliente cuando un usuario inicie sesión. El script a utilizarse está definido por el parámetro logon script en la sección [global] de /etc/samba/smb.conf
Nosotros definimos el paramatro de la siguiente manera
logon 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 parametro al 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 servidor
- Conectar unidades de red
- Vaciar directorios temporales
Un ejemplo de script de inicio de sesión podría ser: IF %1 == Administrador net use p: \\debian-pdc\root
@echo off
net time \\debian-pdc /set /yes
IF %1 == guest net use p: \\debian-pdc\publico
5.2.2- Implementar Politicas de Sistema
A grandes rasgos, Políticas de Sistema es un mecanismo que se emplea en sistemas Microsoft Windows para esablecer ciertas condiciones 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 un dominio, é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 una polí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ón de 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á en el directorio compartido netlogon, de modo que los clientes acceden a este archivo a través de la ruta \\debian-pdc\netlogon\NTConfig.POL
Entonces implementar las políticas es muy simple, la complejidad radica en crear el archivo NTConfig.POL y ajustarlo a nuestras 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 herramientas
- Corremos "poledit.exe"
Ya obtenido el software se puede crear un arhivo de Politicas de manera Standard, se asume que para implementar "Politias de Sistema" usted sabe que son y como se configuran.
Una vez ajustadas las politicas a nuestras necesidades simplemente debemos guardar el archivo como NTConfig.POL y copiarlo al servidor en el directorio compartido netlogon, en nuestro caso /var/lib/samba/netlogon
En http://www.pcc-services.com/custom_poledit.html se explica como configurar políticas de modo mas detallado y además se ofrecen 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 y su 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 servicio
Para comprobar la configuración de samba basta con ejecutar:
# testparmSi todo es correcto ya podemas reiniciar el servicio:
# /etc/init.d/samba restartY ahora le indicamos a samba la clave de nuestro usuario admin especificado en smb.conf para que pueda así acceder y modificar nuestro directorio ldap, en nuestro caso la clave que utilizamos es ldapadmin
# smbpasswd -W
Setting stored password for "cn=admin,dc=esdebian,dc=org" in secrets.tdb
New SMB password: ldapadmin
Retype new SMB password: ldapadminLa clave se almacenará en /var/lib/samba/secrets.tdb, asegurémonos que los permisos de dicho archivo sean los adecuados
# ls -l /var/lib/samba/secrets.tdb
-rw------- 1 root root 8192 2008-06-18 23:29 /var/lib/samba/secrets.tdb5.4- La herramienta SWAT (Samba Web Administration Tool)
Esta herramienta resulta muy útil para configurar un servidor samba, cuenta con una interfaz a la cual se accede a través de un navegador web y permite modificar todos los parametros de smb.conf a la vez que cuenta con toda la información de las paginas man para cada parámetro de configuración.
Al igual que cuando se describió la herramienta phpldapadmin, esta herramienta tampoco es necesaria para la configuración que se propone 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 direcciones
http://ip_del_servidor:9016- Configuración de smbldap-tools
El archivo de configuración de smbldap-tools es /etc/smbldap-tools/smbldap.conf, en dicho archivo se definen los parámetros básicos como servidor ldap, servidor samba, tipo de comunicación (cifrada o en claro), dominio, SID, etc.
Además necesita contar con el archivo smbldap_bind.conf, en dicho archivo se almacenará en claro la información necesaria para la conexión con el servidor ldap
6.1- Obteniendo los archivos de configuración
Si ingresamos al directorio /etc/smbldap-tools/ nos encontraremos con que está vacío, Afortunadamente podemos obtener los archivos de configuración desde los archivos de ejemplo de smbldap-tools
# zcat /usr/share/doc/smbldap-tools/examples/smbldap.conf.gz > /etc/smbldap-tools/smbldap.conf
# cp /usr/share/doc/smbldap-tools/examples/smbldap_bind.conf /etc/smbldap-tools/smbldap_bind.confLos permisos de /etc/smbldap-tools/smbldap.conf y /etc/smbldap-tools/smbldap_bind.conf deberian ser 640, propiedad de root y grupo openldap.
# chmod 640 /etc/smbldap-tools/smbldap.conf /etc/smbldap-tools/smbldap_bind.conf
# chown root:openldap /etc/smbldap-tools/smbldap.conf /etc/smbldap-tools/smbldap_bind.conf6.2- Obteniendo el SID
El SID (security identifiers) es un identificador único asignado desde su creación a cada objeto dentro de un dominio. Todo objeto en el dominio tiene un SID y, claro, el controlador de dominio también tiene uno.
Para obtener nuestro SID hacemos:
# net getlocalsid
SID for domain DEBIAN-PDC is: S-1-5-21-3991131808-1853181808-1058153799Guardemos el SID, ya que lo necesitaremos cuando configuremos /etc/smbldap-tools/smbldap.conf
NOTA: Probablemente nos encontremos con algun mensaje de error cuando ejecutamos net getlocalsid, eso se debe a que el paquete smbldap-tools aún no esta configurado. Sin embargo el SID nos será mostrado correctamente
6.3- El archivo /etc/smbldap-tools/smbldap.conf
Antes de modificar el archivo original hagamos una copia de respaldo mismo
cp /etc/smbldap-tools/smbldap.conf{,.original}Ahora modifiquemos los siquientes parametros, no olvidar reemplazar el SID por el obtenido con net getlocalsid # Nuestro dominio netBIOS # Informacion del servidor LDAP primario y esclavo # No utilizar conexión cifrada # Sin importancia ya que no se utiliza TLS # Sufijo LDAP # Donde se almacenan los usuarios, grupos, computadoras y idmapdn # Default scope # Tipo de cifrado UNIX (CRYPT, MD5, SMD5, SSHA, SHA, CLEARTEXT) # Especifico para cuentas UNIX, shell, ruta al home y demás # Configuración especifica para cuentas SAMBA # Especifico de smbldap-tools
# El sid obtenido mediante net getlocalsid
SID="S-1-5-21-669132894-2586221759-3914214969"
sambaDomain="ESDEBIAN"
slaveLDAP="127.0.0.1"
slavePort="389"
masterLDAP="127.0.0.1"
masterPort="389"
ldapTLS="0"
verify="require"
cafile="/etc/smbldap-tools/ca.pem"
clientcert="/etc/smbldap-tools/smbldap-tools.pem"
clientkey="/etc/smbldap-tools/smbldap-tools.key"
suffix="dc=esdebian,dc=org"
usersdn="ou=people,${suffix}"
computersdn="ou=computer,${suffix}"
groupsdn="ou=group,${suffix}"
idmapdn="ou=idmap,${suffix}"
sambaUnixIdPooldn="sambaDomainName=${sambaDomain},${suffix}"
scope="sub"
hash_encrypt="CRYPT"
crypt_salt_format="%s"
userLoginShell="/bin/bash"
userHome="/home/%U"
userHomeDirectoryMode="700"
userGecos="System User"
defaultUserGid="513"
defaultComputerGid="515"
skeletonDir="/etc/skel"
defaultMaxPasswordAge="365"
userSmbHome="\\debian-pdc\%U"
userProfile="\\debian-pdc\profiles\%U"
userHomeDrive="U:"
userScript="logon.bat %U"
mailDomain="esdebian.org"
with_smbpasswd="0"
smbpasswd="/usr/bin/smbpasswd"
with_slappasswd="0"
slappasswd="/usr/sbin/slappasswd"
6.4- El archivo /etc/smbldap-tools/smbldap_bind.conf
/etc/smbldap-tools/smbldap_bind.conf es el archivo de credenciales, en el se almacenará en claro la clave de administrador del servidor ldap. El contenido deberia ser:
slaveDN="cn=admin,dc=esdebian,dc=org"
slavePw="ldapadmin"
masterDN="cn=admin,dc=esdebian,dc=org"
masterPw="ldapadmin"Se puede definir un servidor LDAP esclavo, el cual solo se utilizará para consultas, y un servidor primario, el cual se utilizará para escrituras. 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 smbldap-populate
Una vez configuradas las herramientas smbldap-tools, podemos inicializar nuestro dominio esdebian.org
La herramienta smbldap-populate poblará nuestro directorio LDAP con:
- Base DN: dc=esdebian,dc=org
- Unidad Organizativa people(ou=people) para las cuentas Unix/Samba: se crearán por defecto los usuarios root y nobody los 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 Grupos Predeterminados de un dominio Samba: Domain Admins, Domain Users, Domain Guests, Domain Computers
- Unidad Organizativa Computers (ou=Computers) para las cuentas de Computadoras Windows
- Unidad 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 dominioadmin entry dc=esdebian,dc=org already exist. Please provide a password for the domain root:
Corramos el comando smbldap-populate
# smbldap-populate
Populating LDAP directory for domain ESDEBIAN (S-1-5-21-669132894-2586221759-3914214969)
(using builtin directory structure)
adding new entry: ou=people,dc=esdebian,dc=org
adding new entry: ou=group,dc=esdebian,dc=org
adding new entry: ou=computer,dc=esdebian,dc=org
adding new entry: ou=idmap,dc=esdebian,dc=org
adding new entry: uid=root,ou=people,dc=esdebian,dc=org
adding new entry: uid=nobody,ou=people,dc=esdebian,dc=org
adding new entry: cn=Domain Admins,ou=group,dc=esdebian,dc=org
adding new entry: cn=Domain Users,ou=group,dc=esdebian,dc=org
adding new entry: cn=Domain Guests,ou=group,dc=esdebian,dc=org
adding new entry: cn=Domain Computers,ou=group,dc=esdebian,dc=org
adding new entry: cn=Administrators,ou=group,dc=esdebian,dc=org
adding new entry: cn=Account Operators,ou=group,dc=esdebian,dc=org
adding new entry: cn=Print Operators,ou=group,dc=esdebian,dc=org
adding new entry: cn=Backup Operators,ou=group,dc=esdebian,dc=org
adding new entry: cn=Replicators,ou=group,dc=esdebian,dc=org
entry sambaDomainName=ESDEBIAN,dc=esdebian,dc=org already exist. Updating it...
Changing UNIX and samba passwords for root
New password: dominioadmin
Retype new password: dominioadmin
La clave solicitada, dominioadmin, es la clave de nuestro usuario Administrador, el administrador del dominio que está mapeado a 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 ldap
Mediante la herramienta pdbedit testearemos que el servidor ldap se comporta como nosostros esperamos, listemos los usuarios del directorio
# pdbedit -L
root:0:root
nobody:65534:nobodyVeamos la información de nuestro usuario root
# pdbedit -Lv root
Unix username: root
NT username: root
Account Flags: [U ]
User SID: S-1-5-21-669132894-2586221759-3914214969-500
Primary Group SID: S-1-5-21-669132894-2586221759-3914214969-513
Full Name: root
Home Directory: \\debian-pdc\root
HomeDir Drive: U:
Logon Script: 'logon.bat root'
Profile Path: \\debian-pdc\profiles\root
Domain: ESDEBIAN
Account desc:
Workstations:
Munged dial:
Logon time: 0
Logoff time: never
Kickoff time: never
Password last set: lun, 18 ene 2010 09:07:47 ART
Password can change: lun, 18 ene 2010 09:07:47 ART
Password must change: never
Last bad password : 0
Bad password count : 0
Logon 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:
# smbldap-usermod -d /root -s /bin/bash rootProbemos ahora conectarnos mediante smbclient:
# smbclient //localhost/netlogon -U root
Enter root's password: dominioadmin
Domain=[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/samba/smbusers, Administrador y Administrator
~# smbclient //localhost/netlogon -U administrador
Enter administrador's password: dominioadmin
Domain=[ESDEBIAN] OS=[Unix] Server=[Samba 3.2.5]
smb: \> quit
~# smbclient //localhost/netlogon -U administrator
Enter administrator's password: dominioadmin
Domain=[ESDEBIAN] OS=[Unix] Server=[Samba 3.2.5]
smb: \> quit
~#7- Configuración de PAM/NSS
El servicio NSS (Name Service Switch) provee una interface para configurar y acceder a diferentes bases de datos de cuentas de usuarios, 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 otros mecanismos para ello.
PAM (Pluggable Authentication Modules) es un mecanismo de autenticación flexible que permite abstraer las aplicaciones y otro software 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 su identidad sin importar que dicha información sea almacenada en un simple archivo de texto plano (/etc/passwd) o un complejo directorio ldap.
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-ldap
El paquete libnss-ldap 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-ldapY respondamos a las siguientes preguntas:
- Identificador de recursos para el servidor LDAP: ldap://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=org
- Contraseña para la cuenta LDAP de root: ldapadmin
El demonio nscd (Name Service Cache Daemon) es una caché de nombres para el servicio NSS. Acelera de forma significativa las consultas 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-ldap.conf
/etc/libnss-ldap.conf es el archivo de configuración de libnss-ldap. 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=org
uri ldap://127.0.0.1/
ldap_version 3
rootbinddn cn=admin,dc=esdebian,dc=org
bind_policy soft
pam_password crypt
nss_base_passwd dc=esdebian,dc=org?sub
nss_base_shadow dc=esdebian,dc=org?sub
nss_base_group ou=group,dc=esdebian,dc=org?one7.1.2- El archivo /etc/libnss-ldap.secret
/etc/libnss-ldap.secret es el archivo de credenciales. Allí se almacena en claro la clave de root del servidor ldap, asegúrese de que los permisos son restrictivos
Propietario root, grupo root y permisos 600
Verifique el contenido del archivo:
# cat /etc/libnss-ldap.secret
ldapadmin7.2- Configurando el paquete libpam-ldap
Reconfiguremos el paquete libpam-ldap
# dpkg-reconfigure libpam-ldap La configuración es similar a libnss-ldap, respondamos a las siguientes preguntas:
- Identificador de recursos para el servidor LDAP: ldap://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
- Crear un administrador de la base de datos local: Sí
- ¿Hace falta un usuario para acceder a la base de datos LDAP?: No
- Cuenta LDAP para root: cn=admin,dc=esdebian,dc=org
- Contraseña para la cuenta LDAP de root: ldapadmin
- Cifrado local a utilizar cuando se cambian las contraseñas: crypt
7.2.1- El archivo /etc/pam_ldap.conf
/etc/pam_ldap.conf es el archivo de configuración de libpam-ldap.
Busque y reemplace el contenido de las siguientes lineas:
base dc=esdebian,dc=org
uri ldap://127.0.0.1/
ldap_version 3
rootbinddn cn=admin,dc=esdebian,dc=org
bind_policy soft
pam_password crypt
nss_base_passwd dc=esdebian,dc=org?sub
nss_base_shadow dc=esdebian,dc=org?sub
nss_base_group ou=group,dc=esdebian,dc=org?one7.2.2- El archivo /etc/pam_ldap.secret
/etc/pam_ldap.secret es el archivo de credenciales. Allí se almacena en claro la clave de root del servidor ldap, asegúrese de que los permisos son restrictivos
Propietario root, grupo root y permisos 600
Verifique el contenido del archivo:
# cat /etc/pam_ldap.secret
ldapadmin7.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 se utilizarán para obtener la información. Teniendo ya configurado libnss-ldap solo modifiquemos las siguientes lineas agregando el origen ldap:
passwd: files ldap
group: files ldap
shadow: files ldapEsto le indica al servicio NSS que debe utilizar el origen files (/etc/passwd, /etc/group y /etc/shadow respectivamente) y el origen ldap (mediante el modulo libnss-ldap)
Ya teniendo samba configurado como servidor de nombres wins podemos agregar también el soporte para resolucion de nombres de hosts mediante ese servicio
hosts: files wins dns Aqui el orden es mas importante, esto indica que deben resolverse nombre de host mediante files (/etc/hosts), luego se utilizará wins (samba) y finalmente mediante el DNS resolver
Con esta configuración ya debemos estar en condiciones de obtener información de los usuarios desde todos los orígenes configurados, 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 root
uid=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 ldap
# getent passwd | grep root
root:x:0:0:root:/root:/bin/bash
root: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:root
Domain Users:*:513:
Domain Guests:*:514:
Domain Computers:*:515:7.4- Configurando PAM
Ahora configuremos el módulo PAM para poder acceder localmente con usuarios del Dominio
Antes 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
# Si no se salta este punto la autenticacion falla siempre # aún cuando la autenticacion tubiera éxito los modulos del bloque
# Lo que denominarías el bloque primario, si cualquiera de los dos módulos tiene
# exito se salta la ejecucion del modulo pam_deny.so
auth [success=2 default=ignore] pam_unix.so nullok_secure
auth [success=1 default=ignore] pam_ldap.so use_first_pass
auth requisite pam_deny.so
# primario podrian no retornar un código positivo, esto soluciona eso
# asegurando un valor positivo si no lo era antes
auth required pam_permit.so
7.4.2- El archivo /etc/pam.d/common-account
# Si no se salta este punto la autenticacion falla siempre # aún cuando la autenticacion tubiera éxito los modulos del bloque
# Lo que denominarias el bloque primario, si cualquiera de los dos módulos tiene
# exito se salta la ejecucion del modulo pam_deny.so
account [success=2 new_authtok_reqd=done default=ignore] pam_unix.so
account [success=1 default=ignore] pam_ldap.so
account requisite pam_deny.so
# primario podrian no retornar un código positivo, esto soluciona eso
# asegurando un valor positivo si no lo era antes
account required pam_permit.so
7.4.3- El archivo /etc/pam.d/common-password
# Lo que denominarias el bloque primario, si cualquiera de los dos módulos tiene # Si no se salta este punto la autenticacion falla siempre # aún cuando la autenticacion tubiera éxito los modulos del bloque
# 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 install libpam-cracklib
password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
# exito se salta la ejecucion del modulo pam_deny.so
password [success=2 default=ignore] pam_unix.so obscure crypt
password [success=1 user_unknown=ignore default=die] pam_ldap.so use_authtok try_first_pass
password requisite pam_deny.so
# primario podrian no retornar un código positivo, esto soluciona eso
# asegurando un valor positivo si no lo era antes
password required pam_permit.so
7.4.4- El archivo /etc/pam.d/common-session
# Si no se salta este punto la autenticacion falla siempre # aún cuando la autenticacion tubiera éxito los modulos del bloque # Se chequean los privilegios y restricciones
# 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 un apartado de
# sesion, por lo tanto lo que se controla no es el acceso sino los privilegios efectivos
# de un usuario ya autenticado)
session [default=1] pam_permit.so
session requisite pam_deny.so
# primario podrian no retornar un código positivo, esto soluciona eso
# asegurando un valor positivo si no lo era antes
session required pam_permit.so
session required pam_unix.so
session optional pam_ldap.so
8- Creación de usuarios y grupos en el directorio LDAP mediante smbldap-tools
Llegado a este punto ya se debería estar en condiciones de ingresar al servidor mediante usuarios del Dominio, los cuales autenticará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 uno
8.1- Crear usuarios del dominio
Para esto nos valdremos de las herramientas provistas por smbldap-tools.
Mediante la herramienta smbldap-useradd crearemos agregamos al usuario pepe al dominio
# smbldap-useradd -a -m -P pepe
Cannot confirm uidNumber 1000 is free: checking for the next one
Changing UNIX and samba passwords for pepe
New password: 123456
Retype new password: 123456- La opción -a indica que es un usuario Windows
- La opción -m indica que debe crearse el home del usuario e inicializarlo con el contenido de /etc/skel que es el comportamiento standard para la creación de una cuenta UNIX. Esta opción no siempre es necesario incluirla ya puede pasar que no todos los usuarios del dominio necesiten un HOME en el servidor
- La opción -P indica que se solicitará y establecerá un password al usuario
man smbldap-useradd para mas información acerca de las opciones del comando
La contraseña de pepe es 123456, es una contraseña muy simple que el sistema nos ha dejado crear porque somos root, si pepe desea en el futuro cambiar su contraseña deberá cumplir las especificaciones del archivo /etc/pam.d/common-password impuestas por el módulo pam_cracklib
También vemos el mensaje "Cannot confirm uidNumber 1000 is free: checking for the next one". Ese mensaje solo aparecerá ésta primera vez, de ahora en más el último UID se almacenará en sambaUnixIdPooldn como lo establece el archivo /etc/smbldap-tools/smbldap.conf y el siguiente UID libre se determinará en base a eso. Cuando se agrege el primer grupo sucederá lo mismo.
Podemos verificar que el usuario se ha creado pero no existe localmente:
:~# cat /etc/passwd | grep pepe
:~# getent passwd | grep pepe
pepe:x:1003:513:System User:/home/pepe:/bin/bash
:~#El paquete libpam-dotfile nos provee la herramienta pamtest que nos permite verificar el funcionamiento de los mecanismos de autenticación. Probemos con nuestro usuario pepe
:~# pamtest passwd pepe
Trying to authenticate <pepe> for service <passwd>.
Password: 123456
Authentication successful.Los mecanismos de autenticación funcionan correctamente, accedamos al sistema con el usuario pepe: The programs included with the Debian GNU/Linux system are free software; Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
debian-pdc login: pepe
Password: 123456
Linux debian-pdc 2.6.26-2-686 #1 SMP Wed Nov 4 20:45:37 UTC 2009 i686
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
permitted by applicable law.
I have no name!@debian-pdc:~$
Y pudimos acceder al equipo mediante una cuenta ldap. Nos llama la atencion ese "I have no name!" en el prompt, si hacemos
$ whoami
whoami: 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
$ whoami
pepe8.2- Crear un usuario administrador del dominio
A diferencia de los sistemas Linux/Unix, donde el administrador del dominio es root y su UID es 0, en un Dominio Windows para ser administrador 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 smbldap-adduser que lo incluya en el grupo 512
# smbldap-useradd -a -m -G 512 -P adminnuevo
Changing UNIX and samba passwords for adminnuevo
New password: adminnuevo
Retype new password: adminnuevoTambién podemos ingresar al sistema mediante éste usuario, y podremos comprobar que es solo un administrador del dominio pero no tiene permisos de root (su prompt no es #)
$ id adminnuevo
uid=1002(adminnuevo) gid=513(Domain Users) grupos=512(Domain Admins),513(Domain Users)8.3- Crear un Grupo en el dominio
Simplemente haciendo:
:~# smbldap-groupadd -a "Grupo Nuevo"
Cannot confirm gidNumber 1000 is free: checking for the next one
Cannot confirm gidNumber 1001 is free: checking for the next one
Cannot 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 dominio
Probemos eliminar el grupo recién creado:
:~# smbldap-groupdel "Grupo Nuevo"
:~# Y el grupo ya no existe
:~# getent group | grep "Grupo Nuevo"
:~#Eliminemos el usuario pepe que creamos anteriormente
:~# smbldap-userdel -r pepe
:~#La opción -r indica que debe eliminarse el home del usuario
Podemos verificar que el usuario ya no existe
:~# getent passwd | grep pepe
:~#9- Agregar los usuarios y grupos Linux/Unix locales al directorio LDAP
Para la migracion de usuarios y grupos Unix al ldap se utilizarán herramientas provistas por el paquete smbldap-tools
Dichas herramientas no son provistas como parte del paquete de software sino en la parte de documentación. Las herramientas se encuentran en los archivos:
/usr/share/doc/smbldap-tools/examples/migration_scripts/smbldap-migrate-unix-accounts.gz
/usr/share/doc/smbldap-tools/examples/migration_scripts/smbldap-migrate-unix-groups.gz
Debemos descomprimir estos archivos y hacerlos ejecutables. Los copiaremos a alguna ubicación que figure en nuestro path como ser /usr/sbin
# zcat /usr/share/doc/smbldap-tools/examples/migration_scripts/smbldap-migrate-unix-accounts.gz > /usr/sbin/smbldap-migrate-unix-accounts
# zcat /usr/share/doc/smbldap-tools/examples/migration_scripts/smbldap-migrate-unix-groups.gz > /usr/sbin/smbldap-migrate-unix-groups
# chmod 755 /usr/sbin/smbldap-migrate-unix-accounts /usr/sbin/smbldap-migrate-unix-groups Migrando usuarios locales al directorio LDAP
El script smbldap-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 ldap, 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:
# smbldap-migrate-unix-accounts -a -P /tmp/passwd -S /tmp/shadowMigrando grupos locales al directorio LDAP
Nuevamente 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 si corramos la herramienta de migración:
# smbldap-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 a dichos grupos, por ejemplo al usuario adminnuevo:
# smbldap-usermod --group audio,video,floppy,cdrom,plugdev,"Domain Admins","Domain Users" adminnuevoy podemos ver que adminnuevo ya es miembro de esos grupos:
# id adminnuevo
uid=1002(adminnuevo) gid=513(Domain Users) grupos=513(Domain Users),512(Domain Admins),24(cdrom),25(floppy),29(audio),44(video),46(plugdev)NOTA: Recuerde detener el demonio nscd para hacer estas pruebas
10- Agregar equipos Windows al Dominio
Hemos terminado las configuraciones, nuestro servidor se comporta ahora como un controlador de Dominio NT, ya nos debería ser posible unir terminales Windows a nuestro Dominio.
10.1- Requisitos del sistema Windows
El 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: samba puede ser cliente en un dominio Active Directory y utilizar 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, un dominio Active Directory es gobernado por una implementación DNS. Si bien Active Directory soporta wins (no por defecto, debe instalarse) se basa en DNS para ubicar objetos en la red y esto requiere que los clientes tengan al controlador 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 dominio esdebian.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 clientes no 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á en este articulo.
Configuración de red
Asignemos al cliente una dirección IP dentro del segmento de red de nuestro servidor y configuremos para que el servidor wins sea nuestro servidor Samba. Debemos habilitar también NetBIOS sobre TCP/IP:

10.2- Unir el equipo con Windows XP Professional al dominio Samba
Agregaremos 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 dominio
Un equipo dentro del dominio es un usuario dentro de la ou=Computers, el nombre de usuario esel nombre del equipo con la diferencia que su nombre finaliza con un $
Podemos verlo con
# getent passwd | grep Computer
pc-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-1001
Primary Group SID: S-1-5-21-669132894-2586221759-3914214969-515
Full 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: ESDEBIAN
Account desc: Computer
Workstations:
Munged dial:
Logon time: 0
Logoff time: never
Kickoff time: never
Password last set: mar, 19 ene 2010 07:30:23 ART
Password can change: mar, 19 ene 2010 07:30:23 ART
Password must change: never
Last bad password : 0
Bad password count : 0
Logon hours : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFPor lo tanto eliminar un equipo del dominio es lo mismo que eliminar un usuario, se lo hace mediante la herramienta smbldap-userdel
:~# smbldap-userdel pc-win$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 dicho equipo 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 cliente Linux/Unix debe porder ser configurado. La única diferencia destacable en la configuracion es que en sistemas no Debian el archivo /etc/libnss-ldap.conf suele llamarse simplemente /etc/ldap.conf
Instalemos en el cliente el software necesario:
# aptitude install libnss-ldap libpam-ldap libpam-crackliby respondamos a las siguientes preguntas:
Configuración de libnss-ldap:
- Identificador de recursos para el servidor LDAP: ldap://192.168.1.200/
- El nombre distintivo (DN) de la base de búsquedas: dc=esdebian,dc=org
- Versión de LDAP a utilizar: 3
- Cuenta LDAP para root: cn=admin,dc=esdebian,dc=org
- Contraseña para la cuenta LDAP de root: dejar vacío
Configuración de libpam-ldap:
- Crear un administrador de la base de datos local: No
- ¿Hace falta un usuario para acceder a la base de datos LDAP? : No
No olvidemos la seguridad
Es importante destacar que cuando se nos preguntó "Contraseña para la cuenta LDAP de root:" durante la configuración de libnss-ldap no se respondió nada.
La contraseña de root para la cuenta ldap es la que definimos en el servidor, en nuestro caso era ldapadmin, y la utiliza entre otras cosas samba para modificar la base de datos agregando usuarios y demás. Sin embargo nuestro servidor ldap es accesible desde toda la red y una red con cientos de clientes Linux/Unix que tengan almacenada la contraseña de root para acceder al servidor ldap 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 archivos de configuración comentaremos la linea.
Los archivos de configuración de PAM y NSS
PAM y NSS utilizarán la misma base de datos ldap, por la tanto su configuración es igual. # URI del servidor ldap, en nuestro caso es 192.168.1.200 # Version de ldap a utilizar # Cuenta de root ldap bind_policy soft nss_base_passwd dc=esdebian,dc=org?sub
Editamos los archivos /etc/libnss-ldap.conf y /etc/pam_ldap.conf, y reemplazamos con lo siguiente (la configuración es muy similar a la del servidor):
# DN base
base dc=esdebian,dc=org
uri ldap://192.168.1.200/
ldap_version 3
# Esta linea no es necesaria, la comentamos o borramos
# rootbinddn cn=admin,dc=esdebian,dc=org
pam_password crypt
nss_base_shadow dc=esdebian,dc=org?sub
nss_base_group ou=group,dc=esdebian,dc=org?one
Modificamos /etc/nsswitch.conf agregando ldap para las búsquedas y wins para resolver nombres:
passwd: files ldap
group: files ldap
shadow: files ldap
hosts: 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-auth
auth [success=2 default=ignore] pam_unix.so nullok_secure
auth [success=1 default=ignore] pam_ldap.so use_first_pass
auth requisite pam_deny.so
auth required pam_permit.so/etc/pam.d/common-account
account [success=2 new_authtok_reqd=done default=ignore] pam_unix.so
account [success=1 default=ignore] pam_ldap.so
account requisite pam_deny.so
account required pam_permit.so/etc/pam.d/common-password
password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
password [success=2 default=ignore] pam_unix.so obscure crypt
password [success=1 user_unknown=ignore default=die] pam_ldap.so use_authtok try_first_pass
password requisite pam_deny.so
password required pam_permit.so/etc/pam.d/common-session
La configuración de este archivo difiere de la del servidor PDC.
En el servidor podemos crear las cuentas de usuario mediante smbldap-useradd agregando la opción -m de modo que el home de cada 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 home del usuario en caso que no exista. Eso es lo que motiva agregar la primer linea del archivo
session required pam_mkhomedir.so
session [default=1] pam_permit.so
session requisite pam_deny.so
session required pam_permit.so
session required pam_unix.so
session optional pam_ldap.soProbando la configuración
Primero 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 de adminnuevo que creamos anteriormente: Linux debian-cli 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; Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
debian-cli login: adminnuevo
Password:
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
permitted by applicable law.
Creating directory '/home/adminnuevo'
adminnuevo@debian-cli:~$
Y hemos logrado hacer login con un usuario del dominio
Vemos también como el módulo pam_mkhomedir.so definido en /etc/pam.d/common-session ha creado el home del usuario en el equipo local. Esto solo sucede para el primer login
12- Referencias
http://linuxcursosgratis.org/Documentos/usando-samba/node1.html
http://edin.no-ip.com/content/ldap-samba-pdc-pamnss-debian-lenny-howto
http://tuxjm.net/docs/Configurar_Servidor_Controlador_de_Dominio_con_Sam...
http://wiki.debian.org/LDAP/NSS
http://wiki.samba.org/index.php/Implementing_System_Policies_with_Samba
http://www.pcc-services.com/custom_poledit.html